Repository: dominator88/laravel-smart Branch: master Commit: 023ed0967e53 Files: 352 Total size: 1.9 MB Directory structure: gitextract_hsg3eqim/ ├── .gitattributes ├── .gitignore ├── Func.php ├── README.MD ├── composer.json ├── config/ │ └── backend.php ├── database/ │ └── migrations/ │ ├── 2014_10_12_000000_create_users_table.php │ ├── 2014_10_12_100000_create_password_resets_table.php │ ├── 2017_10_20_100811_create_sys_api_log_table.php │ ├── 2017_10_20_100853_create_sys_func_table.php │ ├── 2017_10_20_100900_create_sys_func_privilege_table.php │ ├── 2017_10_20_100908_create_sys_mail_table.php │ ├── 2017_10_20_100917_create_sys_merchant_table.php │ ├── 2017_10_20_100923_create_sys_push_table.php │ ├── 2017_10_20_100929_create_sys_role_table.php │ ├── 2017_10_20_100940_create_sys_role_permission_table.php │ ├── 2017_10_20_100949_create_sys_sms_table.php │ ├── 2017_10_20_101005_create_sys_statistics_table.php │ ├── 2017_10_20_101023_create_sys_user_group_table.php │ ├── 2017_10_20_101030_create_sys_user_role_table.php │ ├── 2017_10_20_101753_create_sys_app_version_table.php │ ├── 2017_10_20_102342_create_sys_area_table.php │ ├── 2017_10_21_024032_create_mer_album_table.php │ ├── 2017_10_21_024040_create_mer_album_catalog_table.php │ ├── 2017_10_21_024048_create_mer_album_tag_table.php │ ├── 2017_10_21_024128_create_mer_goods_catalog_table.php │ ├── 2017_10_21_024140_create_mer_sys_user_table.php │ ├── 2017_10_25_071323_create_sys_user_table.php │ ├── 2017_10_25_075251_create_mer_user_table.php │ ├── 2017_11_17_034153_create_mer_user_device_table.php │ ├── 2017_11_17_034153_create_sys_user_device_table.php │ ├── 2017_11_20_074023_create_mer_user_address_table.php │ ├── 2017_11_21_070513_create_mer_goods_table.php │ ├── 2017_11_21_075633_create_mer_user_comments_table.php │ ├── 2017_11_22_023637_create_mer_order_table.php │ ├── 2017_11_22_031423_create_mer_articles_table.php │ ├── 2017_11_22_031451_create_mer_articles_catalog_table.php │ ├── 2017_11_22_031539_create_mer_ad_table.php │ ├── 2017_11_22_031555_create_mer_ad_catalog_table.php │ ├── 2017_11_23_015844_create_mer_goods_profile_table.php │ ├── 2017_11_23_024951_create_mer_goods_icon_table.php │ ├── 2017_11_23_051615_create_mer_order_items_table.php │ ├── 2018_06_13_070749_create_sys_modules_table.php │ └── 2018_06_23_095013_create_sys_settings_table.php ├── phpunit.xml.dist ├── resources/ │ ├── Api/ │ │ ├── Index.php │ │ ├── Service/ │ │ │ ├── ApiService.php │ │ │ └── v1/ │ │ │ ├── system/ │ │ │ │ └── AreaService.php │ │ │ └── test/ │ │ │ └── LoginService.php │ │ └── routes.php │ ├── Models/ │ │ ├── MerAlbum.php │ │ ├── MerAlbumTag.php │ │ ├── MerArticles.php │ │ ├── MerGoodsCatalog.php │ │ ├── SysUser.php │ │ └── User.php │ ├── Service/ │ │ └── MerTokenService.php │ ├── assets/ │ │ └── static/ │ │ ├── .gitignore │ │ ├── js/ │ │ │ ├── backend/ │ │ │ │ ├── Generate.js │ │ │ │ ├── Index.js │ │ │ │ ├── MerAd.js │ │ │ │ ├── MerEvent.js │ │ │ │ ├── MerFunc.js │ │ │ │ ├── MerGoodsCatalog.js │ │ │ │ ├── MerRole.js │ │ │ │ ├── MerSysUser.js │ │ │ │ ├── MerUser.js │ │ │ │ ├── MerUserFavorites.js │ │ │ │ ├── Simulator.js │ │ │ │ ├── SimulatorReadme.js │ │ │ │ ├── SysApiLog.js │ │ │ │ ├── SysAppVersion.js │ │ │ │ ├── SysArea.js │ │ │ │ ├── SysFunc.js │ │ │ │ ├── SysMail.js │ │ │ │ ├── SysMerchant.js │ │ │ │ ├── SysMerchantDetail.js │ │ │ │ ├── SysPush.js │ │ │ │ ├── SysRole.js │ │ │ │ ├── SysSms.js │ │ │ │ └── SysUser.js │ │ │ ├── global/ │ │ │ │ ├── app.js │ │ │ │ ├── auth.js │ │ │ │ └── layout.js │ │ │ ├── index/ │ │ │ │ ├── Articles.js │ │ │ │ ├── Auth.js │ │ │ │ ├── Index.js │ │ │ │ ├── Questions.js │ │ │ │ ├── QuestionsCreate.js │ │ │ │ └── Users.js │ │ │ └── mp/ │ │ │ ├── Index.js │ │ │ ├── MerAd.js │ │ │ ├── MerAdCatalog.js │ │ │ ├── MerArticles.js │ │ │ ├── MerArticlesCatalog.js │ │ │ ├── MerGoods.js │ │ │ ├── MerGoodsCatalog.js │ │ │ ├── MerOrder.js │ │ │ └── MerUser.js │ │ ├── plugins/ │ │ │ ├── dmg-ui/ │ │ │ │ ├── AreaSelection.js │ │ │ │ ├── TableGrid.js │ │ │ │ ├── TreeGrid.js │ │ │ │ ├── Uploader.js │ │ │ │ ├── album.js │ │ │ │ ├── auto_fill.js │ │ │ │ └── tiles.js │ │ │ └── jquery-md5/ │ │ │ └── jQuery.md5.js │ │ ├── src/ │ │ │ ├── js/ │ │ │ │ └── global/ │ │ │ │ ├── app.js │ │ │ │ ├── custom.js │ │ │ │ ├── format.js │ │ │ │ └── layout.js │ │ │ └── themes/ │ │ │ └── global/ │ │ │ ├── components-rounded.css │ │ │ ├── custom.css │ │ │ ├── darkblue.css │ │ │ ├── error.css │ │ │ ├── img/ │ │ │ │ └── flags/ │ │ │ │ └── readme.txt │ │ │ ├── layout.css │ │ │ └── plugins.css │ │ └── themes/ │ │ ├── global/ │ │ │ └── login.css │ │ └── index/ │ │ ├── app.css │ │ └── articles.css │ ├── npm/ │ │ └── package.json │ └── views/ │ ├── auth/ │ │ ├── login.blade.php │ │ ├── passwords/ │ │ │ ├── email.blade.php │ │ │ └── reset.blade.php │ │ └── register.blade.php │ ├── generate/ │ │ └── index.blade.php │ ├── home.blade.php │ ├── index/ │ │ └── index.blade.php │ ├── layouts/ │ │ └── app.blade.php │ ├── meralbum/ │ │ └── index.blade.php │ ├── meralbumcatalog/ │ │ └── index.blade.php │ ├── merfunc/ │ │ └── index.blade.php │ ├── mergoodscatalog/ │ │ └── index.blade.php │ ├── merrole/ │ │ ├── index.blade.php │ │ └── permission.blade.php │ ├── mersysuser/ │ │ └── index.blade.php │ ├── meruser/ │ │ └── index.blade.php │ ├── modulefunc/ │ │ └── index.blade.php │ ├── modulerole/ │ │ ├── index.blade.php │ │ └── permission.blade.php │ ├── public/ │ │ ├── footer.blade.php │ │ ├── header.blade.php │ │ ├── layout.blade.php │ │ ├── layout1.blade.php │ │ └── sidebar_menu.blade.php │ ├── simulator/ │ │ ├── index.blade.php │ │ └── params.blade.php │ ├── sysapilog/ │ │ └── index.blade.php │ ├── sysappversion/ │ │ └── index.blade.php │ ├── sysarea/ │ │ └── index.blade.php │ ├── sysfunc/ │ │ └── index.blade.php │ ├── sysmail/ │ │ └── index.blade.php │ ├── sysmerchant/ │ │ ├── detail.blade.php │ │ └── index.blade.php │ ├── sysmodules/ │ │ ├── index.blade.php │ │ └── role.blade.php │ ├── syspush/ │ │ └── index.blade.php │ ├── sysrole/ │ │ ├── index.blade.php │ │ └── permission.blade.php │ ├── syssettings/ │ │ ├── index.blade.php │ │ └── sms.blade.php │ ├── syssms/ │ │ └── index.blade.php │ ├── sysuser/ │ │ └── index.blade.php │ ├── welcome.blade.php │ └── widget/ │ ├── Checkbox.blade.php │ ├── File.blade.php │ ├── Hidden.blade.php │ ├── Image.blade.php │ ├── Radio.blade.php │ ├── Text.blade.php │ └── Textarea.blade.php ├── router/ │ └── routes.php ├── src/ │ ├── Auth/ │ │ └── Database/ │ │ └── seeds/ │ │ └── AdminTableSeeder.php │ ├── Console/ │ │ ├── InstallCommand.php │ │ └── UninstallCommand.php │ ├── Controllers/ │ │ ├── Backend/ │ │ │ ├── AuthController.php │ │ │ ├── Backend.php │ │ │ ├── Generate.php │ │ │ ├── Index.php │ │ │ ├── MerAlbum.php │ │ │ ├── MerAlbumCatalog.php │ │ │ ├── MerAlbumTag.php │ │ │ ├── MerFunc.php │ │ │ ├── MerGoodsCatalog.php │ │ │ ├── MerRole.php │ │ │ ├── MerSysUser.php │ │ │ ├── MerUser.php │ │ │ ├── ModuleFunc.php │ │ │ ├── ModuleRole.php │ │ │ ├── Simulator.php │ │ │ ├── SysApiLog.php │ │ │ ├── SysAppVersion.php │ │ │ ├── SysArea.php │ │ │ ├── SysBase.php │ │ │ ├── SysFunc.php │ │ │ ├── SysMail.php │ │ │ ├── SysMerchant.php │ │ │ ├── SysModule.php │ │ │ ├── SysPush.php │ │ │ ├── SysRole.php │ │ │ ├── SysSettings.php │ │ │ ├── SysSms.php │ │ │ └── SysUser.php │ │ └── Controller.php │ ├── Extensions/ │ │ └── EloquentUserProvider.php │ ├── Interfaces/ │ │ └── TokenService.php │ ├── Lib/ │ │ └── Discover.php │ ├── Middleware/ │ │ ├── CheckToken.php │ │ ├── Cors.php │ │ ├── Permission.php │ │ └── ResetPassword.php │ ├── Models/ │ │ ├── MerAlbum.php │ │ ├── MerAlbumCatalog.php │ │ ├── MerAlbumTag.php │ │ ├── MerGoodsCatalog.php │ │ ├── MerSysUser.php │ │ ├── MerUser.php │ │ ├── MerUserDevice.php │ │ ├── SysApiLog.php │ │ ├── SysAppVersion.php │ │ ├── SysArea.php │ │ ├── SysFunc.php │ │ ├── SysFuncPrivilege.php │ │ ├── SysMail.php │ │ ├── SysMerchant.php │ │ ├── SysModule.php │ │ ├── SysPush.php │ │ ├── SysRole.php │ │ ├── SysRolePermission.php │ │ ├── SysSettings.php │ │ ├── SysSms.php │ │ ├── SysStatistics.php │ │ ├── SysUser.php │ │ ├── SysUserDevice.php │ │ ├── SysUserRole.php │ │ └── User.php │ ├── Service/ │ │ ├── BaseService.php │ │ ├── GenerateService.php │ │ ├── MerAlbumCatalogService.php │ │ ├── MerAlbumService.php │ │ ├── MerAlbumTagService.php │ │ ├── MerGoodsCatalogService.php │ │ ├── MerSysUserService.php │ │ ├── MerUserService.php │ │ ├── ServiceManager.php │ │ ├── SimulatorService.php │ │ ├── SysApiLogService.php │ │ ├── SysAppVersionService.php │ │ ├── SysAreaService.php │ │ ├── SysFuncPrivilegeService.php │ │ ├── SysFuncService.php │ │ ├── SysMailService.php │ │ ├── SysMerchantService.php │ │ ├── SysModulesService.php │ │ ├── SysPushService.php │ │ ├── SysRolePermissionService.php │ │ ├── SysRoleService.php │ │ ├── SysSettingsService.php │ │ ├── SysSmsService.php │ │ ├── SysUserDeviceService.php │ │ ├── SysUserRoleService.php │ │ ├── SysUserService.php │ │ ├── UploadManager.php │ │ ├── UploadService.php │ │ ├── WidgetService.php │ │ └── widget/ │ │ ├── RadioWidget.php │ │ └── TextWidget.php │ ├── SmartServiceProvider.php │ └── Traits/ │ ├── api/ │ │ └── Service.php │ └── service/ │ ├── GridTable.php │ ├── Instance.php │ ├── Scope.php │ ├── ScopeMer.php │ └── TreeTable.php ├── templates/ │ ├── generate/ │ │ ├── api/ │ │ │ ├── api.txt │ │ │ ├── auth_user.txt │ │ │ └── params/ │ │ │ ├── api_token.txt │ │ │ ├── goodsId.txt │ │ │ ├── merId.txt │ │ │ ├── orderId.txt │ │ │ ├── page.txt │ │ │ ├── pageSize.txt │ │ │ ├── phone.txt │ │ │ └── status.txt │ │ └── system/ │ │ ├── component/ │ │ │ ├── editor/ │ │ │ │ ├── controller/ │ │ │ │ │ ├── editor_decode.txt │ │ │ │ │ ├── editor_js.txt │ │ │ │ │ └── editor_uri.txt │ │ │ │ └── js/ │ │ │ │ ├── editor_clear.txt │ │ │ │ ├── editor_init.txt │ │ │ │ ├── editor_reload.txt │ │ │ │ └── editor_upload_uri.txt │ │ │ ├── field/ │ │ │ │ └── view/ │ │ │ │ ├── editor.txt │ │ │ │ ├── input.txt │ │ │ │ ├── radio.txt │ │ │ │ ├── select.txt │ │ │ │ ├── select2.txt │ │ │ │ └── upload.txt │ │ │ ├── select2/ │ │ │ │ ├── controller/ │ │ │ │ │ ├── select2_css.txt │ │ │ │ │ ├── select2_js.txt │ │ │ │ │ └── select2_uri.txt │ │ │ │ └── js/ │ │ │ │ ├── select2_clear.txt │ │ │ │ ├── select2_init.txt │ │ │ │ └── select2_set.txt │ │ │ ├── table_type/ │ │ │ │ ├── controller/ │ │ │ │ │ ├── grid_js.txt │ │ │ │ │ ├── grid_read.txt │ │ │ │ │ ├── tree_grid_js.txt │ │ │ │ │ └── tree_grid_read.txt │ │ │ │ ├── js/ │ │ │ │ │ ├── grid_id.txt │ │ │ │ │ ├── grid_init.txt │ │ │ │ │ ├── grid_plugin.txt │ │ │ │ │ ├── tree_grid_id.txt │ │ │ │ │ ├── tree_grid_init.txt │ │ │ │ │ └── tree_grid_plugin.txt │ │ │ │ ├── service/ │ │ │ │ │ ├── grid.txt │ │ │ │ │ ├── grid_trait.txt │ │ │ │ │ ├── tree_grid.txt │ │ │ │ │ └── tree_grid_trait.txt │ │ │ │ └── view/ │ │ │ │ ├── grid.txt │ │ │ │ └── tree_grid.txt │ │ │ ├── traits/ │ │ │ │ └── instance_trait.txt │ │ │ ├── upload/ │ │ │ │ ├── controller/ │ │ │ │ │ ├── upload_js.txt │ │ │ │ │ ├── upload_param.txt │ │ │ │ │ └── upload_uri.txt │ │ │ │ └── js/ │ │ │ │ ├── upload_button.txt │ │ │ │ ├── upload_preview_clear.txt │ │ │ │ └── upload_preview_set.txt │ │ │ └── view_type/ │ │ │ ├── js/ │ │ │ │ ├── modal.txt │ │ │ │ └── portlet.txt │ │ │ └── view/ │ │ │ ├── modal.txt │ │ │ └── portlet.txt │ │ ├── controller.txt │ │ ├── js.txt │ │ ├── model.txt │ │ ├── service.txt │ │ └── view.txt │ └── module/ │ ├── config.txt │ ├── controllers/ │ │ ├── index.txt │ │ └── module.txt │ ├── providers/ │ │ └── mainproviders.txt │ ├── routes.txt │ └── views/ │ └── Index/ │ └── index.txt └── tests/ ├── CreatesApplication.php ├── IndexTest.php ├── Simulator.php ├── SysFuncTest.php ├── SysUserTest.php ├── TestCase.php ├── config/ │ ├── backend.php │ └── filesystems.php ├── factories/ │ └── factory.php └── router/ └── routes.php ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ *.js linguist-language=PHP *.css linguist-language=PHP *.html linguist-language=PHP ================================================ FILE: .gitignore ================================================ /vendor/ composer.lock ================================================ FILE: Func.php ================================================ $val) { if (!isset($config[$key]) || $config[$key] === '') { $config[$key] = $val; } else if (is_array($config[$key])) { $config[$key] = extend($val, $config[$key]); } } return $config; } } if (!function_exists('form_radios')) { /** * 水平radio 改良 * * @param $name * @param $data * @param int $checked_value * * @return mixed|string */ function form_radios($name, $data, $checked_value = 0) { $html = []; $i = 0; foreach ($data as $key => $val) { if($val == (string)$checked_value || ($checked_value==0 && $i++ == 0)){ $html[] = ''; }else{ $html[] = ''; } } return join('',$html); } } if (!function_exists('form_radio_rows')) { /** * 水平radio 改良 * * @param $name * @param $data * @param int $checked_value * * @return mixed|string */ function form_radio_rows($name, $data, $key = 'id', $val = 'name', $checked_value = 0) { $html = []; foreach ($data as $item) { if($val == (string)$checked_value ){ $html[] = ''; }else{ $html[] = ''; } } return join('',$html); } } if (!function_exists('form_radio')) { function form_radio($name, $data, $checked_value = 0, $title) { $data = [ 'type' => 'radio', 'title' => $title, 'name' => $name, 'data' => $data, 'value' => $checked_value, ]; return form_field($data); } } if (!function_exists('form_text2')) { function form_text2($name, $value = 0, $title, $help = '', $placeholder = '') { $data = [ 'type' => 'text', 'title' => $title, 'name' => $name, 'data' => $data, 'value' => $value, 'help' => $help, 'placeholder' => $placeholder, ]; return form_field($data); } } //use Facades\Smart\Service\WidgetService; function form_field($param) { $widgetService = Facades\Smart\Service\WidgetService::make($param); return $widgetService; } if (!function_exists("ajax_arr")) { /** * 生成需要返回 ajax 数组 * * @param $msg //消息 * @param int $code //0 正常 , > 0 错误 * @param array $data //需要传递的参数 * * @return array */ function ajax_arr($msg, $code = 500, $data = []) { $arr = [ 'msg' => $msg, 'code' => $code, ]; if ($data !== '') { $arr['data'] = $data; } return $arr; } } if (!function_exists('form_options')) { /** * 生成下拉选项 * * @param $data * @param int $selected_value * * @return mixed|string */ function form_options($data, $selected_value = -1) { $html = ''; foreach ($data as $key => $val) { $html .= ""; } if ($selected_value >= 0) { $html = str_replace("value='$selected_value'", "value='$selected_value' selected", $html); } return $html; } } if (!function_exists('form_checkbox_rows')) { /** * checkbox * * @param $name * @param $data * @param string $key * @param string $val * @param int $checked_value * * @return mixed|string */ function form_checkbox_rows($name, $data, $key = 'id', $val = 'name', $checked_value = 0) { $html = ''; foreach ($data as $item) { $html .= ''; } if ($checked_value >= 0) { $html = str_replace('value="' . $checked_value . '"', "value='$checked_value' checked", $html); } return $html; } } if (!function_exists('str2pwd')) { /** * 字符串加密 * * @param $str * * @return bool|string */ function str2pwd($str) { return password_hash($str, PASSWORD_BCRYPT, ["cost" => 10]); } } if (!function_exists('json')) { function json(Array $array) { return response()->json($array); } } if (!function_exists('api_result')) { function api_result($msg, $code_or_data = 500, $data = []) { $result = [ 'msg' => $msg, ]; if (is_array($code_or_data)) { $result['code'] = 0; $data = array_merge($code_or_data, $data); } else { $result['code'] = $code_or_data; } if (!empty($data)) { $result['data'] = $data; } return $result; } } if (!function_exists('rand_string')) { /** * 生成随机字符串 * * @param $length * * @return string */ function rand_string($length = 6) { $str = NULL; $strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"; $max = strlen($strPol) - 1; for ($i = 0; $i < $length; $i++) { $str .= $strPol[rand(0, $max)]; // rand($min,$max)生成介于min和max两个数之间的一个随机整数 } return $str; } } if (!function_exists('form_options_rows')) { /** * 生成下拉选项 from rows * * @param $data * @param string $id * @param string $text * @param string $node_field * @param int $selected_value * @param array $dat * * @return mixed|string */ function form_options_rows($data, $id = 'id', $text = "name", $node_field = "children", $selected_value = 0, $dat = []) { $html = ''; foreach ($data as $row) { $value = $row->$id; $prefix = ''; if (isset($row->level)) { $prefix = $row->level - 1 > 0 ? str_repeat('    ', $row->level - 1) . '└─ ' : ''; // ┗ } $title = $prefix . $row->$text; $d = ''; foreach ($dat as $p) { $d .= sprintf(' data-%s="%s"', $p, $row[$p]); } $html .= sprintf('', $value, $d, $title); if (isset($row->$node_field)) { $html .= form_options_rows($row[$node_field], $id, $text, 0, $row->level + 1); } } if (!empty($selected_value)) { $html = str_replace('value="' . $selected_value . '"', 'value="' . $selected_value . '" selected', $html); } return $html; } } if (!function_exists('form_options_rows_group')) { /** * optgroup 显示 options * * @param $data * @param $valueField * @param $textField * @param $groupField * * @return string */ function form_options_rows_group($data, $valueField = 'id', $textField = 'text', $groupField = 'type_text') { $newData = []; foreach ($data as $item) { if (array_key_exists($groupField, $item)) { $newData[$item[$groupField]][] = $item; } } $html = ''; foreach ($newData as $key => $row) { $html .= ''; foreach ($row as $r) { $html .= ' '; } $html .= ' '; } return $html; } } if (!function_exists('file_size')) { function file_size($size) { $unit = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']; $index = 0; do { $size = $size / 1024; $index++; } while ($size >= 1024); return round($size, 1) . $unit[$index]; } } if (!function_exists('full_img_uri')) { /** * 返回图片绝对路径 * * @param $imgUri * * @return string */ function full_img_uri($imgUri) { if (config('backend.image.uploadType') == 'local') { return route($imgUri, '', '', TRUE); } return config('backend.image.imgUri') . $imgUri; } } if (!function_exists('css')) { /** * 返回图片绝对路径 * * @param $imgUri * * @return string */ function css() { if(class_exists(Mp\Service\Common\Asset::class)){ return Mp\Service\Common\Asset::css(); } } } if (!function_exists('js')) { /** * 返回图片绝对路径 * * @param $imgUri * * @return string */ function js() { if(class_exists(Mp\Service\Common\Asset::class)){ return Mp\Service\Common\Asset::js(); } } } if (!function_exists('script')) { /** * 返回图片绝对路径 * * @param $imgUri * * @return string */ function script() { if(class_exists(Mp\Service\Common\Asset::class)){ return Mp\Service\Common\Asset::script(); } } } if(!function_exists('human_filesize')){ /** * 返回可读性更好的文件尺寸 */ function human_filesize($bytes, $decimals = 2) { $size = ['B', 'kB', 'MB', 'GB', 'TB', 'PB']; $factor = floor((strlen($bytes) - 1) / 3); return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) .@$size[$factor]; } } if(!function_exists('is_image')){ /** * 判断文件的MIME类型是否为图片 */ function is_image($mimeType) { return starts_with($mimeType, 'image/'); } } ================================================ FILE: README.MD ================================================ laravel-smart --------- - 项目的路由,视图文件均在扩展包内,默认的后台请不要作改动啦,项目主要的优势在于API接口的开发,自动生成标准的API文件格式 - 普通web应用也能做,如果需要添加额外的路由,请直接在根目录下的 `routes/web.php` `routes/api.php` 里进行添加. - 本项目的初衷是制作一个纯粹的扩展包,能安装即用,卸载即清. - 演示站点正在搭建中, 手册什么的也在计划编写,请关注本项目,以便了解项目的最新动态. 大家可以积极提交 ISSUE - 为方便大家交流,以及项目代码bug反馈,大家可以添加QQ群 : _195857398_ - [演示地址](http://112.124.44.7/backend/index/index) > 帐户 admin@admin.com 密码 123123 **简介** -------- - 基于 laravel 5.5 - 系统管理平台 - 商户管理平台 - RBAC 用户权限管理 - RESTful 接口 - 微信接口 安装步骤 -------- - 设置composer.json,找到config元素配置地方更改为如下 "config": { "preferred-install": "dist", "sort-packages": true, "optimize-autoloader": true },"minimum-stability": "dev", "repositories": { "packagist": { "type": "composer", "url": "https://packagist.phpcomposer.com" } } - 首先安装好laravel,并且设置好数据库连接 `composer require dominator88/laravel-smart:dev-master` - 运行下面命令来发布资源,以及安装数据库 `php artisan vendor:publish --provider="Smart\SmartServiceProvider"` `php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"` `php artisan make:auth` 配置 config/backend.php,这里可以设置初始化超级管理员帐户,也可使用默认默认(不作 修改),在后面会提到默认配置的帐户名密码 `php artisan smart:install` 为权限认证添加 模块,并设置为当前认证模型, 更改 confit/auth.php 文件 [ 'guard' => 'admin', 'passwords' => 'users', ], 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'admin' => [ 'driver' => 'session', 'provider' => 'admin', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], 'admin' => [ 'driver' => 'eloquent', 'model' => Smart\Models\SysUser::class, ], // 'users' => [ // 'driver' => 'database', // 'table' => 'users', // ], ], 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, ], ], ]; ### 图片上传设置 图片上传设置,需要运行如下命令,为图片的路径建立软链接,如果安装环境为docker,需要自行进入项目目录bash,将软链接设置正确 php artisan storage:link ### 如此便可以进行访问: >后台地址: http:// sitename /backend/index/index >帐户名: sys_admin >密码: 123123 >邮箱:admin@admin.com 从项目根目录进入 public 目录,执行命令: `npm update` 在此请注意 需要将 config/backend.php 里 baseUri 更改为当前域名 , 否则页面会出现样式错乱 不知道 npm 如何安装的可以在搜索引擎上查找。 创建模块 `php artisan smart:install 模块名` > 创建模块后,需要在 **.env** 文件中将模块加入到 *MODULE_EXT* 配置中,以逗号分隔 执行上面命令后,会在app目录下生成对应模块 ### 接口说明 -------- > 接口uri > > 接口密钥 > smart2_api_secret #### header | 名称 | 说明 | 描述 | | ------------------ |:----------------:| ----------------------------:| | device | 客户端系统类型 | Apple iphone 7 | | device-os-version | 客户端系统版本号 | 如: 10.0.2 | | timestamp | 时间戳 | 如: 1476340001 | | signature | 签名 | 如: 103ed1d081... 详见签名规则 | #### body 所有键和值全部为字符串 { key1 : val1 , key2 : val2, key2 : "[{k1 : v1} , { k2 : v2 }]" //用json字符串传输 数组 ... } #### 返回结果 - 单行数据 { code : 0 // 0 表示成功 , 403 表示需要登录 , 其余为其他错误 msg : "文字信息" , data : { key1 : val1, key2 : val2, ... } } - 多行数据 { code : 0 msg : "文字信息" , data : { rows : [ { key01 : val01, key02 : val02, ... }, { key11 : val11, key12 : val12, ... }, ... ] }, key : value } #### 签名规则 - 假设 要发送的数据 meta 为: var meta = { token : "103ed1d0811212312" , merId : "1", } 签名密钥为 : smart_api_secret - 将 timestamp 加入meta数据中 , 如 var signatureMeta = { token : "103ed1d0811212312" , merId : "1", timestamp : 1476340001 } - signatureMeta 按key的字符正序排列 ,并转为 key1=val1&key2=val2... 类型的字符串,如: var signatureString = merId=1×tamp=1476340001&token=103ed1d0811212312 - 在字符串后加上签名密钥 ,如: "&secret=签名密钥" var signatureString = merId=1×tamp=1476340001&token=103ed1d0811212312&secret=smart2_api_secret - md5 signatureString 得到签名 ================================================ FILE: composer.json ================================================ { "name": "dominator88/laravel-smart", "description": "后台管理系统.能快速度进行移动端开发.集成多个常见工具包.", "keywords": ["admin", "laravel", "grid", "api"], "homepage": "https://github.com/dominator88/laravel-smart", "license": "MIT", "authors": [{ "name": "mr.z", "email": "zsh2088@gmail.com" }], "type": "library", "require": { "php": ">=7.0.0", "laravel/framework": "5.5.*", "cebe/markdown": "^1.1", "jpush/jpush": "^3.5", "laravel/tinker": "~1.0", "guzzlehttp/guzzle": "^6.2@dev", "toplan/laravel-sms": "~2.6", "intervention/image": "^2.3@dev", "laravel/dusk": "^2.0@dev", "overtrue/easy-sms": "1.1.*", "prettus/l5-repository": "^2.6", "spatie/laravel-permission": "^2.36" }, "require-dev": { "phpunit/phpunit": "~6.0" }, "minimum-stability": "dev", "autoload": { "classmap": [ "tests/factories" ], "psr-4": { "Smart\\": "src/" }, "files": [ "Func.php" ] }, "autoload-dev": { "psr-4": { }, "classmap": [ "tests/TestCase.php" ] }, "extra": { "laravel": { "providers": [ "Smart\\SmartServiceProvider", "Intervention\\Image\\ImageServiceProvider" ], "aliases": { "Image": "Intervention\\Image\\Facades\\Image" } } } } ================================================ FILE: config/backend.php ================================================ '2.0', 'baseUri' => '/', /* |-------------------------------------------------------------------------- | Access via `https` |-------------------------------------------------------------------------- | | 后台是否使用https | */ 'https' => env('BACKEND_HTTPS',false), 'projectName' => 'laravel-smart', 'sessionName' => 'backend_session', 'directory' => ['Api' , 'backend' , 'mp' , 'Service' , 'Models'], 'superAdminId' => 1, 'defaultAdmin' => 'sys_admin', 'defaultPwd' => '123123', 'defaultEmail' => 'admin@admin.com', 'areaCachePrefix' => 'backend_area', 'secret' => 'laravel-smart-secret', 'timeGap' => 300, 'JPush' => [ 'appKey' => 'xxx' , 'secret' => 'xxx' , ] , 'image' => [ 'imgUri' => '', 'uploadType' => 'local', ], 'sms' => [ 'name' => 'alidayu', ], 'api' => [ 'apiVersion' => 'v1', ], //自定义扩展模块 默认模块为backend mp为自定义需要自行在app目录下创建mp文件夹 执行安装时自动生成目录及路由文件 'module_ext' => env('MODULE_EXT' , 'mp'), ]; ================================================ FILE: database/migrations/2014_10_12_000000_create_users_table.php ================================================ increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('users'); } } ================================================ FILE: database/migrations/2014_10_12_100000_create_password_resets_table.php ================================================ string('email')->index(); $table->string('token'); $table->timestamp('created_at')->nullable(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('password_resets'); } } ================================================ FILE: database/migrations/2017_10_20_100811_create_sys_api_log_table.php ================================================ increments('id'); $table->string('device')->nullable(); $table->string('device_os_version')->nullable(); $table->string('app_version')->nullable(); $table->string('api_version')->nullable(); $table->string('uri')->nullable(); $table->string('ip')->nullable(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_api_log'); } } ================================================ FILE: database/migrations/2017_10_20_100853_create_sys_func_table.php ================================================ increments('id'); $table->integer('pid')->default(0); $table->tinyInteger('sort')->default(1); $table->string('module',40); $table->tinyInteger('is_menu')->default(0); $table->tinyInteger('is_func')->default(0); $table->string('color')->nullable(); $table->string('name'); $table->string('icon')->nullable(); $table->string('uri')->nullable(); $table->string('desc')->nullable(); $table->tinyInteger('status')->default(1); $table->integer('level')->default(1); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_func'); } } ================================================ FILE: database/migrations/2017_10_20_100900_create_sys_func_privilege_table.php ================================================ increments('id'); $table->integer('func_id'); $table->enum('name' , ['read' , 'create' , 'update' , 'delete']); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_func_privilege'); } } ================================================ FILE: database/migrations/2017_10_20_100908_create_sys_mail_table.php ================================================ increments('id'); $table->enum('type' , ['captcha' , 'reset_pwd']); $table->string('name'); $table->string('address'); $table->string('subject'); $table->text('content'); $table->string('captcha' , 10); $table->tinyInteger('status' )->default(1); $table->dateTime('sent_at')->nullable(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_mail'); } } ================================================ FILE: database/migrations/2017_10_20_100917_create_sys_merchant_table.php ================================================ increments('id'); $table->integer('sort'); $table->string('name'); $table->string('icon')->nullable(); $table->string('phone' , 20); $table->string('contact',30)->nullable(); $table->string('email',200)->nullable(); $table->string('id_card')->nullable(); $table->tinyInteger('status')->default(1); $table->integer('area')->nullable(); $table->string('address',200)->nullable(); $table->decimal('settled_amount' , 10,2)->nullable(); $table->decimal('balance' , 10 ,2)->nullable(); $table->decimal('withdraw_amount' , 10,2)->nullable(); $table->integer('apply_user_id' )->nullable(); $table->tinyInteger('for_test')->default(0); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_merchant'); } } ================================================ FILE: database/migrations/2017_10_20_100923_create_sys_push_table.php ================================================ increments('id'); $table->integer('mer_id'); $table->enum('catalog' , ['alert' , 'order' , 'event']); $table->string('title'); $table->string('alert'); $table->enum('platform' , ['all' , 'ios' , 'android']); $table->string('alias'); $table->string('tags'); $table->string('registration_id', 40); $table->string('extras'); $table->tinyInteger('status'); $table->dateTime('sent_at'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_push'); } } ================================================ FILE: database/migrations/2017_10_20_100929_create_sys_role_table.php ================================================ increments('id'); $table->tinyInteger('sort')->default(0); $table->string('module' )->default('backend')->comment('模块'); $table->integer('mer_id')->default(0); $table->string('name'); $table->tinyInteger('status'); $table->string('desc')->nullable(); $table->tinyInteger('rank')->default(0); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_role'); } } ================================================ FILE: database/migrations/2017_10_20_100940_create_sys_role_permission_table.php ================================================ increments('id'); $table->integer('role_id'); $table->integer('privilege_id'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_role_permission'); } } ================================================ FILE: database/migrations/2017_10_20_100949_create_sys_sms_table.php ================================================ increments('id'); $table->enum('type' , ['captcha']); $table->string('phone'); $table->string('content'); $table->integer('temp_id'); $table->dateTime('sent_at')->nullable(); $table->dateTime('verified_at')->nullable(); $table->string('message_id' , 32)->nullable(); $table->tinyInteger('status' )->default(1); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_sms'); } } ================================================ FILE: database/migrations/2017_10_20_101005_create_sys_statistics_table.php ================================================ increments('id'); $table->integer('users_total' ); $table->integer('users_today' ); $table->integer('api' ); $table->integer('articles_total' ); $table->integer('articles_today' ); $table->integer('videos_total' ); $table->integer('videos_today' ); $table->date('created_at'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_statistics'); } } ================================================ FILE: database/migrations/2017_10_20_101023_create_sys_user_group_table.php ================================================ increments('id'); $table->integer('user_id'); $table->integer('group_id'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_user_group'); } } ================================================ FILE: database/migrations/2017_10_20_101030_create_sys_user_role_table.php ================================================ increments('id'); $table->integer('user_id'); $table->integer('role_id'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_user_role'); } } ================================================ FILE: database/migrations/2017_10_20_101753_create_sys_app_version_table.php ================================================ increments('id'); $table->enum('device' ,['ios' , 'android']); $table->string('version' ,30); $table->string('uri' , 200); $table->string('description' , 2000); $table->tinyInteger('is_force' ); $table->enum('environment' , ['production' , 'test' , 'debug']); $table->tinyInteger('status' ); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_app_version'); } } ================================================ FILE: database/migrations/2017_10_20_102342_create_sys_area_table.php ================================================ increments('id'); $table->integer('level'); $table->integer('pid' ); $table->string('text'); $table->string('tip'); $table->tinyInteger('status'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_area'); } } ================================================ FILE: database/migrations/2017_10_21_024032_create_mer_album_table.php ================================================ increments('id'); $table->integer('mer_id')->default(0); $table->integer('sort')->default(1); $table->string('uri',200)->nullable(); $table->integer('size')->default(0); $table->string('mimes', 50)->nullable(); $table->string('img_size', 200)->default(0); $table->string('desc')->nullable(); $table->tinyInteger('status')->default(1); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_album'); } } ================================================ FILE: database/migrations/2017_10_21_024040_create_mer_album_catalog_table.php ================================================ increments('id'); $table->integer('mer_id'); $table->integer('sort'); $table->string('tag' , 200); $table->string('icon' , 200); $table->integer('totals' ); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_album_catalog'); } } ================================================ FILE: database/migrations/2017_10_21_024048_create_mer_album_tag_table.php ================================================ increments('id'); $table->integer('catalog_id'); $table->integer('album_id'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_album_tag'); } } ================================================ FILE: database/migrations/2017_10_21_024128_create_mer_goods_catalog_table.php ================================================ increments('id'); $table->integer('mer_id')->default(0); $table->integer('pid')->default(0); $table->string('text')->nullable(); $table->string('icon')->nullable(); $table->string('desc')->nullable(); $table->tinyInteger('sort')->default(1); $table->tinyInteger('level')->default(1); $table->tinyInteger('status')->default(1); $table->enum('type' , ['goods' , 'virtual' , 'service'])->default('goods'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_goods_catalog'); } } ================================================ FILE: database/migrations/2017_10_21_024140_create_mer_sys_user_table.php ================================================ increments('id');*/ $table->integer('id'); $table->integer('mer_id'); $table->integer('sys_user_id'); $table->index('mer_id' ,'mer_id' ); $table->index('sys_user_id' , 'sys_user_id'); $table->primary(['id','mer_id', 'sys_user_id'] , 'id'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_sys_user'); } } ================================================ FILE: database/migrations/2017_10_25_071323_create_sys_user_table.php ================================================ increments('id'); $table->string('module')->default('backend'); $table->string('username'); $table->string('password'); $table->string('icon')->nullable(); $table->string('email')->nullable(); $table->string('phone')->nullable(); $table->tinyInteger('status')->default(1); $table->string('api_token', 64)->nullable(); $table->timestamps(); $table->dateTime('signed_at')->nullable(); $table->ipAddress('signed_ip')->nullable(); $table->rememberToken()->nullable(); $table->string('name')->nullable(); $table->unique('email')->nullable(); $table->unique('username')->nullable(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_user'); } } ================================================ FILE: database/migrations/2017_10_25_075251_create_mer_user_table.php ================================================ increments('id'); $table->integer('mer_id')->default(0); $table->integer('referee_id')->default(0); $table->tinyInteger('sex'); $table->string('username'); $table->string('nickname'); $table->string('password'); $table->string('icon')->nullable(); $table->string('email')->nullable(); $table->string('truename')->nullable(); $table->string('phone'); $table->decimal('bucks')->default(0); $table->integer('points')->default(0); $table->tinyInteger('status')->default(1); $table->string('industries')->nullable(); $table->enum('reg_from' , ['phone', 'qq', 'wx', 'wb', 'email', 'unknown']); $table->string('reg_ip')->nullable(); $table->dateTime('reg_at')->nullable(); $table->string('login_ip')->nullable(); $table->dateTime('login_at')->nullable(); $table->tinyInteger('for_test')->default(0); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_user'); } } ================================================ FILE: database/migrations/2017_11_17_034153_create_mer_user_device_table.php ================================================ increments('id'); $table->integer('user_id'); $table->string('token', 64)->nullable(); $table->enum('device' , ['iphone' , 'ipad' , 'android' , 'pc' , 'mac' , 'unknow'])->nullable(); $table->string('device_os_version' , 20)->nullable(); $table->string('app_version' , 20)->nullable(); $table->string('api_version' , 20)->nullable(); $table->string('registration_id' , 50)->nullable(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_user_device'); } } ================================================ FILE: database/migrations/2017_11_17_034153_create_sys_user_device_table.php ================================================ increments('id'); $table->integer('user_id'); $table->enum('device', ['iphone', 'ipad', 'android', 'pc', 'mac', 'unknow'])->nullable(); $table->string('device_os_version', 20)->nullable(); $table->string('app_version', 20)->nullable(); $table->string('api_version', 20)->nullable(); $table->string('registration_id', 50)->nullable(); $table->tinyInteger('for_test')->default(0)->comment('是否测试账户'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_user_device'); } } ================================================ FILE: database/migrations/2017_11_20_074023_create_mer_user_address_table.php ================================================ increments('uid'); $table->integer('user_id'); $table->string('name' , 200)->nullable(); $table->string('phone' , 20)->nullable(); $table->integer('area_id'); $table->string('address' , 500)->nullable(); $table->string('postcode' , 10)->nullable(); $table->tinyInteger('status' )->default(1); $table->tinyInteger('is_default' )->default(0); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_user_address'); } } ================================================ FILE: database/migrations/2017_11_21_070513_create_mer_goods_table.php ================================================ increments('id'); $table->integer('sys_goods_id')->nullable(); $table->integer('sys_goods_pid')->nullable(); $table->integer('mer_id')->nullable(); $table->integer('pid')->default(0); $table->integer('sort')->default(999); $table->string('sku' , 50)->nullable()->unique(); $table->string('name' , 200)->unique(); $table->integer('catalog_id')->default(0); $table->text('highlight' ,400)->nullable(); $table->string('icon' ,200)->nullable(); $table->string('desc' , 200)->nullable(); $table->string('tags' , 300)->nullable(); $table->dateTime('start_time')->nullable(); $table->dateTime('end_time')->nullable(); $table->enum('currency' , ['cny' , 'points'])->default('cny'); $table->decimal('price_market',8,2)->default('0.00'); $table->decimal('price',8,2)->default('0.00'); $table->integer('points')->default(0); $table->tinyInteger('status')->default(1); $table->string('meta_title' , 100)->nullable(); $table->string('meta_keywords' , 1000)->nullable(); $table->string('meta_description' , 1000)->nullable(); $table->tinyInteger('recommend' )->default(0); $table->tinyInteger('hot')->default(0); $table->tinyInteger('cheap')->default(0); $table->integer('sales')->default(0); $table->integer('comments')->default(0); $table->integer('pv')->default(0); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_goods'); } } ================================================ FILE: database/migrations/2017_11_21_075633_create_mer_user_comments_table.php ================================================ increments('id'); $table->integer('user_id')->nullable(); $table->enum('type' , ['article' , 'goods' , 'event'])->default('article'); $table->integer('type_id')->comment('对象ID')->default(0); $table->text('content')->comment('内容'); $table->text('reply')->comment('回复内容'); $table->dateTime('replied_at'); $table->tinyInteger('status')->default(1); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_user_comments'); } } ================================================ FILE: database/migrations/2017_11_22_023637_create_mer_order_table.php ================================================ increments('id'); $table->integer('user_id'); $table->integer('mer_id'); $table->enum('type' , ['goods' , 'virtual' , 'service'])->default('goods'); $table->string('order_no' , 16); $table->integer('address_id'); $table->string('address_name' , 200); $table->string('address_phone' , 20 ); $table->string('address' , 500); $table->string('address_post' , 6)->nullable(); $table->integer('event_id' )->nullable(); $table->integer('event_amount' )->default(0); $table->integer( 'coupon_id')->nullable(); $table->decimal('coupon_amount' , 8, 2)->default(0.00); $table->decimal('bucks' , 8, 2)->default(0.00); $table->enum('currency' , ['cny' , 'points'])->default('cny'); $table->decimal('amount' , 8,2)->default(0.00); $table->enum('pay_channel',['alipay' , 'wx' , 'points'])->default('alipay'); $table->decimal('pay_amount' , 11,2)->default(0.00); $table->tinyInteger('status' )->default(1); $table->integer('get_points' )->default(0); $table->integer('pay_id' )->nullable(); $table->string('user_mark' )->nullable(); $table->string('sys_mark' )->nullable(); $table->dateTime('pay_time'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_order'); } } ================================================ FILE: database/migrations/2017_11_22_031423_create_mer_articles_table.php ================================================ increments('id'); $table->integer('mer_id')->nullable(); $table->integer('catalog_id'); $table->integer('sort')->default(999); $table->string('title' , 200); $table->string('icon' , 200)->nullable(); $table->string('tags' , 200)->nullable(); $table->string('desc' , 200)->nullable(); $table->text('content')->nullable(); $table->tinyInteger('status')->default(1); $table->dateTime('start_at'); $table->dateTime('end_at'); $table->integer('comments')->default(0); $table->integer('likes')->default(0); $table->integer('pv')->default(0); $table->integer('favorites')->default(0); $table->integer('userId')->default(1); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_articles'); } } ================================================ FILE: database/migrations/2017_11_22_031451_create_mer_articles_catalog_table.php ================================================ increments('id'); $table->integer('pid')->default(0); $table->integer('mer_id'); $table->tinyInteger('sort')->default(99); $table->string('text' , 200); $table->string('icon' , 200)->nullable(); $table->string('desc' , 200)->nullable(); $table->tinyInteger('level' )->default(1); $table->tinyInteger('status' )->default(1); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_articles_catalog'); } } ================================================ FILE: database/migrations/2017_11_22_031539_create_mer_ad_table.php ================================================ increments('id'); $table->integer('mer_id')->nullable(); $table->string('name'); $table->tinyInteger('sort')->default(99); $table->integer('catalog_id')->unsigned(); $table->foreign('catalog_id')->references('id')->on('sys_merchant'); $table->string('icon')->default(''); $table->string('uri')->nullable(); $table->integer('pv')->default(0); $table->tinyInteger('status')->default(1); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_ad'); } } ================================================ FILE: database/migrations/2017_11_22_031555_create_mer_ad_catalog_table.php ================================================ increments('id'); $table->integer('mer_id')->nullable(); $table->string('text' , 200)->nullable(); $table->integer('width')->default(0); $table->integer('height')->default(0); $table->tinyInteger('status')->default(1); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_ad_catalog'); } } ================================================ FILE: database/migrations/2017_11_23_015844_create_mer_goods_profile_table.php ================================================ increments('id'); $table->integer('goods_id')->unsigned(); $table->string('package')->nullable(); $table->text('content')->nullable(); $table->foreign('goods_id')->references('id')->on('mer_goods'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_goods_profile'); } } ================================================ FILE: database/migrations/2017_11_23_024951_create_mer_goods_icon_table.php ================================================ increments('id'); $table->tinyInteger('sort')->default(99); $table->integer('goods_id')->unsigned(); $table->string('uri' , 200)->nullable(); $table->tinyInteger('is_cover')->default(0); $table->foreign('goods_id')->references('id')->on('mer_goods'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_goods_icon'); } } ================================================ FILE: database/migrations/2017_11_23_051615_create_mer_order_items_table.php ================================================ increments('id'); $table->integer('order_id'); $table->integer('goods_id'); $table->string('goods_name' , 200)->nullable(); $table->string('icon' , 200)->nullable(); $table->enum('currency' , ['cny' , 'points' , ])->nullable(); $table->decimal('amount' , 11,2)->default(0.00); $table->integer('qty'); $table->integer('event_id')->nullable(); $table->integer('event_amount')->default(0); $table->integer('coupon_id')->nullable(); $table->integer('coupon_amount')->default(0); $table->integer('get_points')->default(0); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('mer_order_items'); } } ================================================ FILE: database/migrations/2018_06_13_070749_create_sys_modules_table.php ================================================ increments('id'); $table->string('name')->comment('模块名称'); $table->string('symbol')->comment('标识'); $table->tinyInteger('displayorder')->default(0)->comment('排序序号'); $table->string('version')->default('1.0')->comment('版本号'); $table->string('author')->nullable()->comment('作者'); $table->tinyInteger('status')->default(1)->comment('状态'); $table->string('thumb')->nullable()->comment('缩略图'); $table->string('desc')->nullable()->comment('描述'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_modules'); } } ================================================ FILE: database/migrations/2018_06_23_095013_create_sys_settings_table.php ================================================ increments('id'); $table->string('key')->default('')->comment('名称'); $table->string('value')->default('')->comment('配置值'); $table->string('group')->default('default')->comment('配置分组'); $table->string('type')->default('text')->comment('配置类型 text radio'); $table->integer('desc')->default(99)->comment('排序'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('sys_settings'); } } ================================================ FILE: phpunit.xml.dist ================================================ ./packages/laravel-smart/tests ./app ================================================ FILE: resources/Api/Index.php ================================================ * Date: 2017/9/18 * Time: 21:07 */ namespace App\Api; use App\Api\Service\v1\ApiService; use Illuminate\Http\Request; class Index { public $api = NULL; public function __construct() { $this->api = ApiService::instance(); $this->api->debug = FALSE; } public function index(Request $request , $version , $directory , $action = 'index' ) { $header = [ 'timestamp' => $request->header( 'timestamp' ) , 'signature' => $request->header( 'signature' ) , 'device' => $request->header( 'device' ) , 'deviceOsVersion' => $request->header( 'device-os-version' ) , 'appVersion' => $request->header( 'app-version' ) , 'apiVersion' => $request->input('version') , ]; //取api $api = $this->api; $params = $request->all(); //取时间戳 $params['timestamp'] = $request->header( 'timestamp' ) ; $params = array_merge( $params , $header ); $result = $this->response( $version , $directory , $action , $params ); $api->log( '请求结束' ); return json( $result ); } /** * 响应辅助函数 * * @param $version * @param $directory * @param $action * @param $params * * @return array */ private function response( $version , $directory , $action , $params ) { $action = ucfirst( $action ); $version = strtolower( $version ); $class = '\\App\\Api\\Service\\' . $version . '\\' . $directory . '\\' . $action . 'Service'; $this->api->log( 'service file' , $class ); //检查是否存在响应文件 if ( ! class_exists( $class ) ) { return $this->api->getError( 404 ); } //初始化响应类 $instance = $class::instance( $params ); //检查请求方式 if ( ! $this->checkRequestMethod( $instance->allowRequestMethod ) ) { return $this->api->getError( 408 ); } return $instance->response(); } /** * 检查 请求方式是否允许 * * @param array $allowRequestMethod * * @return bool */ private function checkRequestMethod( $allowRequestMethod = [] ) { $requestMethod = strtolower( request()->method() ); if ( empty( $allowRequestMethod ) ) { return FALSE; } return isset( $allowRequestMethod[ $requestMethod ] ); } } ================================================ FILE: resources/Api/Service/ApiService.php ================================================ * Date: 2017/9/18 * Time: 21:13 */ namespace App\Api\Service\v1; use App\Service\SysTokenService; use Illuminate\Auth\AuthManager; use Illuminate\Support\Facades\Auth; use Smart\Interfaces\TokenService; use Smart\Service\AuthUcService; use Smart\Service\MerUserDeviceService; use Illuminate\Support\Facades\DB; define( 'PARAM_REQUIRED' , 'required' ); define( 'PARAM_DIGIT' , 'digit' ); define( 'PARAM_POSITIVE' , 'positive' ); class ApiService { use \Smart\Traits\Service\Instance; public $debug = TRUE; public $params = []; public $defaultParams = []; public $defaultResponse = []; public $userId = ''; public $behalf = ''; public $merId = ''; public $error = ''; public $errCode = 500; public $token = ''; //出错代码表 public $code = [ 0 => 'success' , //客户端问题 400 => 'param error' , 401 => 'not login' , 403 => 'please login' , 404 => 'operator not found' , 405 => 'error timestamp' , 406 => 'error signature' , 407 => 'unknown error' , 408 => 'no allow request method' , //服务端问题 500 => 'runtime error' , 503 => 'server not found' , 504 => 'data not found' , 505 => 'data exist' ]; public function params($params = []){ $this->params = $params; } public function getError( $code ) { return api_result( $this->code[ $code ] , $code ); } /** * 数据签名 * * @param $inputArr * * @return string */ public function signature( $inputArr ) { ksort( $inputArr ); $new_arr = []; foreach ( $inputArr as $key => $val ) { $val = htmlspecialchars_decode( $val ); if ( is_array( $val ) ) { $val = json_encode( $val , JSON_UNESCAPED_UNICODE ); } $new_arr[] = "$key=$val"; // echo "$key=$val
"; } $signature = implode( '&' , $new_arr ) . '&secret=' . config( 'backend.secret' ); $this->log( '签名:' , $inputArr ); return md5( $signature ); } /** * 校验签名 * * @param $metaData * @param $signature * * @return bool */ public function validSignature( $metaData , $signature ) { if ( empty( $signature ) ) { return FALSE; } if ( isset( $metaData['file_data'] ) ) { unset( $metaData['file_data'] ); } $newSignature = $this->signature( $metaData ); $this->log( 'server signature' , $newSignature ); return $signature == $newSignature; } /** * 验证时间戳 * * @param $timestamp * * @return bool */ public function validTimestamp( $timestamp ) { $this->log( 'server time' , time() ); $this->log( 'client time' , $timestamp ); $this->log( 'time_diff' , abs( time() - $timestamp ) ); if ( empty( $timestamp ) ) { return FALSE; } return abs( time() - $timestamp ) < config( 'backend.timeGap' ); } /** * 验证用户 * * @return mixed */ public function validToken( ) { // $this->token = resolve( TokenService::class ); $this->userId = ''; $this->error = 500; if ( ! isset( $this->params['api_token'] ) || empty( $this->params['api_token'] ) ) { //参数错误 $this->error = '请填写token'; return FALSE; } else { // $MemberData = $this->token->getByToken($this->params['token']); $MemberData = Auth::guard('api')->user(); // AuthManager:: if ( empty( $MemberData ) ) { //数据未找到 $this->error = '认证失败'; $this->errCode = 403; return FALSE; } $this->userId = $MemberData->id; return TRUE; } } /** * 验证单个参数 * * @param $paramName * @param string $rule * * @return bool */ // public function validParam( $paramName, $rule = PARAM_REQUIRED ) { // $this->error = ''; // $this->errCode = 500; // switch ( $rule ) { // case PARAM_REQUIRED : // if ( empty( trim( $this->requestParams[ $paramName ] ) ) ) { // $this->error = "$paramName 不能为空"; // // return FALSE; // } // } // // return TRUE; // } /** * 验证全部参数 * * @return bool */ public function validParams() { $method = strtolower( request()->method() ); foreach ( $this->defaultParams[ $method ] as $key => $defined ) { //如果是非必填参数 则赋值为 默认值,以避免程序错误 if ( ! isset( $defined[2] ) ) { //检查是否填写必填参数 if ( ! isset( $this->params[ $key ] ) ) { if ( isset( $defined[1] ) ) { $this->params[ $key ] = $defined[1]; } else { $this->error = "请填写 $key "; return FALSE; } } continue; } //如果未定义验证规则 继续下一个变量 if ( $defined[2] == 'file' ) { continue; } //检查是否填写必填参数 if ( ! isset( $this->params[ $key ] ) ) { if ( isset( $defined[1] ) ) { $this->params[ $key ] = $defined[1]; } else { $this->error = "请填写 $key "; return FALSE; } } $value = trim( $this->params[ $key ] ); $rule = $defined[2]; if ( is_array( $rule ) ) { if ( ! isset( $rule[ $value ] ) ) { $this->error = "请填写正确的 $key "; return FALSE; } } else { switch ( $rule ) { case PARAM_REQUIRED : //判断必填 if ( $value === '' && empty( $value ) ) { $this->error = "请填写 $key "; return FALSE; } if ( $key == 'merId' ) { $this->merId = $value; } break; case PARAM_DIGIT: //判断是数字 if ( ! is_numeric( $value ) ) { $this->error = " $key 不是是数字"; return FALSE; } break; case PARAM_POSITIVE : //判断是否是正数 if ( ! is_numeric( $value ) || $value <= 0 ) { $this->error = " $key 必须大于0"; return FALSE; } break; } } } return TRUE; } /** * 格式化数据 * * @param $data * @param $defaultResponse * * @return array */ public function formatData( $data , $defaultResponse = [] ) { if ( empty( $data ) ) { return []; } if ( empty( $defaultResponse ) ) { $method = strtolower( request()->method() ); $defaultResponse = $this->defaultResponse[ $method ]; } if ( empty( $defaultResponse ) ) { return $data; } $newData = []; if ( isset( $data[0] ) ) { foreach ( $data as $item ) { $newData[] = $this->formatDataForRow( $defaultResponse , $item ); } } else { $newData = $this->formatDataForRow( $defaultResponse , $data ); } return $newData; } /** * 格式化一行数据 * * @param $defaultResponse * @param $data * * @return array */ private function formatDataForRow( $defaultResponse , $data ) { $newData = []; foreach ( $defaultResponse as $key => $defined ) { if ( isset( $data[ $key ] ) && is_array( $data[ $key ] ) ) { foreach ( $data[ $key ] as $k => $row ) { $newData[ $key ][ $k ] = $this->formatDataForRow( $defined , $row ); } } else { if ( is_array( $defined ) && isset( $defined[1] ) && method_exists( $this , $defined[1] ) ) { $formatter = $defined[1]; $value = isset( $data[ $key ] ) ? $data[ $key ] : ''; $newData[ $key ] = $this->$formatter( $value , $data ); } else { $newData[ $key ] = isset( $data[ $key ] ) ? $data[ $key ] : ''; } } } return $newData; } //格式化 图标 public function formatIcon( $value , $row = [] ) { if ( filter_var( $value , FILTER_VALIDATE_URL , FILTER_FLAG_SCHEME_REQUIRED ) ) { return $value; } return full_img_uri( $value ); } //格式化 手机号 public function formatPhone( $value , $row = [] ) { return substr_replace( $value , '****' , 3 , 4 ); } /** * 记录日志 * * @param $key * @param $value */ public function log( $key , $value = '' ) {$this->debug = true; if ( ! $this->debug ) { return; } $filename = './logs/api_log_' . date( 'Y_m_d' ) . '.txt'; if(! is_dir('./logs')){ mkdir('./logs'); } if ( ! file_exists( $filename ) ) { file_put_contents( $filename , '' ); chmod( $filename , 0777 ); } $value = is_array( $value ) ? print_r( $value , TRUE ) : $value; $text = "----------" . date( 'Y-m-d H:i:s' ) . " 开始----------\r\n"; $text .= " $key = $value \r\n"; // $text .= "----------结束----------\r\n" ; file_put_contents( $filename , $text , FILE_APPEND ); } public function logStat( $param ) { $data = [ 'device' => $param['device'] , 'device_os_version' => $param['deviceOsVersion'] , 'app_version' => $param['appVersion'] , 'api_version' => $param['apiVersion'] , 'uri' => request()->url( TRUE ) , 'ip' => request()->ip( 0 , TRUE ) ]; DB::table( 'sys_api_log' )->insert( $data ); } protected function statistics($data){ $data_r['num'] = array_sum(array_column($data,'num')); $data_r['num1'] = array_sum(array_column($data,'num1')); $data_r['amount'] = array_sum(array_column($data,'pay_amount')); $data_r['payment'] = array_sum(array_column($data,'goods_amount')); return $data_r; } } ================================================ FILE: resources/Api/Service/v1/system/AreaService.php ================================================ * Date: 2017/9/18 * Time: 21:28 */ use App\Api\Service\v1\ApiService; use Smart\Service\SysAreaService; class AreaService extends ApiService { //允许的请求方式 public $allowRequestMethod = [ 'get' => 'GET - 取区域' , ]; /** * 传参 如: * 'title' => ['标题' , '默认值' , '验证方式'] //验证方式可选 * 'status' => ['状态' , 1 , ["0" => '禁用' , 1 => '启用'] ] */ public $defaultParams = [ 'get' => [ 'pid' => [ '上级ID' , '0' , PARAM_REQUIRED ] , ] , ]; /** * 返回结果示例 如: * * 'user_id' => '用户ID', * 'icon' => ['头像' , 'formatIcon'] , //第二个值为格式化方法 */ public $defaultResponse = [ 'get' => [ "id" => "区域ID" , "pid" => "上级ID" , "text" => "区域名称" , ] , ]; private static $instance; public static function instance( $params = [] ) { if ( self::$instance == NULL ) { self::$instance = new AreaService(); self::$instance->params = $params; } return self::$instance; } /** * 接口响应方法 * * @return array */ public function response() { if ( ! $this->validParams() ) { return api_result( $this->error , 500 ); } //处理业务 switch ( request()->method() ) { case 'GET' : $data = $this->get(); $data = $this->formatData( $data ); return api_result( '查询成功' , 0 , [ 'rows' => $data ] ); default : return api_result( '未知请求类型' , 500 ); } } /** * get 的响应方法 * * @return array|number */ public function get() { $cacheName = config( 'custom.areaCachePrefix' ) . $this->params['pid']; $data = cache( $cacheName ); if ( empty( $data ) ) { $SysArea = SysAreaService::instance(); $data = $SysArea->getByCond( [ 'pid' => $this->params['pid'] , 'status' => 1 , 'getAll' => TRUE ] ); cache( $cacheName , $data , 86400 ); } return $data; } } ================================================ FILE: resources/Api/Service/v1/test/LoginService.php ================================================ * @version 2.0 , 2017-11-14 */ use App\Api\Service\v1\ApiService; class LoginService extends ApiService { //允许的请求方式 public $allowRequestMethod = [ 'get' => 'GET - 取测试', 'post' => 'POST - 设置测试', 'put' => 'PUT - 设置测试', 'delete' => 'DELETE - 设置测试' ]; /** * 传参 如: * 'title' => ['标题' , '默认值' , '验证方式'] //验证方式可选 * 'status' => ['状态' , 1 , ["0" => '禁用' , 1 => '启用'] ] */ public $defaultParams = [ 'get' => [ // 'api_token' => [ 'token' , '0' , PARAM_REQUIRED ] , ], 'post' => [ ], 'put' => [ ], 'delete' => [ ] ]; /** * 返回结果示例 如: * * 'user_id' => '用户ID', * 'icon' => ['头像' , 'formatIcon'] , //第二个值为格式化方法 */ public $defaultResponse = [ 'get' => [], 'post' => [], 'put' => [], 'delete' => [] ]; private static $instance; public static function instance( $params = [] ) { if ( self::$instance == NULL ) { self::$instance = new LoginService(); self::$instance->params = $params ; } return self::$instance; } /** * 接口响应方法 * * @return array */ public function response() { //验证用户 if ( ! $this->validToken() ) { return api_result( $this->error, $this->errCode ); } if ( ! $this->validParams() ) { return api_result( $this->error, 500 ); } //处理业务 switch ( request()->method() ) { case 'GET' : $data = $this->get(); $data = $this->formatData( $data ); return api_result( '查询成功' , 0 , [ 'rows' => $data ] ); case 'POST' : return $this->post(); case 'PUT' : return $this->put(); case 'DELETE' : return $this->delete(); default : return api_result( '未知请求类型' , 500 ); } } /** * get 的响应方法 * * @return array|number */ public function get() { return [ ['id' => 1 , 'text' => '测试数据'] ]; } /** * post 的响应方法 * * @return array */ public function post() { $data = []; return api_result( 'post 成功', 0 , $data ); } /** * post 的响应方法 * * @return array */ public function put() { $data = []; return api_result( 'put 成功', 0 , $data ); } /** * post 的响应方法 * * @return array */ public function delete() { $data = []; return api_result( 'delete 成功', 0 , $data ); } } ================================================ FILE: resources/Api/routes.php ================================================ * Date: 2017/11/14 * Time: 16:12 */ //接口路由 Route::group(['prefix'=>'api/{version}','namespace'=>'App\Api' , 'middleware'=> ['api','auth.token','auth.cors']],function(){ Route::any('{direction}/{action}' , 'Index@index'); }); ================================================ FILE: resources/Models/MerAlbum.php ================================================ * @version 2.0 , 2017-09-30 */ use Illuminate\Database\Eloquent\Model; class MerAlbum extends Model { public $table = 'mer_album'; public $primaryKey = 'id'; public $timestamps = FALSE; use \Smart\Traits\Service\Scope; } ================================================ FILE: resources/Models/MerAlbumTag.php ================================================ * @version 2.0 , 2017-10-02 */ use Illuminate\Database\Eloquent\Model; class MerAlbumTag extends Model { public $table = 'mer_album_tag'; public $primaryKey = 'id'; public $timestamps = FALSE; use \Smart\Traits\Service\Scope; } ================================================ FILE: resources/Models/MerArticles.php ================================================ * @version 2.0 , 2017-09-30 */ use Illuminate\Database\Eloquent\Model; class MerArticles extends Model { public $table = 'mer_articles'; public $primaryKey = 'id'; public $timestamps = FALSE; use \Smart\Traits\Service\Scope; } ================================================ FILE: resources/Models/MerGoodsCatalog.php ================================================ * @version 2.0 , 2017-09-30 */ use Illuminate\Database\Eloquent\Model; class MerGoodsCatalog extends Model { public $table = 'mer_goods_catalog'; public $primaryKey = 'id'; public $timestamps = FALSE; use \Smart\Traits\Service\Scope; } ================================================ FILE: resources/Models/SysUser.php ================================================ belongsToMany('App\Models\SysMerchant', 'mer_sys_user', 'sys_user_id', 'mer_id'); } public function scopeKeyword($query, $param) { if ($param) { return $query->where(function ($query) use ($param) { $query->orWhere('username', 'like', "%{$param}%")->orWhere('phone', 'like', "%{$param}%"); }); } } public function username() { return 'name'; } } ================================================ FILE: resources/Models/User.php ================================================ * Date: 2017/9/30 * Time: 15:33 */ use Illuminate\Support\Facades\DB; use Smart\Interfaces\TokenService; use Smart\Service\BaseService; class MerTokenService extends BaseService implements TokenService{ public function getByToken($token){ $data = DB::table('sys_user as su') ->join('mer_sys_user as msu' , 'su.id' , '=' , 'msu.sys_user_id') ->join('mer_user as mu' , 'mu.id','=' , 'msu.id') ->where('su.token' , $token) ->first(); return $data; } } ================================================ FILE: resources/assets/static/.gitignore ================================================ ================================================ FILE: resources/assets/static/js/backend/Generate.js ================================================ /** * 自动生成代码 JS * * @author Zix * @version 2.0 , 2016-09-11 */ var Generate = { token : $('input[name=_token]').val(), config : { fileExists : null } , init : function () { //初始化ajax 提示框 loading.initAjax(); //初始化查询form this.initBtn(); $('#systemForm').reloadForm(Param.systemDefault); $('#systemComponentsForm').reloadForm(Param.systemComponentsDefault); $('#apiForm').reloadForm(Param.apiDefault); this.getSystemInfo(); $(".select2").select2({ tags : true , tokenSeparators : [',' , ' '] }); } , //初始化各种按钮 initBtn : function () { var self = this; $('input[name="module"]').change(function () { self.getSystemInfo(); }); $('select[name="tableName"]').change(function () { self.getSystemInfo(); }); $('#getSystemInfoBtn').on('click' , function (e) { e.preventDefault(); self.getSystemInfo(); }); //创建系统页面 $('.createSystemBtn').on('click' , function (e) { e.preventDefault(); var $thisBtn = $(this); var temp = $(this).data('temp'); var systemData = $('#systemForm').serializeObject(); var componentsData = $('#systemComponentsForm').serializeObject(); var data = { temp : temp , module : systemData.module , tableName : systemData.tableName , components : componentsData , _token : self.token }; $.post(Param.uri.createSystem , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code == 401 ) { //需要登录 tips.error('请先登录'); } else if ( res.code != 0 ) { tips.error(res.msg); } else { tips.success(res.msg); if ( data.temp == 'all' ) { for( var key in self.config.fileExists ) { if ( !self.config.fileExists.hasOwnProperty( key ) ) { continue; } self.config.fileExists[key] = true ; } $('.createSystemBtn').prop('disabled' , true); $('.deleteSystemBtn').prop('disabled' , false); } else { $('.deleteSystemBtn[data-temp="' + temp + '"]').prop('disabled' , false); self.config.fileExists[data.temp] = true ; $thisBtn.prop('disabled' , true); } } }); }); //创建接口 $('#createApiBtn').on('click' , function (e) { e.preventDefault(); var data = $('#apiForm').serializeObject(); data._token = self.token; if ( empty(data.desc) ) { tips.error('描述不能为空'); } if ( empty(data.directory) ) { tips.error('目录不能为空'); } if ( empty(data.name) ) { tips.error('名称不能为空'); } $.post(Param.uri.createApi , data) .fail(function (res) { }) .done(function (res) { if ( res.code == 0 ) { tips.success(res.msg); } else { tips.error(res.msg); } }); }); $('.deleteSystemBtn').on('click' , function (e) { e.preventDefault(); var $thisBtn = $(this); var temp = $(this).data('temp'); if ( ! self.config.fileExists[temp] ) { tips.error(temp + '文件不存在'); return false ; } var data = $('#systemForm').serializeObject(); data['temp'] = temp; sure.init('确认删除' + temp + '文件吗?' , function () { $.get(Param.uri.destroySystemFile , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code != 0 ) { tips.error(res.msg); } else { $('.createSystemBtn[data-temp="' + temp + '"]').prop('disabled' , false); $thisBtn.prop('disabled' , true); self.config.fileExists[temp] = false; $('.createSystemBtn[data-temp="all"]').prop('disabled' , false); tips.success(res.msg); } }); }); }); } , getSystemInfo : function () { var self = this; var $form = $('#systemForm'); var data = $form.serializeObject(); data['type'] = $("#type_tabs").find("li.active > a").data('type'); $.get(Param.uri.getSystemInfo , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code == 401 ) { //需要登录 tips.error('请先登录'); } else if ( res.code != 0 ) { tips.error(res.msg); } else { tips.success(res.msg); var allFileExists = true; self.config.fileExists = res.data.fileExists; $.each( res.data.fileExists , function (key , val) { $('.createSystemBtn[data-temp="' + key + '"]').prop('disabled' , val); $('.deleteSystemBtn[data-temp="' + key + '"]').prop('disabled' , ! val); if ( allFileExists && ! val ) { allFileExists = false; } }); $('.createSystemBtn[data-temp="all"]').prop('disabled' , allFileExists); self.setSelect(res.data); } }); } , setSelect : function (data) { var html = []; html.push(''); for ( var i = 0 ; i < data.fieldInfo.length ; i ++ ) { var field = data.fieldInfo[i]['fieldName']; var common = data.fieldInfo[i]['fieldComment']; html.push(''); } $('select[name="upload"]').html(html.join('')).val(data.components.upload).trigger('change'); $('select[name="editor"]').html(html.join('')).val(data.components.editor).trigger('change'); $('select[name="select2"]').html(html.join('')); } }; ================================================ FILE: resources/assets/static/js/backend/Index.js ================================================ var Index = { init : function(){ // 指定图表的配置项和数据 var usersOption = { tooltip : { trigger : 'axis' } , legend : { data : ['用户注册'] } , grid : { left : '3%' , right : '4%' , bottom : '3%' , containLabel : true } , xAxis : [ { type : 'category' , boundaryGap : true , data : Param.charts.users.period } ] , yAxis : [ { type : 'value' } ] , series : [ { name : '注册人数' , type : 'line' , data : Param.charts.users.data } ] }; var apiOption = { color: ['#3398DB'], tooltip : { trigger: 'axis', axisPointer : { // 坐标轴指示器,坐标轴触发有效 type : 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, grid : { left : '3%' , right : '4%' , bottom : '3%' , containLabel : true } , xAxis : [ { type : 'category' , data : Param.charts.api.period, axisTick: { alignWithLabel: true } } ] , yAxis : [ { type : 'value' } ] , series : [ { name : '访问量' , type : 'bar' , barWidth: '60%', label: { normal: { show: true, position: 'top' } }, data : Param.charts.api.data } ] }; var userChart = echarts.init(document.getElementById('userChart')); userChart.setOption(usersOption); var apiChart = echarts.init(document.getElementById('apiChart')); apiChart.setOption(apiOption); } }; ================================================ FILE: resources/assets/static/js/backend/MerAd.js ================================================ /** * MerAd JS * * @author MR.Z * @version 2.0 , 2016-09-14 */ var MerAd = { init : function () { //重新设置菜单 if ( !empty( Param.uri.menu ) ) { Layout.setSidebarMenuActiveLink('set' , 'a[data-uri="'+ Param.uri.menu +'"]'); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); } , //初始化查询form initSearchForm : function () { var $searchForm = $('#searchForm'); $searchForm.reloadForm(Param.query); //查询按钮 $('#searchBtn').on('click' , function (e) { e.preventDefault(); var $dataGrid = $('#dataGrid'); var param = $dataGrid.TableGrid('getParam'); param = $.extend({} , param , $('#searchForm').serializeObject() ); param.page = 1; $dataGrid.TableGrid('setParam' , param); $dataGrid.TableGrid('reload'); }); } , //显示 portlet setPortletShow : function ( type ) { var $tablePortlet = $('#tablePortlet') ; var $addEditPortlet = $('#addEditPortlet'); $tablePortlet.slideUp('fast'); if ( type == 'add' ) { if ( !$addEditPortlet.hasClass('blue') ) { $addEditPortlet.removeClass('green-meadow').addClass('blue'); } $addEditPortlet.find('.caption-subject').html('新建' + Param.pageTitle ); } else if ( type == 'edit' ) { if ( !$addEditPortlet.hasClass('green-meadow') ) { $addEditPortlet.removeClass('blue').addClass('green-meadow'); } $addEditPortlet.find('.caption-subject').html('编辑' + Param.pageTitle ); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); }, //关闭 portlet setPortletHide : function () { $('#tablePortlet').slideDown('fast') ; $('#addEditPortlet').slideUp('fast'); }, //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $('#addNewBtn').on('click' , function (e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm( Param.defaultRow ); setImgPreview.clear('icon'); setImgPreview.clear('icon'); $form.attr('action' , Param.uri.insert ); }); //编辑按钮 $(document).on('click' , '.editBtn' , function (e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#dataGrid').TableGrid('getRow' , id); var $form = $('#addEditForm'); $form.reloadForm( row ); setImgPreview.set('icon' , row.icon); setImgPreview.set('icon' , row.icon); setImgPreview.set('icon' , row.icon); $form.attr('action' , Param.uri.update + row.id ); }); //删除一行 $(document).on('click' , '.destroyBtn' , function (e) { e.preventDefault(); var id = $(this).data('id'); self.delData( id ); }); $('#destroySelectBtn').on('click' , function (e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if ( empty( ids ) ) { tips.error('请选择要删除的记录'); return ; } self.delData( ids ); }); //提交添加编辑窗 $('#submitFormBtn').on('click' , function (e) { e.preventDefault(); var $form = $('#addEditForm'); if( $form.validForm() ) { var data = $form.serializeObject(); $.post( $form.attr('action') , data ) .fail( function(res){ tips.error( res.responseText ); }) .done( function( res ){ if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if( res.code != 0 ){ tips.error( res.msg ); } else { tips.success( res.msg ); $('#dataGrid').TableGrid('reload'); self.setPortletHide(); } }); } }); //关闭添加编辑窗 $('#closePortletBtn').on('click' , function (e) { e.preventDefault(); self.setPortletHide(); }); //上传按钮 $('#iconUploadBtn').Uploader({ uri : Param.uri.upload , //上传文件 param : Param.uploadParam , album : true , albumUri : Param.uri.album , albumCatalogUri : Param.uri.albumCatalog , albumParam : Param.albumParam , onSuccess : function ( ret ) { tips.success(ret.msg); if ( ret.code == 0 ) { setImgPreview.set('icon' , ret.data.savePath); } }, onChooseAlbum : function( uri ){ setImgPreview.set('icon' , uri ); } }); } , delData : function ( ids ) { var self = this ; var data = { ids : ids }; sure.init('是否删除?' , function () { $.post( Param.uri.destroy , data ) .fail( function(res){ tips.error( res.responseText ); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if( res.code != 0 ){ tips.error( res.msg ); } else { tips.success( res.msg ); $('#dataGrid').TableGrid('reload'); } }); }); }, //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query , '' , uri); $('#dataGrid').TableGrid({ uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function (row) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function ( rows , settings ) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if ( oldUri == uri) { return false ; } var params = $.getUrlParams(window.location.href); history.pushState(params , '' , oldUri); history.replaceState(settings.param , '' , uri); } }); } }; //pop state 事件 window.onpopstate = function (event) { if ( event && event.state ) { $('#searchForm').reloadForm( event.state ); var $dataGrid = $('#dataGrid'); $dataGrid.TableGrid('setParam' , event.state); $dataGrid.TableGrid('reload'); } }; ================================================ FILE: resources/assets/static/js/backend/MerEvent.js ================================================ /** * MerEvent JS * * @author MR.Z * @version 2.0 , 2017-07-17 */ var MerEvent = { config : {} , init : function () { //重新设置菜单 if ( !empty( Param.uri.menu ) ) { Layout.setSidebarMenuActiveLink('set' , 'a[data-uri="'+ Param.uri.menu +'"]'); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); KE_OPTIONS.uploadJson = Param.uri.uploadKE ; this.config['content'] = KindEditor.create('textarea[name="content"]' , KE_OPTIONS ); } , //初始化查询form initSearchForm : function () { var $searchForm = $('#searchForm'); $searchForm.reloadForm(Param.query); //查询按钮 $('#searchBtn').on('click' , function (e) { e.preventDefault(); var $dataGrid = $('#dataGrid'); var param = $dataGrid.TableGrid('getParam'); param = $.extend({} , param , $('#searchForm').serializeObject() ); param.page = 1; $dataGrid.TableGrid('setParam' , param); $dataGrid.TableGrid('reload'); }); } , //显示 portlet setPortletShow : function ( type ) { var $tablePortlet = $('#tablePortlet') ; var $addEditPortlet = $('#addEditPortlet'); $tablePortlet.slideUp('fast'); if ( type == 'add' ) { if ( !$addEditPortlet.hasClass('blue') ) { $addEditPortlet.removeClass('green-meadow').addClass('blue'); } $addEditPortlet.find('.caption-subject').html('新增 ' + Param.pageTitle ); } else if ( type == 'edit' ) { if ( !$addEditPortlet.hasClass('green-meadow') ) { $addEditPortlet.removeClass('blue').addClass('green-meadow'); } $addEditPortlet.find('.caption-subject').html('编辑 ' + Param.pageTitle ); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); }, //关闭 portlet setPortletHide : function () { $('#tablePortlet').slideDown('fast') ; $('#addEditPortlet').slideUp('fast'); }, //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $('#addNewBtn').on('click' , function (e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm( Param.defaultRow ); setImgPreview.clear('icon'); setImgPreview.clear('icon'); self.config['content'].html(''); $form.attr('action' , Param.uri.insert ); }); //编辑按钮 $(document).on('click' , '.editBtn' , function (e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#dataGrid').TableGrid('getRow' , id); var $form = $('#addEditForm'); $form.reloadForm( row ); setImgPreview.set('icon' , row.icon); setImgPreview.set('icon' , row.icon); setImgPreview.set('icon' , row.icon); self.config['content'].html( row.content ); $form.attr('action' , Param.uri.update + row.id ); }); //删除一行 $(document).on('click' , '.destroyBtn' , function (e) { e.preventDefault(); var id = $(this).data('id'); self.delData( id ); }); $('#destroySelectBtn').on('click' , function (e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if ( empty( ids ) ) { tips.error('请选择要删除的记录'); return ; } self.delData( ids ); }); //提交添加编辑窗 $('#submitFormBtn').on('click' , function (e) { e.preventDefault(); var $form = $('#addEditForm'); if( $form.validForm() ) { var data = $form.serializeObject(); $.post( $form.attr('action') , data ) .fail( function(res){ tips.error( res.responseText ); }) .done( function( res ){ if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if( res.code != 0 ){ tips.error( res.msg ); } else { tips.success( res.msg ); $('#dataGrid').TableGrid('reload'); self.setPortletHide(); } }); } }); //关闭添加编辑窗 $('#closePortletBtn').on('click' , function (e) { e.preventDefault(); self.setPortletHide(); }); //上传按钮 $('#iconUploadBtn').Uploader({ uri : Param.uri.upload , //上传文件 param : Param.uploadParam , album : true , albumUri : Param.uri.album , albumCatalogUri : Param.uri.albumCatalog , albumParam : Param.albumParam , onSuccess : function ( ret ) { tips.success(ret.msg); if ( ret.code == 0 ) { setImgPreview.set('icon' , ret.data.savePath); } }, onChooseAlbum : function( uri ){ setImgPreview.set('icon' , uri ); } }); } , delData : function ( ids ) { var self = this ; var data = { ids : ids }; sure.init('是否删除?' , function () { $.post( Param.uri.destroy , data ) .fail( function(res){ tips.error( res.responseText ); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if( res.code != 0 ){ tips.error( res.msg ); } else { tips.success( res.msg ); $('#dataGrid').TableGrid('reload'); } }); }); }, //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query , '' , uri); $('#dataGrid').TableGrid({ uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function (row) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function ( rows , settings ) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if ( oldUri == uri) { return false ; } var params = $.getUrlParams(window.location.href); history.pushState(params , '' , oldUri); history.replaceState(settings.param , '' , uri); } }); } }; //pop state 事件 window.onpopstate = function (event) { if ( event && event.state ) { $('#searchForm').reloadForm( event.state ); var $dataGrid = $('#dataGrid'); $dataGrid.TableGrid('setParam' , event.state); $dataGrid.TableGrid('reload'); } }; ================================================ FILE: resources/assets/static/js/backend/MerFunc.js ================================================ /** * MerFunc JS * * @author MR.Z * @version 2.0 , 2016-09-12 */ var MerFunc = { token: $('input[name=_token]').val(), init: function() { //重新设置菜单 if (!empty(Param.uri.menu)) { Layout.setSidebarMenuActiveLink('set', 'a[data-uri="' + Param.uri.menu + '"]'); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); }, //初始化查询form initSearchForm: function() { var $searchForm = $('#searchForm'); $searchForm.reloadForm(Param.query); //查询按钮 $('#searchBtn').on('click', function(e) { e.preventDefault(); var $treeGrid = $('#treeGrid'); var param = $treeGrid.TreeGrid('getParam'); param = $.extend({}, param, $('#searchForm').serializeObject()); param.page = 1; $treeGrid.TreeGrid('setParam', param); $treeGrid.TreeGrid('reload'); Param.defaultRow.module = param.module }); }, //显示 modal setPortletShow: function(type) { var $addEditModal = $('#addEditModal'); $addEditModal.modal('show'); if (type == 'add') { $addEditModal.find('.caption-subject').html('新建' + Param.pageTitle); } else if (type == 'edit') { $addEditModal.find('.caption-subject').html('编辑' + Param.pageTitle); } }, //关闭 modal setPortletHide: function() { $('#addEditModal').modal('hide'); }, //初始化各种按钮 initBtn: function() { var self = this; //打开添加框 $('#addNewBtn').on('click', function(e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm(Param.defaultRow); $form.attr('action', Param.uri.insert); }); //编辑按钮 $(document).on('click', '.editBtn', function(e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#treeGrid').TreeGrid('getRow', id); var $form = $('#addEditForm'); $form.reloadForm(row); $form.attr('action', Param.uri.update + '/' + row.id); }); //删除一行 $(document).on('click', '.destroyBtn', function(e) { e.preventDefault(); var id = $(this).data('id'); self.delData(id); }); $('#destroySelectBtn').on('click', function(e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if (empty(ids)) { tips.error('请选择要删除的记录'); return; } self.delData(ids); }); //提交添加编辑窗 $('#submitFormBtn').on('click', function(e) { e.preventDefault(); var $form = $('#addEditForm'); if ($form.validForm()) { var data = $form.serializeObject(); data._token = self.token; $.post($form.attr('action'), data) .fail(function(res) { tips.error(res.responseText); }) .done(function(res) { if (res.code == 1001) { //需要登录 tips.error('请先登录'); } else if (res.code != 0) { tips.error(res.msg); } else { tips.success(res.msg); $('#treeGrid').TreeGrid('reload'); self.setPortletHide(); } }); } }); //关闭添加编辑窗 $('#closePortletBtn').on('click', function(e) { e.preventDefault(); self.setPortletHide(); }); //打开权限窗口 $(document).on('click', '.privilegeBtn', function(e) { e.preventDefault(); var id = $(this).data('id'); var data = $('#treeGrid').TreeGrid('getRow', id); var privilege = data.privilege; var $form = $('#privilegeForm'); $form[0].reset(); if (!empty(privilege)) { $.each(privilege, function(index, item) { $form.find('input[value="' + item.name + '"]').prop('checked', true); }); } $form.attr('action', Param.uri.updatePrivilege + '/' + id); $('#privilegeModal').modal('show'); }); //更新权限 $('#submitPrivilegeFormBtn').on('click', function(e) { e.preventDefault(); var $form = $('#privilegeForm'); var uri = $form.attr('action'); var data = $form.serializeObject(); $.post(uri, data) .fail(function(res) { tips.error(res.responseText); }) .done(function(res) { if (res.code == 403) { //需要登录 tips.error('请先登录'); } else if (res.code != 0) { tips.error(res.msg); } else { tips.success(res.msg); $('#treeGrid').TreeGrid('reload'); $('#privilegeModal').modal('hide'); } }); }) }, delData: function(ids) { var data = { ids: ids, _token: this.token }; sure.init('是否删除?', function() { $.post(Param.uri.destroy, data) .fail(function(res) { tips.error(res.responseText); }) .done(function(res) { if (res.code == 1001) { //需要登录 tips.error('请先登录'); } else if (res.code != 0) { tips.error(res.msg); } else { tips.success(res.msg); $('#treeGrid').TreeGrid('reload'); } }); }); }, //初始化tree grid initGrid: function() { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query, '', uri); $('#treeGrid').TreeGrid({ uri: Param.uri.read, field: 'name', //显示箭头的字段 param: Param.query, //查询参数 expandAll: true, rowStyle: function(row) { if (row.status == 0) { return 'warning'; } }, loadSuccess: function(rows, settings) { var options = ''; options += form_options_rows(rows, settings); $('select[name="pid"]').html(options); var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if (oldUri == uri) { return false; } var params = $.getUrlParams(window.location.href); history.pushState(params, '', oldUri); history.replaceState(settings.param, '', uri); } }); } }; //pop state 事件 window.onpopstate = function(event) { if (event && event.state) { $('#searchForm').reloadForm(event.state); var $treeGrid = $('#treeGrid'); $treeGrid.TreeGrid('setParam', event.state); $treeGrid.TreeGrid('reload'); } }; var formatName = function(value, row) { var html = value; if (!empty(row.icon)) { html = ' ' + html; } return html; }; var formatIsFunc = function(value) { return Param.isFunc[value]; }; var formatIsMenu = function(value) { return Param.isMenu[value]; }; var optPrivilege = function(value, row) { return ' 权限'; }; ================================================ FILE: resources/assets/static/js/backend/MerGoodsCatalog.js ================================================ /** * MerGoodsCatalog JS * * @author MR.Z * @version 2.0 , 2016-10-11 */ var MerGoodsCatalog = { token : $('input[name=_token]').val(), config : {} , init : function () { //重新设置菜单 if ( !empty( Param.uri.menu ) ) { Layout.setSidebarMenuActiveLink('set' , 'a[data-uri="'+ Param.uri.menu +'"]'); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); } , //初始化查询form initSearchForm : function () { var $searchForm = $('#searchForm'); $searchForm.reloadForm(Param.query); //查询按钮 $('#searchBtn').on('click' , function (e) { e.preventDefault(); var $treeGrid = $('#treeGrid'); var param = $treeGrid.TreeGrid('getParam'); param = $.extend({} , param , $('#searchForm').serializeObject() ); param.page = 1; $treeGrid.TreeGrid('setParam' , param); $treeGrid.TreeGrid('reload'); }); } , //显示 portlet setPortletShow : function ( type ) { var $tablePortlet = $('#tablePortlet') ; var $addEditPortlet = $('#addEditPortlet'); $tablePortlet.slideUp('fast'); if ( type == 'add' ) { if ( !$addEditPortlet.hasClass('blue') ) { $addEditPortlet.removeClass('green-meadow').addClass('blue'); } $addEditPortlet.find('.caption-subject').html('新增 ' + Param.pageTitle ); } else if ( type == 'edit' ) { if ( !$addEditPortlet.hasClass('green-meadow') ) { $addEditPortlet.removeClass('blue').addClass('green-meadow'); } $addEditPortlet.find('.caption-subject').html('编辑 ' + Param.pageTitle ); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); }, //关闭 portlet setPortletHide : function () { $('#tablePortlet').slideDown('fast') ; $('#addEditPortlet').slideUp('fast'); }, //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $('#addNewBtn').on('click' , function (e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm( Param.defaultRow ); setImgPreview.clear('icon'); setImgPreview.clear('icon'); $form.attr('action' , Param.uri.insert ); }); //编辑按钮 $(document).on('click' , '.editBtn' , function (e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#treeGrid').TreeGrid('getRow' , id); var $form = $('#addEditForm'); $form.reloadForm( row ); setImgPreview.set('icon' , row.icon); setImgPreview.set('icon' , row.icon); setImgPreview.set('icon' , row.icon); $form.attr('action' , Param.uri.update+'/' + row.id ); }); //删除一行 $(document).on('click' , '.destroyBtn' , function (e) { e.preventDefault(); var id = $(this).data('id'); self.delData( id ); }); $('#destroySelectBtn').on('click' , function (e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if ( empty( ids ) ) { tips.error('请选择要删除的记录'); return ; } self.delData( ids ); }); //提交添加编辑窗 $('#submitFormBtn').on('click' , function (e) { e.preventDefault(); var $form = $('#addEditForm'); if( $form.validForm() ) { var data = $form.serializeObject(); data._token = self.token; $.post( $form.attr('action') , data ) .fail( function(res){ tips.error( res.responseText ); }) .done( function( res ){ if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if( res.code != 0 ){ tips.error( res.msg ); } else { tips.success( res.msg ); $('#treeGrid').TreeGrid('reload'); self.setPortletHide(); } }); } }); //关闭添加编辑窗 $('#closePortletBtn').on('click' , function (e) { e.preventDefault(); self.setPortletHide(); }); //上传按钮 $('#iconUploadBtn').Uploader({ uri : Param.uri.upload , //上传文件 param : Param.uploadParam , album : true , albumUri : Param.uri.album , albumCatalogUri : Param.uri.albumCatalog , albumParam : Param.albumParam , onSuccess : function ( ret ) { tips.success(ret.msg); if ( ret.code == 0 ) { setImgPreview.set('icon' , ret.data.savePath); } }, onChooseAlbum : function( uri ){ setImgPreview.set('icon' , uri ); } }); } , delData : function ( ids ) { var self = this ; var data = { ids : ids, _token : self.token }; sure.init('是否删除?' , function () { $.post( Param.uri.destroy , data ) .fail( function(res){ tips.error( res.responseText ); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if( res.code != 0 ){ tips.error( res.msg ); } else { tips.success( res.msg ); $('#treeGrid').TreeGrid('reload'); } }); }); }, //初始化tree grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query , '' , uri); $('#treeGrid').TreeGrid({ uri : Param.uri.read , field : 'text', //显示箭头的字段 param : Param.query , //查询参数 rowStyle : function (row) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function ( rows , settings ) { var options = ''; options += form_options_rows( rows , settings ); $('select[name="pid"]').html(options); var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if ( oldUri == uri) { return false ; } var params = $.getUrlParams(window.location.href); history.pushState(params , '' , oldUri); history.replaceState(settings.param , '' , uri); } }); } }; //pop state 事件 window.onpopstate = function (event) { if ( event && event.state ) { $('#searchForm').reloadForm( event.state ); var $treeGrid = $('#treeGrid'); $treeGrid.TreeGrid('setParam' , event.state); $treeGrid.TreeGrid('reload'); } }; ================================================ FILE: resources/assets/static/js/backend/MerRole.js ================================================ /** * MerRole JS * * @author MR.Z * @version 2.0 , 2016-09-12 */ var MerRole = { token: $('input[name=_token]').val(), config: {}, init: function() { //重新设置菜单 if (!empty(Param.uri.menu)) { Layout.setSidebarMenuActiveLink('set', 'a[data-uri="' + Param.uri.menu + '"]'); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); }, //初始化查询form initSearchForm: function() { var $searchForm = $('#searchForm'); $searchForm.reloadForm(Param.query); //查询按钮 $('#searchBtn').on('click', function(e) { e.preventDefault(); var $dataGrid = $('#dataGrid'); var param = $dataGrid.TableGrid('getParam'); param = $.extend({}, param, $('#searchForm').serializeObject()); param.page = 1; $dataGrid.TableGrid('setParam', param); $dataGrid.TableGrid('reload'); Param.defaultRow.module = param.module }); }, //显示 modal setPortletShow: function(type) { var $addEditModal = $('#addEditModal'); $addEditModal.modal('show'); if (type == 'add') { $addEditModal.find('.caption-subject').html('新增 ' + Param.pageTitle); } else if (type == 'edit') { $addEditModal.find('.caption-subject').html('编辑 ' + Param.pageTitle); } }, //关闭 modal setPortletHide: function() { $('#addEditModal').modal('hide'); }, //初始化各种按钮 initBtn: function() { var self = this; //打开添加框 $('#addNewBtn').on('click', function(e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm(Param.defaultRow); $form.attr('action', Param.uri.insert); }); //编辑按钮 $(document).on('click', '.editBtn', function(e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#dataGrid').TableGrid('getRow', id); var $form = $('#addEditForm'); $form.reloadForm(row); $form.attr('action', Param.uri.update + '/' + row.id); }); //删除一行 $(document).on('click', '.destroyBtn', function(e) { e.preventDefault(); var id = $(this).data('id'); self.delData(id); }); $('#destroySelectBtn').on('click', function(e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if (empty(ids)) { tips.error('请选择要删除的记录'); return; } self.delData(ids); }); //提交添加编辑窗 $('#submitFormBtn').on('click', function(e) { e.preventDefault(); var $form = $('#addEditForm'); if ($form.validForm()) { var data = $form.serializeObject(); $.post($form.attr('action'), data) .fail(function(res) { tips.error(res.responseText); }) .done(function(res) { if (res.code == 403) { //需要登录 tips.error('请先登录'); } else if (res.code != 0) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); self.setPortletHide(); } }); } }); //打开权限窗口 $(document).on('click', '.permissionBtn', function(e) { e.preventDefault(); $('#permissionBody').empty(); var id = $(this).data('id'); var roleData = $('#dataGrid').TableGrid('getRow', id); self.config.roleId = id; var url = Param.uri.getPermission; var data = { roleId: id, _token: self.token }; $.post(url, data, function(res) { $('#permissionLabel').html('[' + roleData.name + ']的权限'); $('#permissionModal').modal('show'); $('#permissionBody').html(res); var url = Param.uri.getPrivilegeData; $.post(url, data, function(res) { self.initPermission(res); }); }); }); //关闭添加编辑窗 $('#closePortletBtn').on('click', function(e) { e.preventDefault(); self.setPortletHide(); }); //功能权限全选或取消 $(document).on('click', '.func', function(e) { e.preventDefault(); var this_node = $(this).parent('.func-node'); var opt = this_node.find('.func-opt'); var opt_i = this_node.find('.func-opt > i'); if ($(this).hasClass('disabled') || $(this).hasClass('notall')) { //全选 $(this).removeClass('active notall disabled').addClass('active'); opt.removeClass('active notall disabled').addClass('active'); opt_i.removeClass('fa-square-o').addClass('fa-check-square-o'); //将下级权限置为可查看 self.setSubOptCheck(this_node); } else { //全不选 $(this).removeClass('active notall disabled').addClass('disabled'); opt.removeClass('active notall disabled').addClass('disabled'); opt_i.removeClass('fa-check-square-o').addClass('fa-square-o'); //将下级权限置为全不选 self.setSubOptDisabled(this_node); } }); //功能权限单选或取消 $(document).on('click', '.func-opt', function(e) { e.preventDefault(); var this_i = $(this).find('i'); var this_node = $(this).parents('.func-node'); if ($(this).hasClass('disabled')) { $(this).removeClass('disabled').addClass('active'); this_i.removeClass('fa-square-o').addClass('fa-check-square-o'); } else if ($(this).hasClass('active')) { $(this).removeClass('active').addClass('disabled'); this_i.removeClass('fa-check-square-o').addClass('fa-square-o'); } if ($(this).html().indexOf('查看') > 0) { if ($(this).hasClass('disabled')) { self.setSubOptDisabled(this_node); } else { self.setSubOptCheck(this_node); } } this_node.find('.func').removeClass('active notall disabled'); if (this_node.find('.func-opt-row > .active').length == 0) { this_node.find('.func').addClass('disabled'); //未选择 } else if (this_node.find('.func-opt').length == this_node.find('.func-opt-row > .active').length) { this_node.find('.func').addClass('active'); //全选 } else { this_node.find('.func').addClass('notall'); //部分选择 } }); //提交权限 $(document).on('click', '#permissionSubmitBtn', function(e) { e.preventDefault(); var data = { roleId: self.config.roleId, privilegeArr: [], _token: self.token }; var $active = $('.func-opt-row .active'); var len = $active.length; for (var i = 0; i < len; i++) { data.privilegeArr.push($active.eq(i).data('id')); } var url = Param.uri.updatePermission; $.post(url, data, function(ret) { if (ret.code != 0) { tips.error(ret.msg); return; } tips.success(ret.msg); $('#permissionBody').empty(); $('#permissionModal').modal('hide'); }); }); }, delData: function(ids) { var self = this; var data = { ids: ids, _token: this.token }; sure.init('是否删除?', function() { $.post(Param.uri.destroy, data) .fail(function(res) { tips.error(res.responseText); }) .done(function(res) { if (res.code == 1001) { //需要登录 tips.error('请先登录'); } else if (res.code != 0) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); } }); }); }, //初始化grid initGrid: function() { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query, '', uri); $('#dataGrid').TableGrid({ uri: Param.uri.read, selectAll: true, param: Param.query, rowStyle: function(row) { if (row.status == 0) { return 'warning'; } }, loadSuccess: function(rows, settings) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if (oldUri == uri) { return false; } var params = $.getUrlParams(window.location.href); history.pushState(params, '', oldUri); history.replaceState(settings.param, '', uri); } }); }, //将下级权限置为可查看 setSubOptCheck: function(this_node) { var self_tree = this_node.parent('.func-tree'); var _sub_func_node = self_tree.find('.sub-permission .func-node'); _sub_func_node.each(function() { var self_sub_func_node = $(this); $(this).find('.func-opt').each(function() { if ($(this).html().indexOf('查看') > 0) { self_sub_func_node.find('.func').removeClass('active notall disabled').addClass('notall'); $(this).removeClass('active notall disabled').addClass('active'); var self_sub_func_opt_i = $(this).find('i'); self_sub_func_opt_i.removeClass('fa-square-o').addClass('fa-check-square-o'); } }); }); }, //将下级权限置为全不选 setSubOptDisabled: function(this_node) { var self_tree = this_node.parent('.func-tree'); var _sub_func_node = self_tree.find('.sub-permission .func-node'); _sub_func_node.each(function() { $(this).find('.func').removeClass('active notall disabled').addClass('disabled'); $(this).find('.func-opt').removeClass('active notall disabled').addClass('disabled'); $(this).find('.func-opt > i').removeClass('fa-check-square-o').addClass('fa-square-o'); }); }, //初始化 initPermission: function(privilegeData) { $('.func').addClass('disabled'); $('.func-opt').addClass('disabled'); for (var i = 0; i < privilegeData.length; i++) { $obj = $('.func-opt[data-id="' + privilegeData[i].privilege_id + '"]'); $obj.removeClass('disabled').addClass('active'); $obj.find('i').removeClass('fa-square-o').addClass('fa-check-square-o'); } $('.func-node').each(function(index) { var func_id = $(this).data('id'); var total_len = $(this).find('.func-opt').length; var active_len = $(this).find('.active').length; if (total_len == active_len) { $(this).find('.func').removeClass('disabled').addClass('active'); } else if (total_len > active_len && active_len > 0) { $(this).find('.func').removeClass('disabled').addClass('notall'); } }); }, }; //pop state 事件 window.onpopstate = function(event) { if (event && event.state) { $('#searchForm').reloadForm(event.state); var $dataGrid = $('#dataGrid'); $dataGrid.TableGrid('setParam', event.state); $dataGrid.TableGrid('reload'); } }; var optPermission = function(value, row) { return '' + ' 授权'; }; ================================================ FILE: resources/assets/static/js/backend/MerSysUser.js ================================================ /** * SysMerUser JS * * @author MR.Z * @version 2.0 , 2016-09-27 */ var MerSysUser = { token : $('input[name=_token]').val(), init : function () { //重新设置菜单 if ( ! empty( Param.uri.menu ) ) { Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri="' + Param.uri.menu + '"]' ); } //初始化ajax 提示框 loading.initAjax(); this.initBtn(); this.initSearchForm(); this.initGrid(); } , //初始化查询form initSearchForm : function () { var $searchForm = $( '#searchForm' ); $searchForm.reloadForm( Param.query ); //点击查询按钮 $( '#searchBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var $dataGrid = $( '#dataGrid' ); var param = $dataGrid.TableGrid( 'getParam' ); param.keyword = $.trim( $( '#keyword' ).val() ); param.status = $( '#status' ).val(); param.page = 1; //console.log( param ); $dataGrid.TableGrid( 'setParam' , param ); $dataGrid.TableGrid( 'reload' ); } ); } , //显示 portlet setPortletShow : function ( type ) { var $tablePortlet = $( '#tablePortlet' ); var $addEditPortlet = $( '#addEditPortlet' ); $tablePortlet.slideUp( 'fast' ); if ( type == 'add' ) { if ( ! $addEditPortlet.hasClass( 'red' ) ) { $addEditPortlet.removeClass( 'green-meadow' ).addClass( 'red' ); } $addEditPortlet.find( '.caption-title' ).html( '新建' + Param.pageTitle ); } else if ( type == 'edit' ) { if ( ! $addEditPortlet.hasClass( 'green-meadow' ) ) { $addEditPortlet.removeClass( 'red' ).addClass( 'green-meadow' ); } $addEditPortlet.find( '.caption-title' ).html( '编辑' + Param.pageTitle ); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); } , //关闭 portlet setPortletHide : function () { $( '#tablePortlet' ).slideDown( 'fast' ); $( '#addEditPortlet' ).slideUp( 'fast' ); } , //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $( '#addNewBtn' ).on( 'click' , function ( e ) { e.preventDefault(); self.setPortletShow( 'add' ); var $form = $( '#addEditForm' ); $form.reloadForm( Param.defaultRow ); setImgPreview.clear( 'icon' ); $form.attr( 'action' , Param.uri.insert ); } ); //编辑按钮 $( document ).on( 'click' , '.editBtn' , function ( e ) { e.preventDefault(); self.setPortletShow( 'edit' ); var id = $( this ).data( 'id' ); var row = $( '#dataGrid' ).TableGrid( 'getRow' , id ); var $form = $( '#addEditForm' ); $form.reloadForm( row ); setImgPreview.set( 'icon' , row.icon ); //console.log( row.roles ); $.each( row.roles , function ( index , item ) { $( 'input[name="roles[]"][value="' + item.role_id + '"]' ).prop( 'checked' , true ); } ); $form.attr( 'action' , Param.uri.update +'/' + row.id ); } ); //删除一行 $( document ).on( 'click' , '.destroyBtn' , function ( e ) { e.preventDefault(); var id = $( this ).data( 'id' ); self.delData( id ); } ); $( '#destroySelectBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var ids = $( '.checker:checked' ).serializeJSON().selectChecker; if ( empty( ids ) ) { tips.error( '请选择要删除的记录' ); return; } self.delData( ids ); } ); //提交添加编辑窗 $( '#submitFormBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var $form = $( '#addEditForm' ); var uri = $form.attr( 'action' ); if ( $form.validForm() ) { var data = $form.serializeObject(); $.post( $form.attr( 'action' ) , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code == 401 ) { //需要登录 tips.error( '请先登录' ); } else if ( res.code != 0 ) { tips.error( res.msg ); } else { tips.success( res.msg ); $( '#dataGrid' ).TableGrid( 'reload' ); self.setPortletHide(); } } ); } } ); //关闭添加编辑窗 $( '#closePortletBtn' ).on( 'click' , function ( e ) { e.preventDefault(); self.setPortletHide(); } ); //上传按钮 $( '#iconUploadBtn' ).Uploader( { uri : Param.uri.upload , //上传文件 param : Param.uploadParam , album : true , albumUri : Param.uri.album , albumCatalogUri : Param.uri.albumCatalog , albumParam : Param.albumParam , onSuccess : function ( ret ) { tips.success( ret.msg ); if ( ret.code == 0 ) { setImgPreview.set( 'icon' , ret.data.savePath ); } } , onChooseAlbum : function ( uri ) { setImgPreview.set( 'icon' , uri ); } } ); //密码重置 $( document ).on( 'click' , '.reset-pwd-btn' , function ( e ) { e.preventDefault(); var id = $( this ).data( 'id' ); sure.init( '将密码重置为 ' + Param.defaultPwd + " ?" , function () { $.get( Param.uri.resetPwd + '/'+id , function ( ret ) { if ( ret.code != 0 ) { tips.error( ret.msg ); return; } tips.success( '重置成功' ); } ); } ); } ); } , delData : function ( ids ) { var data = { ids : ids, _token : this.token }; sure.init( '是否删除?' , function () { $.post( Param.uri.destroy , data ) .fail( function ( res ) { tips( res.responseText ); } ) .done( function ( res ) { if ( res.code == 401 ) { //需要登录 tips.error( '请先登录' ); } else if ( res.code != 0 ) { tips.error( res.msg ); } else { tips.success( res.msg ); $( '#dataGrid' ).TableGrid( 'reload' ); } } ); } ); } , //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param( Param.query ); history.replaceState( Param.query , '' , uri ); //console.log( uri ); $( '#dataGrid' ).TableGrid( { uri : Param.uri.read , selectAll : false , param : Param.query , rowStyle : function ( row ) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function ( rows , settings ) { var old_uri = window.location.href; var uri = Param.uri.this + '?' + $.param( settings.param ); if ( old_uri == uri ) { return false; } var params = $.getUrlParams( window.location.href ); history.pushState( params , '' , old_uri ); history.replaceState( settings.param , '' , uri ); } } ); } }; //pop state 事件 window.onpopstate = function ( event ) { if ( event && event.state ) { $( '#searchForm' ).reloadForm( event.state ); var $dataGrid = $( '#data_grid' ); $dataGrid.TableGrid( 'setParam' , event.state ); $dataGrid.TableGrid( 'reload' ); } }; var formatUsername = function ( value , row ) { var html = value + '
'; $.each( row.roles , function ( index , role ) { html += '' + role.role_name + ''; } ); return html; }; var optResetPwd = function ( value , row ) { return '' + ' 重置密码'; }; ================================================ FILE: resources/assets/static/js/backend/MerUser.js ================================================ /** * MerUser JS * * @author MR.Z * @version 2.0 , 2016-09-27 */ var MerUser = { token: $('input[name=_token]').val(), init: function() { //重新设置菜单 if (!empty(Param.uri.menu)) { Layout.setSidebarMenuActiveLink('set', 'a[data-uri="' + Param.uri.menu + '"]'); } //初始化ajax 提示框 loading.initAjax(); this.initBtn(); this.initSearchForm(); this.initGrid(); }, //初始化查询form initSearchForm: function() { var $searchForm = $('#searchForm'); $searchForm.reloadForm(Param.query); //点击查询按钮 $('#searchBtn').on('click', function(e) { e.preventDefault(); var $dataGrid = $('#dataGrid'); var param = $dataGrid.TableGrid('getParam'); param.keyword = $.trim($('#keyword').val()); param.status = $('#status').val(); param.module = $('#module').val(); param.page = 1; //console.log( param ); $dataGrid.TableGrid('setParam', param); $dataGrid.TableGrid('reload'); }); }, //显示 portlet setPortletShow: function(type) { var $tablePortlet = $('#tablePortlet'); var $addEditPortlet = $('#addEditPortlet'); $tablePortlet.slideUp('fast'); if (type == 'add') { if (!$addEditPortlet.hasClass('red')) { $addEditPortlet.removeClass('green-meadow').addClass('red'); } $addEditPortlet.find('.caption-title').html('新建' + Param.pageTitle); } else if (type == 'edit') { if (!$addEditPortlet.hasClass('green-meadow')) { $addEditPortlet.removeClass('red').addClass('green-meadow'); } $addEditPortlet.find('.caption-title').html('编辑' + Param.pageTitle); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); }, //关闭 portlet setPortletHide: function() { $('#tablePortlet').slideDown('fast'); $('#addEditPortlet').slideUp('fast'); }, //初始化各种按钮 initBtn: function() { var self = this; //打开添加框 $('#addNewBtn').on('click', function(e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm(Param.defaultRow); setImgPreview.clear('icon'); $form.attr('action', Param.uri.insert); }); //编辑按钮 $(document).on('click', '.editBtn', function(e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#dataGrid').TableGrid('getRow', id); var $form = $('#addEditForm'); data = { module: row.module } $('#roleForm').empty() //设置角色组 $.get(Param.uri.merRoleRead, data) .fail(function(res) { tips.error(res.responseText); }) .done(function(res) { if (res.code != 0) { tips.error(res.msg); } data = res.data.rows $.each(data, function(index, value) { label = ''; $('#roleForm').append(label) }) }); $form.reloadForm(row); setImgPreview.set('icon', row.icon); //console.log(row.roles); $.each(row.roles, function(index, item) { $('input[name="roles[]"][value="' + item.role_id + '"]').prop('checked', true); }); $form.attr('action', Param.uri.update + '/' + row.id); }); //删除一行 $(document).on('click', '.destroyBtn', function(e) { e.preventDefault(); var id = $(this).data('id'); self.delData(id); }); $('#destroySelectBtn').on('click', function(e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if (empty(ids)) { tips.error('请选择要删除的记录'); return; } self.delData(ids); }); //提交添加编辑窗 $('#submitFormBtn').on('click', function(e) { e.preventDefault(); var $form = $('#addEditForm'); if ($form.validForm()) { var data = $form.serializeObject(); data._token = self.token; $.post($form.attr('action'), data) .fail(function(res) { tips.error(res.responseText); }) .done(function(res) { if (res.code == 401) { //需要登录 tips.error('请先登录'); } else if (res.code != 0) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); self.setPortletHide(); } }); } }); //关闭添加编辑窗 $('#closePortletBtn').on('click', function(e) { e.preventDefault(); self.setPortletHide(); }); //上传按钮 $('#iconUploadBtn').Uploader({ uri: Param.uri.upload, //上传文件 param: Param.uploadParam, album: true, albumUri: Param.uri.album, albumCatalogUri: Param.uri.albumCatalog, albumParam: Param.albumParam, onSuccess: function(ret) { tips.success(ret.msg); if (ret.code == 0) { setImgPreview.set('icon', ret.data.uri); } }, onChooseAlbum: function(uri) { setImgPreview.set('icon', uri); } }); //密码重置 $(document).on('click', '.reset-pwd-btn', function(e) { e.preventDefault(); var id = $(this).data('id'); sure.init('将密码重置为 ' + Param.defaultPwd + " ?", function() { $.get(Param.uri.resetPwd + '/' + id, function(ret) { if (ret.code != 0) { tips.error(ret.msg); return; } tips.success('重置成功'); }); }); }); }, delData: function(ids) { var data = { ids: ids, _token: this.token }; sure.init('是否删除?', function() { $.post(Param.uri.destroy, data) .fail(function(res) { tips(res.responseText); }) .done(function(res) { if (res.code == 401) { //需要登录 tips.error('请先登录'); } else if (res.code != 0) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); } }); }); }, //初始化grid initGrid: function() { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query, '', uri); //console.log( uri ); $('#dataGrid').TableGrid({ uri: Param.uri.read, selectAll: false, param: Param.query, rowStyle: function(row) { if (row.status == 0) { return 'warning'; } }, loadSuccess: function(rows, settings) { var old_uri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if (old_uri == uri) { return false; } var params = $.getUrlParams(window.location.href); history.pushState(params, '', old_uri); history.replaceState(settings.param, '', uri); } }); } }; //pop state 事件 window.onpopstate = function(event) { if (event && event.state) { $('#searchForm').reloadForm(event.state); var $dataGrid = $('#data_grid'); $dataGrid.TableGrid('setParam', event.state); $dataGrid.TableGrid('reload'); } }; var formatUsername = function(value, row) { var html = value + '
'; $.each(row.roles, function(index, role) { html += '' + role.role_name + ''; }); return html; }; var optResetPwd = function(value, row) { return '' + ' 重置密码'; }; var formatTest = function(value) { var data = ['否', '是']; return '' + data[value] + ''; }; ================================================ FILE: resources/assets/static/js/backend/MerUserFavorites.js ================================================ /** * MerUserFavorites JS * * @author MR.Z * @version 2.0 , 2016-09-21 */ var MerUserFavorites = { config : {} , init : function () { //重新设置菜单 if ( !empty( Param.uri.menu ) ) { Layout.setSidebarMenuActiveLink('set' , 'a[data-uri="'+ Param.uri.menu +'"]'); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); } , //初始化查询form initSearchForm : function () { var $searchForm = $('#searchForm'); $searchForm.reloadForm(Param.query); //查询按钮 $('#searchBtn').on('click' , function (e) { e.preventDefault(); var $dataGrid = $('#dataGrid'); var param = $dataGrid.TableGrid('getParam'); param = $.extend({} , param , $('#searchForm').serializeObject() ); param.page = 1; $dataGrid.TableGrid('setParam' , param); $dataGrid.TableGrid('reload'); }); } , //显示 portlet setPortletShow : function ( type ) { var $tablePortlet = $('#tablePortlet') ; var $addEditPortlet = $('#addEditPortlet'); $tablePortlet.slideUp('fast'); if ( type == 'add' ) { if ( !$addEditPortlet.hasClass('blue') ) { $addEditPortlet.removeClass('green-meadow').addClass('blue'); } $addEditPortlet.find('.caption-subject').html('新增 ' + Param.pageTitle ); } else if ( type == 'edit' ) { if ( !$addEditPortlet.hasClass('green-meadow') ) { $addEditPortlet.removeClass('blue').addClass('green-meadow'); } $addEditPortlet.find('.caption-subject').html('编辑 ' + Param.pageTitle ); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); }, //关闭 portlet setPortletHide : function () { $('#tablePortlet').slideDown('fast') ; $('#addEditPortlet').slideUp('fast'); }, //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $('#addNewBtn').on('click' , function (e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm( Param.defaultRow ); $form.attr('action' , Param.uri.insert ); }); //编辑按钮 $(document).on('click' , '.editBtn' , function (e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#dataGrid').TableGrid('getRow' , id); var $form = $('#addEditForm'); $form.reloadForm( row ); $form.attr('action' , Param.uri.update + row.id ); }); //删除一行 $(document).on('click' , '.destroyBtn' , function (e) { e.preventDefault(); var id = $(this).data('id'); self.delData( id ); }); $('#destroySelectBtn').on('click' , function (e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if ( empty( ids ) ) { tips.error('请选择要删除的记录'); return ; } self.delData( ids ); }); //提交添加编辑窗 $('#submitFormBtn').on('click' , function (e) { e.preventDefault(); var $form = $('#addEditForm'); if( $form.validForm() ) { var data = $form.serializeObject(); $.post( $form.attr('action') , data ) .fail( function(res){ tips.error( res.responseText ); }) .done( function( res ){ if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if( res.code != 0 ){ tips.error( res.msg ); } else { tips.success( res.msg ); $('#dataGrid').TableGrid('reload'); self.setPortletHide(); } }); } }); //关闭添加编辑窗 $('#closePortletBtn').on('click' , function (e) { e.preventDefault(); self.setPortletHide(); }); } , delData : function ( ids ) { var self = this ; var data = { ids : ids }; sure.init('是否删除?' , function () { $.post( Param.uri.destroy , data ) .fail( function(res){ tips.error( res.responseText ); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if( res.code != 0 ){ tips.error( res.msg ); } else { tips.success( res.msg ); $('#dataGrid').TableGrid('reload'); } }); }); }, //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query , '' , uri); $('#dataGrid').TableGrid({ uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function (row) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function ( rows , settings ) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if ( oldUri == uri) { return false ; } var params = $.getUrlParams(window.location.href); history.pushState(params , '' , oldUri); history.replaceState(settings.param , '' , uri); } }); } }; //pop state 事件 window.onpopstate = function (event) { if ( event && event.state ) { $('#searchForm').reloadForm( event.state ); var $dataGrid = $('#dataGrid'); $dataGrid.TableGrid('setParam' , event.state); $dataGrid.TableGrid('reload'); } }; ================================================ FILE: resources/assets/static/js/backend/Simulator.js ================================================ /** * 接口调试 JS * * @author Zix * @version 2.0 , 2016-09-13 */ var Simulator = { config : { arrayCount : 0 , method : '' } , init : function ( config ) { var self = this; $.extend( this.config , config ); self.initApiUri(); self.initBtn(); self.initVersion(); } , initVersion: function(){ var ret = {"v1":[{"version":"v1","text":"v1"}],"v2":[{"version":"v2","text":"v2"}]} var options = []; for(var version in ret){ if(! ret.hasOwnProperty(version)){ continue; } var item = ret[ version ]; console.log(item) options.push( '' ); if ( ret[ version ].length > 0 ) { for ( var i in item ) { if ( ! item.hasOwnProperty( i ) ) { continue; } var row = item[ i ]; options.push( '' ); } } options.push( '' ); } $( '#version' ).html( options.join( '' ) ).eq( 0 ).prop( 'selected' , true ); }, //初始化action initApiUri : function (version='') { self=this; $.get( Param.uri.readApi+"?version="+version , function ( ret ) { //console.log( ret ) ; var options = []; for ( var name in ret ) { if ( ! ret.hasOwnProperty( name ) ) { continue; } var item = ret[ name ]; options.push( '' ); if ( ret[ name ].length > 0 ) { for ( var i in item ) { if ( ! item.hasOwnProperty( i ) ) { continue; } var row = item[ i ]; options.push( '' ); } } options.push( '' ); } $( '#actions' ).html( options.join( '' ) ).eq( 0 ).prop( 'selected' , true ); self.loadParams(); } ); } , //初始化按钮 initBtn : function () { var self = this; var $actions = $( '#actions' ); var $headerForm = $( '#headerForm' ); var $signatureStr = $( '#signatureStr' ); var $apiResponse = $( '#apiResponse' ); var $version = $('#version'); //显示隐藏header $( '#showOrHideHeader' ).on( 'click' , function ( e ) { e.preventDefault(); console.log( $headerForm.is( ':hidden' ) ); if ( $headerForm.is( ':hidden' ) ) { $headerForm.show(); $( this ).removeClass( 'green' ).addClass( 'grey' ).text( '隐藏' ); } else { $headerForm.hide(); $( this ).removeClass( 'grey' ).addClass( 'green' ).text( '显示' ); } } ); $version.on('change' , function(){ var $version = $('#version'); //version $ver = $version.find('option:selected').data( 'directory' ) self.initApiUri($ver) }); //action变化 $actions.on( 'change' , function () { self.config.method = ''; $( '#selectActionBtn' ).trigger( 'click' ); } ); //选择action $( '#selectActionBtn' ).on( 'click' , function ( e ) { e.preventDefault(); self.config.method = ''; self.loadParams(); } ); //选择method $( document ).on( 'click' , 'input[name="requestMethod"]' , function () { var method = $( this ).val(); if ( self.config.method == method ) { return false; } console.log( method ); self.config.method = method; self.loadParams(); } ); //发送请求 $( document ).on( 'click' , '#submitBtn' , function ( e ) { e.preventDefault(); loading.start(); var apiUri = Param.uri.api+self.config.version+'/' + self.config.directory + '/' + self.config.action; //时间戳 var timestamp = Date.parse( new Date() ) / 1000; //头部固定参数 var header = $( '#headerForm' ).serializeObject(); header[ 'timestamp' ] = timestamp; $( '#timestamp' ).val( timestamp ); //要传的参数 var params = self.fixFormData( $( '#paramsForm' ).serializeJSON() ); //请求方式 var requestMethod = $( 'input[name="requestMethod"]:checked' ).val(); //计算签名 header[ 'signature' ] = signature( params , timestamp , Param.secret ); $( '#signatureInp' ).val( header[ 'signature' ] ); if ( self.config.directory == 'system' && self.config.action == 'upload' ) { //上传文件 FileUpload.send( Param.uri.api + 'system/upload' , header , params , function ( ret ) { $apiResponse.show().html( jsonFormat( ret ) ); } ); } else { //普通请求 $.ajax( { type : requestMethod , dataType : 'json' , url : apiUri , data : params , headers : header } ) .fail( function ( res ) { loading.end(); $apiResponse.show().html( '发生错误了' + res.responseText ); } ) .done( function ( res ) { loading.end(); $apiResponse.show().html( jsonFormat( res ) ); } ); } } ); //显示返回示例 $( document ).on( 'click' , '#responseBtn' , function ( e ) { e.preventDefault(); var $responseExample = $( '#responseExample' ); if ( $responseExample.is( ':hidden' ) ) { var result = $responseExample.data( 'json' ); $responseExample.show().find( 'pre' ).html( JSON.stringify( result , null , 2 ) ); } else { $responseExample.hide(); } } ); //添加 array item 按钮 $( document ).on( 'click' , '.addMoreBtn' , function ( e ) { e.preventDefault(); var $row = $( this ).parent().parent(); self.config.arrayCount ++; var rowHtml = $row.find( '.for_copy' ).html().replace( /0/g , self.config.arrayCount ); var html = '
' + rowHtml + '
' + '
'; $row.after( html ); } ); //删除 array item 按钮 $( document ).on( 'click' , '.removeRowBtn' , function ( e ) { e.preventDefault(); $( this ).parent().parent().remove(); } ) } , //加载参数 loadParams : function () { var self = this; var $actions = $( '#actions' ); var $signatureStr = $( '#signatureStr' ); var $apiResponse = $( '#apiResponse' ); var $version = $('#version'); //version $ver = $version.find('option:selected').data( 'directory' ) self.config.arrayCount = 0; self.config.directory = $actions.find( 'option:selected' ).data( 'directory' ); self.config.action = $actions.val(); self.config.version = $ver var data = { directory : self.config.directory , action : self.config.action , method : self.config.method, version : self.config.version }; loading.start(); $signatureStr.html( '' ); $apiResponse.html( '' ); $.get( Param.uri.readParams , data , function ( res ) { loading.end(); $( '#params' ).html( res ); //$('input[name="requestMethod"]:first').prop('checked' , true); self.addTestData(); } ); } , addTestData : function () { var $form = $( '#paramsForm' ); var $token = $form.find( 'input[name="api_token"]' ); var $merId = $form.find( 'input[name="merId"]' ); var html = ''; console.log($token); if ( $token.length > 0 ) { html = ''; $token.after( html ); $token.remove(); } if ( $merId.length > 0 ) { html = ''; $merId.after( html ); $merId.remove(); } } , fixFormData : function ( data ) { //console.log( data ) ; for ( var key in data ) { if ( ! data.hasOwnProperty( key ) ) { continue; } if ( $.isArray( data[ key ] ) || $.isPlainObject( data[ key ] ) ) { var newArr = []; for ( var k in data[ key ] ) { if ( ! data[ key ].hasOwnProperty( k ) ) { continue; } if ( ! empty( data[ key ][ k ] ) ) { newArr.push( data[ key ][ k ] ) } } data[ key ] = JSON.stringify( newArr ); } } return data; } }; //签名 function signature( data , timestamp , secret ) { //data['timestamp'] = timestamp ; var metadata = []; for ( var name in data ) { if ( ! data.hasOwnProperty( name ) ) { continue; } var value = data[ name ]; if ( $.isFunction( value ) ) { continue; } metadata.push( { name : name , value : value } ) } metadata.push( { name : 'timestamp' , value : timestamp } ); metadata.sort( function ( a , b ) { return a.name < b.name ? - 1 : 1; } ); var url = []; for ( var i in metadata ) { if ( typeof (metadata[ i ][ 'value' ]) === 'undefined' ) { continue; } url.push( metadata[ i ][ 'name' ] + '=' + metadata[ i ][ 'value' ] ); } url = url.join( '&' , url ) + '&secret=' + secret; $( '#signatureStr' ).html( htmlEncode( url ) ); return $.md5( url ); } var htmlEncode = function ( str ) { var s = ""; s = str.replace( /&/g , "&" ); return s; }; var FileUpload = { config : { callback : function () { } } , send : function ( url , header , params , callback ) { var self = this; self.config.callback = callback; var file = $( 'input[name="fileData"]' )[ 0 ].files[ 0 ]; var fd = new FormData(); fd.append( "fileData" , file ); var xhr = new XMLHttpRequest(); for ( var key in params ) { if ( ! params.hasOwnProperty( key ) ) { continue; } if ( ! params[ key ] ) { continue; } fd.append( key , params[ key ] ); } xhr.upload.addEventListener( "progress" , self.onProgress , false ); xhr.addEventListener( "load" , self.onComplete , false ); xhr.addEventListener( "error" , self.onFailed , false ); xhr.addEventListener( "abort" , self.onCanceled , false ); xhr.open( "POST" , url ); for ( var k in header ) { if ( ! header.hasOwnProperty( k ) ) { continue; } xhr.setRequestHeader( k , header[ k ] ); } xhr.send( fd ); } , onComplete : function ( e ) { loading.end(); try { var jsonData = $.parseJSON( e.target.responseText ); FileUpload.config.callback( jsonData ); } catch ( e ) { FileUpload.config.callback( e.message ); } } , onProgress : function ( e ) { if ( e.lengthComputable ) { //console.log( e.loaded + ' - ' + e.total ); } else { FileUpload.config.callback( e.message ); } } , onFailed : function ( e ) { loading.end(); FileUpload.config.callback( e.message ); } , onCanceled : function ( e ) { loading.end(); FileUpload.config.callback( e.message ); } }; /** * json 格式化 */ function jsonFormat( txt , compress ) { if ( ! txt ) { return txt; } var indentChar = ' '; if ( /^\s*$/.test( txt ) ) { //alert('数据为空,无法格式化! '); return txt; } var data = txt; if ( ! $.isPlainObject( data ) ) { try { data = eval( '(' + txt + ')' ); } catch ( e ) { //alert('数据源语法错误,格式化失败! 错误信息: ' + e.description, 'err'); return txt; } } var draw = [] , last = false , This = this , line = compress ? '' : '\n' , nodeCount = 0 , maxDepth = 0; var notify = function ( name , value , isLast , indent /* 缩进 */ , formObj ) { nodeCount ++; /* 节点计数 */ for ( var i = 0 , tab = '' ; i < indent ; i ++ ) { tab += indentChar; } /* 缩进HTML */ tab = compress ? '' : tab; /* 压缩模式忽略缩进 */ maxDepth = ++ indent; /* 缩进递增并记录 */ if ( value && value.constructor == Array ) { /* 处理数组 */ draw.push( tab + ( formObj ? ( '"' + name + '":' ) : '' ) + '[' + line ); /* * 缩进'[' * 然后换行 */ for ( var i = 0 ; i < value.length ; i ++ ) { notify( i , value[ i ] , i == value.length - 1 , indent , false ); } draw.push( tab + ']' + ( isLast ? line : ( ',' + line ) ) ); /* 缩进']'换行,若非尾元素则添加逗号 */ } else if ( value && typeof value == 'object' ) { /* 处理对象 */ draw.push( tab + ( formObj ? ( '"' + name + '":' ) : '' ) + '{' + line ); /* * 缩进'{' * 然后换行 */ var len = 0 , i = 0; for ( var key in value ) { len ++; } for ( var key in value ) { notify( key , value[ key ] , ++ i == len , indent , true ); } draw.push( tab + '}' + ( isLast ? line : ( ',' + line ) ) ); /* 缩进'}'换行,若非尾元素则添加逗号 */ } else { if ( typeof value == 'string' ) { value = '"' + value + '"'; } draw.push( tab + ( formObj ? ( '"' + name + '":' ) : '' ) + value + ( isLast ? '' : ',' ) + line ); } ; }; var isLast = true , indent = 0; notify( '' , data , isLast , indent , false ); return draw.join( '' ); } ================================================ FILE: resources/assets/static/js/backend/SimulatorReadme.js ================================================ /** * 模拟器文档 JS * * @author Zix * @version 2.0 , 2016-05-06 */ var SimulatorReadme = { init : function () { var self = this; //重新设置菜单 if ( ! empty( Param.uri.menu ) ) { Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri="' + Param.uri.menu + '"]' ); } } }; ================================================ FILE: resources/assets/static/js/backend/SysApiLog.js ================================================ /** * SysApiLog JS * * @author MR.Z * @version 2.0 , 2017-09-25 */ var {funcLower} = { token : $('input[name=_token]').val(), config : {} , init : function () { //重新设置菜单 if ( !empty( Param.uri.menu ) ) { Layout.setSidebarMenuActiveLink('set' , 'a[data-uri="'+ Param.uri.menu +'"]'); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); } , //初始化查询form initSearchForm : function () { var $searchForm = $('#searchForm'); $searchForm.reloadForm(Param.query); //查询按钮 $('#searchBtn').on('click' , function (e) { e.preventDefault(); var $dataGrid = $('#dataGrid'); var param = $dataGrid.TableGrid('getParam'); param = $.extend({} , param , $('#searchForm').serializeObject() ); param.page = 1; $dataGrid.TableGrid('setParam' , param); $dataGrid.TableGrid('reload'); }); } , //显示 portlet setPortletShow : function ( type ) { var $tablePortlet = $('#tablePortlet') ; var $addEditPortlet = $('#addEditPortlet'); $tablePortlet.slideUp('fast'); if ( type == 'add' ) { if ( !$addEditPortlet.hasClass('blue') ) { $addEditPortlet.removeClass('green-meadow').addClass('blue'); } $addEditPortlet.find('.caption-subject').html('新增 ' + Param.pageTitle ); } else if ( type == 'edit' ) { if ( !$addEditPortlet.hasClass('green-meadow') ) { $addEditPortlet.removeClass('blue').addClass('green-meadow'); } $addEditPortlet.find('.caption-subject').html('编辑 ' + Param.pageTitle ); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); }, //关闭 portlet setPortletHide : function () { $('#tablePortlet').slideDown('fast') ; $('#addEditPortlet').slideUp('fast'); }, //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $('#addNewBtn').on('click' , function (e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm( Param.defaultRow ); $form.attr('action' , Param.uri.insert ); }); //编辑按钮 $(document).on('click' , '.editBtn' , function (e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#dataGrid').TableGrid('getRow' , id); var $form = $('#addEditForm'); $form.reloadForm( row ); $form.attr('action' , Param.uri.update + '/' +row.id ); }); //删除一行 $(document).on('click' , '.destroyBtn' , function (e) { e.preventDefault(); var id = $(this).data('id'); self.delData( id ); }); $('#destroySelectBtn').on('click' , function (e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if ( empty( ids ) ) { tips.error('请选择要删除的记录'); return ; } self.delData( ids ); }); //提交添加编辑窗 $('#submitFormBtn').on('click' , function (e) { e.preventDefault(); var $form = $('#addEditForm'); if( $form.validForm() ) { var data = $form.serializeObject(); $.post( $form.attr('action') , data ) .fail( function(res){ tips.error( res.responseText ); }) .done( function( res ){ if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if( res.code != 0 ){ tips.error( res.msg ); } else { tips.success( res.msg ); $('#dataGrid').TableGrid('reload'); self.setPortletHide(); } }); } }); //关闭添加编辑窗 $('#closePortletBtn').on('click' , function (e) { e.preventDefault(); self.setPortletHide(); }); } , delData : function ( ids ) { var self = this ; var data = { ids : ids, _token : this.token }; sure.init('是否删除?' , function () { $.post( Param.uri.destroy , data ) .fail( function(res){ tips.error( res.responseText ); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if( res.code != 0 ){ tips.error( res.msg ); } else { tips.success( res.msg ); $('#dataGrid').TableGrid('reload'); } }); }); }, //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query , '' , uri); $('#dataGrid').TableGrid({ uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function (row) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function ( rows , settings ) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if ( oldUri == uri) { return false ; } var params = $.getUrlParams(window.location.href); history.pushState(params , '' , oldUri); history.replaceState(settings.param , '' , uri); } }); } }; //pop state 事件 window.onpopstate = function (event) { if ( event && event.state ) { $('#searchForm').reloadForm( event.state ); var $dataGrid = $('#dataGrid'); $dataGrid.TableGrid('setParam' , event.state); $dataGrid.TableGrid('reload'); } }; ================================================ FILE: resources/assets/static/js/backend/SysAppVersion.js ================================================ /** * SysAppVersion JS * * @author MR.Z * @version 2.0 , 2016-09-27 */ var SysAppVersion = { token : $('input[name=_token]').val(), config : {} , init : function () { //重新设置菜单 if ( ! empty( Param.uri.menu ) ) { Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri="' + Param.uri.menu + '"]' ); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); } , //初始化查询form initSearchForm : function () { var $searchForm = $( '#searchForm' ); $searchForm.reloadForm( Param.query ); //查询按钮 $( '#searchBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var $dataGrid = $( '#dataGrid' ); var param = $dataGrid.TableGrid( 'getParam' ); param = $.extend( {} , param , $( '#searchForm' ).serializeObject() ); param.page = 1; $dataGrid.TableGrid( 'setParam' , param ); $dataGrid.TableGrid( 'reload' ); } ); } , //显示 portlet setPortletShow : function ( type ) { var $tablePortlet = $( '#tablePortlet' ); var $addEditPortlet = $( '#addEditPortlet' ); $tablePortlet.slideUp( 'fast' ); if ( type == 'add' ) { if ( ! $addEditPortlet.hasClass( 'blue' ) ) { $addEditPortlet.removeClass( 'green-meadow' ).addClass( 'blue' ); } $addEditPortlet.find( '.caption-subject' ).html( '新增 ' + Param.pageTitle ); } else if ( type == 'edit' ) { if ( ! $addEditPortlet.hasClass( 'green-meadow' ) ) { $addEditPortlet.removeClass( 'blue' ).addClass( 'green-meadow' ); } $addEditPortlet.find( '.caption-subject' ).html( '编辑 ' + Param.pageTitle ); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); } , //关闭 portlet setPortletHide : function () { $( '#tablePortlet' ).slideDown( 'fast' ); $( '#addEditPortlet' ).slideUp( 'fast' ); } , //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $( '#addNewBtn' ).on( 'click' , function ( e ) { e.preventDefault(); self.setPortletShow( 'add' ); var $form = $( '#addEditForm' ); $form.reloadForm( Param.defaultRow ); $form.attr( 'action' , Param.uri.insert ); } ); //编辑按钮 $( document ).on( 'click' , '.editBtn' , function ( e ) { e.preventDefault(); self.setPortletShow( 'edit' ); var id = $( this ).data( 'id' ); var row = $( '#dataGrid' ).TableGrid( 'getRow' , id ); var $form = $( '#addEditForm' ); $form.reloadForm( row ); $form.attr( 'action' , Param.uri.update + '/'+ row.id ); } ); //删除一行 $( document ).on( 'click' , '.destroyBtn' , function ( e ) { e.preventDefault(); var id = $( this ).data( 'id' ); self.delData( id ); } ); $( '#destroySelectBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var ids = $( '.checker:checked' ).serializeJSON().selectChecker; if ( empty( ids ) ) { tips.error( '请选择要删除的记录' ); return; } self.delData( ids ); } ); //提交添加编辑窗 $( '#submitFormBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var $form = $( '#addEditForm' ); if ( $form.validForm() ) { var data = $form.serializeObject(); data._token = self.token; $.post( $form.attr( 'action' ) , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code == 1001 ) { //需要登录 tips.error( '请先登录' ); } else if ( res.code != 0 ) { tips.error( res.msg ); } else { tips.success( res.msg ); $( '#dataGrid' ).TableGrid( 'reload' ); self.setPortletHide(); } } ); } } ); //关闭添加编辑窗 $( '#closePortletBtn' ).on( 'click' , function ( e ) { e.preventDefault(); self.setPortletHide(); } ); } , delData : function ( ids ) { var self = this; var data = { ids : ids, _token : this.token }; sure.init( '是否删除?' , function () { $.post( Param.uri.destroy , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code == 1001 ) { //需要登录 tips.error( '请先登录' ); } else if ( res.code != 0 ) { tips.error( res.msg ); } else { tips.success( res.msg ); $( '#dataGrid' ).TableGrid( 'reload' ); } } ); } ); } , //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param( Param.query ); history.replaceState( Param.query , '' , uri ); $( '#dataGrid' ).TableGrid( { uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function ( row ) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function ( rows , settings ) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param( settings.param ); //console.log( uri ); if ( oldUri == uri ) { return false; } var params = $.getUrlParams( window.location.href ); history.pushState( params , '' , oldUri ); history.replaceState( settings.param , '' , uri ); } } ); } }; //pop state 事件 window.onpopstate = function ( event ) { if ( event && event.state ) { $( '#searchForm' ).reloadForm( event.state ); var $dataGrid = $( '#dataGrid' ); $dataGrid.TableGrid( 'setParam' , event.state ); $dataGrid.TableGrid( 'reload' ); } }; var formatDevice = function ( value ) { if ( value == 'ios' ) { return '' } else { return ''; } }; var formatUri = function ( value ) { if ( empty( value ) ) { return ''; } return '下载'; }; ================================================ FILE: resources/assets/static/js/backend/SysArea.js ================================================ /** * SysArea JS * * @author MR.Z * @version 2.0 , 2016-09-20 */ var SysArea = { token : $('input[name=_token]').val(), config : {} , init : function () { //重新设置菜单 if ( ! empty(Param.uri.menu) ) { Layout.setSidebarMenuActiveLink('set' , 'a[data-uri="' + Param.uri.menu + '"]'); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); } , //初始化查询form initSearchForm : function () { var $searchForm = $('#searchForm'); $searchForm.reloadForm(Param.query); //查询按钮 $('#searchBtn').on('click' , function (e) { e.preventDefault(); var $dataGrid = $('#dataGrid'); var param = $dataGrid.TableGrid('getParam'); param = $.extend({} , param , $('#searchForm').serializeObject()); param.page = 1; $dataGrid.TableGrid('setParam' , param); $dataGrid.TableGrid('reload'); }); } , //显示 modal setPortletShow : function (type) { var $addEditModal = $('#addEditModal'); $addEditModal.modal('show'); if ( type == 'add' ) { $addEditModal.find('.caption-subject').html('新增 ' + Param.pageTitle); } else if ( type == 'edit' ) { $addEditModal.find('.caption-subject').html('编辑 ' + Param.pageTitle); } } , //关闭 modal setPortletHide : function () { $('#addEditModal').modal('hide'); } , //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $('#addNewBtn').on('click' , function (e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm(Param.defaultRow); $form.attr('action' , Param.uri.insert); }); //编辑按钮 $(document).on('click' , '.editBtn' , function (e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#dataGrid').TableGrid('getRow' , id); var $form = $('#addEditForm'); $form.reloadForm(row); $form.attr('action' , Param.uri.update+ '/' + row.id); }); //删除一行 $(document).on('click' , '.destroyBtn' , function (e) { e.preventDefault(); var id = $(this).data('id'); self.delData(id); }); $('#destroySelectBtn').on('click' , function (e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if ( empty(ids) ) { tips.error('请选择要删除的记录'); return; } self.delData(ids); }); //提交添加编辑窗 $('#submitFormBtn').on('click' , function (e) { e.preventDefault(); var $form = $('#addEditForm'); if ( $form.validForm() ) { var data = $form.serializeObject(); data['pid'] = Param.query.pid; $.post($form.attr('action') , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if ( res.code != 0 ) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); self.setPortletHide(); } }); } }); //关闭添加编辑窗 $('#closePortletBtn').on('click' , function (e) { e.preventDefault(); self.setPortletHide(); }); } , delData : function (ids) { var self = this; var data = { ids : ids , _token : self.token }; sure.init('是否删除?' , function () { $.post(Param.uri.destroy , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if ( res.code != 0 ) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); } }); }); } , //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query , '' , uri); $('#dataGrid').TableGrid({ uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function (row) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function (rows , settings) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if ( oldUri == uri ) { return false; } var params = $.getUrlParams(window.location.href); history.pushState(params , '' , oldUri); history.replaceState(settings.param , '' , uri); } }); } }; //pop state 事件 window.onpopstate = function (event) { if ( event && event.state ) { $('#searchForm').reloadForm(event.state); var $dataGrid = $('#dataGrid'); $dataGrid.TableGrid('setParam' , event.state); $dataGrid.TableGrid('reload'); } }; var optChildren = function (value , row) { return '' + ' 查看下级'; }; ================================================ FILE: resources/assets/static/js/backend/SysFunc.js ================================================ /** * SysFunc JS * * @author MR.Z * @version 2.0 , 2016-09-12 */ var SysFunc = { 'token': $('input[name=_token]').val(), init: function() { //重新设置菜单 if (!empty(Param.uri.menu)) { Layout.setSidebarMenuActiveLink('set', 'a[data-uri="' + Param.uri.menu + '"]'); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化数据表 this.initGrid(); }, //显示 modal setPortletShow: function(type) { var $addEditModal = $('#addEditModal'); $addEditModal.modal('show'); if (type == 'add') { $addEditModal.find('.caption-subject').html('新建' + Param.pageTitle); } else if (type == 'edit') { $addEditModal.find('.caption-subject').html('编辑' + Param.pageTitle); } }, //关闭 modal setPortletHide: function() { $('#addEditModal').modal('hide'); }, //初始化各种按钮 initBtn: function() { var self = this; //打开添加框 $('#addNewBtn').on('click', function(e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm(Param.defaultRow); $form.attr('action', Param.uri.insert); }); //编辑按钮 $(document).on('click', '.editBtn', function(e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#treeGrid').TreeGrid('getRow', id); var $form = $('#addEditForm'); $form.reloadForm(row); $form.attr('action', Param.uri.update + '/' + row.id); }); //删除一行 $(document).on('click', '.destroyBtn', function(e) { e.preventDefault(); var id = $(this).data('id'); self.delData(id); }); $('#destroySelectBtn').on('click', function(e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if (empty(ids)) { tips.error('请选择要删除的记录'); return; } self.delData(ids); }); //提交添加编辑窗 $('#submitFormBtn').on('click', function(e) { e.preventDefault(); var $form = $('#addEditForm'); if ($form.validForm()) { var data = $form.serializeObject(); $.post($form.attr('action'), data) .fail(function(res) { tips.error(res.responseText); }) .done(function(res) { if (res.code == 1001) { //需要登录 tips.error('请先登录'); } else if (res.code != 0) { tips.error(res.msg); } else { tips.success(res.msg); $('#treeGrid').TreeGrid('reload'); self.setPortletHide(); } }); } }); //关闭添加编辑窗 $('#closePortletBtn').on('click', function(e) { e.preventDefault(); self.setPortletHide(); }); //打开权限窗口 $(document).on('click', '.privilegeBtn', function(e) { e.preventDefault(); var id = $(this).data('id'); var data = $('#treeGrid').TreeGrid('getRow', id); var privilege = data.privilege; var $form = $('#privilegeForm'); $form[0].reset(); if (!empty(privilege)) { $.each(privilege, function(index, item) { $form.find('input[value="' + item.name + '"]').prop('checked', true); }); } $form.attr('action', Param.uri.updatePrivilege + '/' + id); $('#privilegeModal').modal('show'); }); //更新权限 $('#submitPrivilegeFormBtn').on('click', function(e) { e.preventDefault(); var $form = $('#privilegeForm'); var uri = $form.attr('action'); var data = $form.serializeObject(); $.post(uri, data) .fail(function(res) { tips.error(res.responseText); }) .done(function(res) { if (res.code == 403) { //需要登录 tips.error('请先登录'); } else if (res.code != 0) { tips.error(res.msg); } else { tips.success(res.msg); $('#treeGrid').TreeGrid('reload'); $('#privilegeModal').modal('hide'); } }); }) }, delData: function(ids) { var data = { ids: ids, _token: this.token }; sure.init('是否删除?', function() { $.post(Param.uri.destroy, data) .fail(function(res) { tips.error(res.responseText); }) .done(function(res) { if (res.code == 1001) { //需要登录 tips.error('请先登录'); } else if (res.code != 0) { tips.error(res.msg); } else { tips.success(res.msg); $('#treeGrid').TreeGrid('reload'); } }); }); }, //初始化tree grid initGrid: function() { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query, '', uri); $('#treeGrid').TreeGrid({ uri: Param.uri.read, field: 'name', //显示箭头的字段 param: Param.query, //查询参数 expandAll: true, rowStyle: function(row) { if (row.status == 0) { return 'warning'; } }, loadSuccess: function(rows, settings) { var options = ''; options += form_options_rows(rows, settings); $('select[name="pid"]').html(options); var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if (oldUri == uri) { return false; } var params = $.getUrlParams(window.location.href); history.pushState(params, '', oldUri); history.replaceState(settings.param, '', uri); } }); } }; //pop state 事件 window.onpopstate = function(event) { if (event && event.state) { $('#searchForm').reloadForm(event.state); var $treeGrid = $('#treeGrid'); $treeGrid.TreeGrid('setParam', event.state); $treeGrid.TreeGrid('reload'); } }; var formatName = function(value, row) { var html = value; if (!empty(row.icon)) { html = ' ' + html; } return html; }; var formatIsFunc = function(value) { return Param.isFunc[value]; }; var formatIsMenu = function(value) { return Param.isMenu[value]; }; var optPrivilege = function(value, row) { return ' 权限'; }; ================================================ FILE: resources/assets/static/js/backend/SysMail.js ================================================ /** * SysMail JS * * @author MR.Z * @version 2.0 , 2016-10-10 */ var SysMail = { token : $('input[name=_token]').val(), config : {} , init : function () { //重新设置菜单 if ( ! empty( Param.uri.menu ) ) { Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri="' + Param.uri.menu + '"]' ); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); } , //初始化查询form initSearchForm : function () { var $searchForm = $( '#searchForm' ); $searchForm.reloadForm( Param.query ); //查询按钮 $( '#searchBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var $dataGrid = $( '#dataGrid' ); var param = $dataGrid.TableGrid( 'getParam' ); param = $.extend( {} , param , $( '#searchForm' ).serializeObject() ); param.page = 1; $dataGrid.TableGrid( 'setParam' , param ); $dataGrid.TableGrid( 'reload' ); } ); } , //显示 portlet setPortletShow : function ( type ) { var $tablePortlet = $( '#tablePortlet' ); var $addEditPortlet = $( '#addEditPortlet' ); $tablePortlet.slideUp( 'fast' ); if ( type == 'add' ) { if ( ! $addEditPortlet.hasClass( 'blue' ) ) { $addEditPortlet.removeClass( 'green-meadow' ).addClass( 'blue' ); } $addEditPortlet.find( '.caption-subject' ).html( '新增 ' + Param.pageTitle ); } else if ( type == 'edit' ) { if ( ! $addEditPortlet.hasClass( 'green-meadow' ) ) { $addEditPortlet.removeClass( 'blue' ).addClass( 'green-meadow' ); } $addEditPortlet.find( '.caption-subject' ).html( '编辑 ' + Param.pageTitle ); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); } , //关闭 portlet setPortletHide : function () { $( '#tablePortlet' ).slideDown( 'fast' ); $( '#addEditPortlet' ).slideUp( 'fast' ); } , //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $( '#addNewBtn' ).on( 'click' , function ( e ) { e.preventDefault(); self.setPortletShow( 'add' ); var $form = $( '#addEditForm' ); $form.reloadForm( Param.defaultRow ); $form.attr( 'action' , Param.uri.insert ); } ); //编辑按钮 $( document ).on( 'click' , '.editBtn' , function ( e ) { e.preventDefault(); self.setPortletShow( 'edit' ); var id = $( this ).data( 'id' ); var row = $( '#dataGrid' ).TableGrid( 'getRow' , id ); var $form = $( '#addEditForm' ); $form.reloadForm( row ); $form.attr( 'action' , Param.uri.update + '/' +row.id ); } ); //删除一行 $( document ).on( 'click' , '.destroyBtn' , function ( e ) { e.preventDefault(); var id = $( this ).data( 'id' ); self.delData( id ); } ); $( '#destroySelectBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var ids = $( '.checker:checked' ).serializeJSON().selectChecker; if ( empty( ids ) ) { tips.error( '请选择要删除的记录' ); return; } self.delData( ids ); } ); //提交添加编辑窗 $( '#submitFormBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var $form = $( '#addEditForm' ); if ( $form.validForm() ) { var data = $form.serializeObject(); data._token = self.token; $.post( $form.attr( 'action' ) , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code == 1001 ) { //需要登录 tips.error( '请先登录' ); } else if ( res.code != 0 ) { tips.error( res.msg ); } else { tips.success( res.msg ); $( '#dataGrid' ).TableGrid( 'reload' ); self.setPortletHide(); } } ); } } ); //关闭添加编辑窗 $( '#closePortletBtn' ).on( 'click' , function ( e ) { e.preventDefault(); self.setPortletHide(); } ); //发送按钮 $( document ).on( 'click' , '.sendMailBtn' , function ( e ) { e.preventDefault(); var data = { id : $( this ).data( 'id' ) , _token : self.token }; sure.init( '确定发送吗?' , function () { $.post( Param.uri.send , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code != 0 ) { tips.error( res.msg ); return false; } tips.success( res.msg ); } ); } ); } ); } , delData : function ( ids ) { var self = this; var data = { ids : ids , _token : this.token }; sure.init( '是否删除?' , function () { $.post( Param.uri.destroy , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code == 1001 ) { //需要登录 tips.error( '请先登录' ); } else if ( res.code != 0 ) { tips.error( res.msg ); } else { tips.success( res.msg ); $( '#dataGrid' ).TableGrid( 'reload' ); } } ); } ); } , //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param( Param.query ); history.replaceState( Param.query , '' , uri ); $( '#dataGrid' ).TableGrid( { uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function ( row ) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function ( rows , settings ) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param( settings.param ); if ( oldUri == uri ) { return false; } var params = $.getUrlParams( window.location.href ); history.pushState( params , '' , oldUri ); history.replaceState( settings.param , '' , uri ); } } ); } }; //pop state 事件 window.onpopstate = function ( event ) { if ( event && event.state ) { $( '#searchForm' ).reloadForm( event.state ); var $dataGrid = $( '#dataGrid' ); $dataGrid.TableGrid( 'setParam' , event.state ); $dataGrid.TableGrid( 'reload' ); } }; var typeColor = { captcha : 'default' }; var formatType = function ( value ) { return '' + Param.type[ value ] + ''; }; var optSend = function ( value , row ) { var html = ''; if ( row.status == 0 ) { html = '' + ' 发送'; } return html; }; ================================================ FILE: resources/assets/static/js/backend/SysMerchant.js ================================================ /** * SysMerchant JS * * @author MR.Z * @version 2.0 , 2016-09-13 */ var SysMerchant = { token : $('input[name=_token]').val(), init : function () { //重新设置菜单 if ( ! empty( Param.uri.menu ) ) { Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri="' + Param.uri.menu + '"]' ); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); } , //初始化查询form initSearchForm : function () { var $searchForm = $( '#searchForm' ); $searchForm.reloadForm( Param.query ); //查询按钮 $( '#searchBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var $dataGrid = $( '#dataGrid' ); var param = $dataGrid.TableGrid( 'getParam' ); param = $.extend( {} , param , $( '#searchForm' ).serializeObject() ); param.page = 1; $dataGrid.TableGrid( 'setParam' , param ); $dataGrid.TableGrid( 'reload' ); } ); } , //显示 portlet setPortletShow : function ( type ) { var $tablePortlet = $( '#tablePortlet' ); var $addEditPortlet = $( '#addEditPortlet' ); $tablePortlet.slideUp( 'fast' ); if ( type == 'add' ) { if ( ! $addEditPortlet.hasClass( 'blue' ) ) { $addEditPortlet.removeClass( 'green-meadow' ).addClass( 'blue' ); } $addEditPortlet.find( '.caption-subject' ).html( '新建' + Param.pageTitle ); } else if ( type == 'edit' ) { if ( ! $addEditPortlet.hasClass( 'green-meadow' ) ) { $addEditPortlet.removeClass( 'blue' ).addClass( 'green-meadow' ); } $addEditPortlet.find( '.caption-subject' ).html( '编辑' + Param.pageTitle ); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); } , //关闭 portlet setPortletHide : function () { $( '#tablePortlet' ).slideDown( 'fast' ); $( '#addEditPortlet' ).slideUp( 'fast' ); } , //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $( '#addNewBtn' ).on( 'click' , function ( e ) { e.preventDefault(); self.setPortletShow( 'add' ); var $form = $( '#addEditForm' ); $form.reloadForm( Param.defaultRow ); setImgPreview.clear( 'icon' ); $form.attr( 'action' , Param.uri.insert ); } ); //编辑按钮 $( document ).on( 'click' , '.editBtn' , function ( e ) { e.preventDefault(); self.setPortletShow( 'edit' ); var id = $( this ).data( 'id' ); var row = $( '#dataGrid' ).TableGrid( 'getRow' , id ); var $form = $( '#addEditForm' ); $form.reloadForm( row ); setImgPreview.set( 'icon' , row.icon ); $( 'input[name="area"]' ).AreaSelection( 'setAreaName' , row.full_area_name ); $form.attr( 'action' , Param.uri.update + '/'+ row.id ); } ); //删除一行 $( document ).on( 'click' , '.destroyBtn' , function ( e ) { e.preventDefault(); var id = $( this ).data( 'id' ); self.delData( id ); } ); $( '#destroySelectBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var ids = $( '.checker:checked' ).serializeJSON().selectChecker; if ( empty( ids ) ) { tips.error( '请选择要删除的记录' ); return; } self.delData( ids ); } ); //提交添加编辑窗 $( '#submitFormBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var $form = $( '#addEditForm' ); if ( $form.validForm() ) { var data = $form.serializeObject(); data._token = self.token; $.post( $form.attr( 'action' ) , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code == 1001 ) { //需要登录 tips.error( '请先登录' ); } else if ( res.code != 0 ) { tips.error( res.msg ); } else { tips.success( res.msg ); $( '#dataGrid' ).TableGrid( 'reload' ); self.setPortletHide(); } } ); } } ); //关闭添加编辑窗 $( '#closePortletBtn' ).on( 'click' , function ( e ) { e.preventDefault(); self.setPortletHide(); } ); //上传按钮 $( '#iconUploadBtn' ).Uploader( { uri : Param.uri.upload , //上传文件 param : Param.uploadParam , album : true , albumUri : Param.uri.album , albumCatalogUri : Param.uri.albumCatalog , albumParam : Param.albumParam , onSuccess : function ( ret ) { tips.success( ret.msg ); if ( ret.code == 0 ) { setImgPreview.set( 'icon' , ret.data.savePath ); } } , onChooseAlbum : function ( uri ) { setImgPreview.set( 'icon' , uri ); } } ); //创建系统用户 $( document ).on( 'click' , '.createSysUserBtn' , function ( e ) { e.preventDefault(); var id = $( this ).data( 'id' ); var phone = $( this ).data( 'phone' ); if ( empty( phone ) ) { tips.error( '请先添加电话' ); return; } sure.init( '用户名:' + phone + ', 密码:' + Param.resetPwd + ' , 确定吗?' , function () { $.get( Param.uri.createSysUser + id ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code > 0 ) { tips.error( res.msg ); } else { tips.success( res.msg ); $( '#dataGrid' ).TableGrid( 'reload' ); } } ); } ); } ); //区域选择 $( 'input[name="area"]' ).AreaSelection( { uri : Param.uri.area + '/' } ); } , delData : function ( ids ) { var self = this; var data = { ids : ids, _token : self.token }; sure.init( '是否删除?' , function () { $.post( Param.uri.destroy , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code == 1001 ) { //需要登录 tips.error( '请先登录' ); } else if ( res.code != 0 ) { tips.error( res.msg ); } else { tips.success( res.msg ); $( '#dataGrid' ).TableGrid( 'reload' ); } } ); } ); } , //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param( Param.query ); history.replaceState( Param.query , '' , uri ); $( '#dataGrid' ).TableGrid( { uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function ( row ) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function ( rows , settings ) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param( settings.param ); if ( oldUri == uri ) { return false; } var params = $.getUrlParams( window.location.href ); history.pushState( params , '' , oldUri ); history.replaceState( settings.param , '' , uri ); } } ); } }; //pop state 事件 window.onpopstate = function ( event ) { if ( event && event.state ) { $( '#searchForm' ).reloadForm( event.state ); var $dataGrid = $( '#dataGrid' ); $dataGrid.TableGrid( 'setParam' , event.state ); $dataGrid.TableGrid( 'reload' ); } }; var optUserOrDetail = function ( value , row ) { //if ( ! empty( row.sys_user ) ) { return ' 管理'; //} /* return '' + ' 创建系统用户';*/ }; ================================================ FILE: resources/assets/static/js/backend/SysMerchantDetail.js ================================================ /** * SysMerchant JS * * @author MR.Z * @version 2.0 , 2016-09-28 */ var SysMerchantDetail = { init : function () { //重新设置菜单 if ( ! empty( Param.uri.menu ) ) { Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri="' + Param.uri.menu + '"]' ); } } }; ================================================ FILE: resources/assets/static/js/backend/SysPush.js ================================================ /** * SysPush JS * * @author MR.Z * @version 2.0 , 2016-09-19 */ var SysPush = { token : $('input[name=_token]').val(), config : {} , init : function () { //重新设置菜单 if ( ! empty(Param.uri.menu) ) { Layout.setSidebarMenuActiveLink('set' , 'a[data-uri="' + Param.uri.menu + '"]'); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); } , //初始化查询form initSearchForm : function () { var $searchForm = $('#searchForm'); $searchForm.reloadForm(Param.query); //查询按钮 $('#searchBtn').on('click' , function (e) { e.preventDefault(); var $dataGrid = $('#dataGrid'); var param = $dataGrid.TableGrid('getParam'); param = $.extend({} , param , $('#searchForm').serializeObject()); param.page = 1; $dataGrid.TableGrid('setParam' , param); $dataGrid.TableGrid('reload'); }); } , //显示 portlet setPortletShow : function (type) { var $tablePortlet = $('#tablePortlet'); var $addEditPortlet = $('#addEditPortlet'); $tablePortlet.slideUp('fast'); if ( type == 'add' ) { if ( ! $addEditPortlet.hasClass('blue') ) { $addEditPortlet.removeClass('green-meadow').addClass('blue'); } $addEditPortlet.find('.caption-subject').html('新增 ' + Param.pageTitle); } else if ( type == 'edit' ) { if ( ! $addEditPortlet.hasClass('green-meadow') ) { $addEditPortlet.removeClass('blue').addClass('green-meadow'); } $addEditPortlet.find('.caption-subject').html('编辑 ' + Param.pageTitle); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); } , //关闭 portlet setPortletHide : function () { $('#tablePortlet').slideDown('fast'); $('#addEditPortlet').slideUp('fast'); } , //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $('#addNewBtn').on('click' , function (e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm(Param.defaultRow); $form.attr('action' , Param.uri.insert); }); //编辑按钮 $(document).on('click' , '.editBtn' , function (e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#dataGrid').TableGrid('getRow' , id); var $form = $('#addEditForm'); $form.reloadForm(row); $form.attr('action' , Param.uri.update +'/' + row.id); }); //删除一行 $(document).on('click' , '.destroyBtn' , function (e) { e.preventDefault(); var id = $(this).data('id'); self.delData(id); }); $('#destroySelectBtn').on('click' , function (e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if ( empty(ids) ) { tips.error('请选择要删除的记录'); return; } self.delData(ids); }); //提交添加编辑窗 $('#submitFormBtn').on('click' , function (e) { e.preventDefault(); var $form = $('#addEditForm'); if ( $form.validForm() ) { var data = $form.serializeObject(); $.post($form.attr('action') , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if ( res.code != 0 ) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); self.setPortletHide(); } }); } }); //关闭添加编辑窗 $('#closePortletBtn').on('click' , function (e) { e.preventDefault(); self.setPortletHide(); }); //发送按钮 $(document).on('click' , '.sendBtn' , function (e) { e.preventDefault(); var data = { id : $(this).data('id') }; sure.init('确定发送吗' , function () { $.get(Param.uri.send , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code != 0 ) { tips.error( res.msg ); return false ; } tips.success( res.msg ); $('#dataGrid').TableGrid('reload'); }); }); }) } , delData : function (ids) { var self = this; var data = { ids : ids, _token : this.token }; sure.init('是否删除?' , function () { $.post(Param.uri.destroy , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if ( res.code != 0 ) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); } }); }); } , //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query , '' , uri); $('#dataGrid').TableGrid({ uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function (row) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function (rows , settings) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if ( oldUri == uri ) { return false; } var params = $.getUrlParams(window.location.href); history.pushState(params , '' , oldUri); history.replaceState(settings.param , '' , uri); } }); } }; //pop state 事件 window.onpopstate = function (event) { if ( event && event.state ) { $('#searchForm').reloadForm(event.state); var $dataGrid = $('#dataGrid'); $dataGrid.TableGrid('setParam' , event.state); $dataGrid.TableGrid('reload'); } }; var optSend = function (value , row) { if ( row.status == 0 ) { return ' 发送'; } return ''; }; //catalog var formatCatalog = function (value) { var color = {alert : 'default' , order : 'primary' , event : 'success'}; return '' + Param.catalog[value] + ''; }; //format platform var ios = ''; var android = ''; var formatPlatform = function (value) { var html = ''; if ( value == 'all' ) { html += ios + android; } else if ( value == 'ios' ) { html += ios; } else { html += android; } return html; }; var formatTitle = function (value , row) { var html = ''; if ( ! empty(value) ) { html += value + '
'; } if ( ! empty(row.alert) ) { html += row.alert; } return html; }; ================================================ FILE: resources/assets/static/js/backend/SysRole.js ================================================ /** * SysRole JS * * @author MR.Z * @version 2.0 , 2016-09-12 */ var SysRole = { token : $('input[name=_token]').val(), config : {} , init : function () { //重新设置菜单 if ( ! empty(Param.uri.menu) ) { Layout.setSidebarMenuActiveLink('set' , 'a[data-uri="' + Param.uri.menu + '"]'); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化数据表 this.initGrid(); } , //显示 modal setPortletShow : function (type) { var $addEditModal = $('#addEditModal'); $addEditModal.modal('show'); if ( type == 'add' ) { $addEditModal.find('.caption-subject').html('新建' + Param.pageTitle); } else if ( type == 'edit' ) { $addEditModal.find('.caption-subject').html('编辑' + Param.pageTitle); } } , //关闭 modal setPortletHide : function () { $('#addEditModal').modal('hide'); } , //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $('#addNewBtn').on('click' , function (e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm(Param.defaultRow); $form.attr('action' , Param.uri.insert); }); //编辑按钮 $(document).on('click' , '.editBtn' , function (e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#dataGrid').TableGrid('getRow' , id); var $form = $('#addEditForm'); $form.reloadForm(row); $form.attr('action' , Param.uri.update + '/'+ row.id); }); //删除一行 $(document).on('click' , '.destroyBtn' , function (e) { e.preventDefault(); var id = $(this).data('id'); self.delData(id); }); $('#destroySelectBtn').on('click' , function (e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if ( empty(ids) ) { tips.error('请选择要删除的记录'); return; } self.delData(ids); }); //提交添加编辑窗 $('#submitFormBtn').on('click' , function (e) { e.preventDefault(); var $form = $('#addEditForm'); if ( $form.validForm() ) { var data = $form.serializeObject(); $.post($form.attr('action') , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code == 403 ) { //需要登录 tips.error('请先登录'); } else if ( res.code != 0 ) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); self.setPortletHide(); } }); } }); //打开权限窗口 $(document).on('click' , '.permissionBtn' , function (e) { e.preventDefault(); $('#permissionBody').empty(); var id = $(this).data('id'); var roleData = $('#dataGrid').TableGrid('getRow' , id); self.config.roleId = id; var url = Param.uri.getPermission; var data = { roleId : id, _token : self.token }; $.post(url , data , function (res) { $('#permissionLabel').html('[' + roleData.name + ']的权限'); $('#permissionModal').modal('show'); $('#permissionBody').html(res); var url = Param.uri.getPrivilegeData; $.post(url , data , function (res) { self.initPermission(res); }); }); }); //关闭添加编辑窗 $('#closePortletBtn').on('click' , function (e) { e.preventDefault(); self.setPortletHide(); }); //功能权限全选或取消 $(document).on('click' , '.func' , function (e) { e.preventDefault(); var this_node = $(this).parent('.func-node'); var opt = this_node.find('.func-opt'); var opt_i = this_node.find('.func-opt > i'); if ( $(this).hasClass('disabled') || $(this).hasClass('notall') ) { //全选 $(this).removeClass('active notall disabled').addClass('active'); opt.removeClass('active notall disabled').addClass('active'); opt_i.removeClass('fa-square-o').addClass('fa-check-square-o'); //将下级权限置为可查看 self.setSubOptCheck(this_node); } else { //全不选 $(this).removeClass('active notall disabled').addClass('disabled'); opt.removeClass('active notall disabled').addClass('disabled'); opt_i.removeClass('fa-check-square-o').addClass('fa-square-o'); //将下级权限置为全不选 self.setSubOptDisabled(this_node); } }); //功能权限单选或取消 $(document).on('click' , '.func-opt' , function (e) { e.preventDefault(); var this_i = $(this).find('i'); var this_node = $(this).parents('.func-node'); if ( $(this).hasClass('disabled') ) { $(this).removeClass('disabled').addClass('active'); this_i.removeClass('fa-square-o').addClass('fa-check-square-o'); } else if ( $(this).hasClass('active') ) { $(this).removeClass('active').addClass('disabled'); this_i.removeClass('fa-check-square-o').addClass('fa-square-o'); } if ( $(this).html().indexOf('查看') > 0 ) { if ( $(this).hasClass('disabled') ) { self.setSubOptDisabled(this_node); } else { self.setSubOptCheck(this_node); } } this_node.find('.func').removeClass('active notall disabled'); if ( this_node.find('.func-opt-row > .active').length == 0 ) { this_node.find('.func').addClass('disabled'); //未选择 } else if ( this_node.find('.func-opt').length == this_node.find('.func-opt-row > .active').length ) { this_node.find('.func').addClass('active'); //全选 } else { this_node.find('.func').addClass('notall'); //部分选择 } }); //提交权限 $(document).on('click' , '#permissionSubmitBtn' , function (e) { e.preventDefault(); var data = { roleId : self.config.roleId , privilegeArr : [], _token : self.token }; var $active = $('.func-opt-row .active'); var len = $active.length; for ( var i = 0 ; i < len ; i ++ ) { data.privilegeArr.push($active.eq(i).data('id')); } var url = Param.uri.updatePermission; $.post(url , data , function (ret) { if ( ret.code != 0 ) { tips.error(ret.msg); return; } tips.success(ret.msg); $('#permissionBody').empty(); $('#permissionModal').modal('hide'); }); }); } , delData : function (ids) { var self = this; var data = { ids : ids, _token : self.token }; sure.init('是否删除?' , function () { $.post(Param.uri.destroy , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if ( res.code != 0 ) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); } }); }); } , //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query , '' , uri); $('#dataGrid').TableGrid({ uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function (row) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function (rows , settings) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if ( oldUri == uri ) { return false; } var params = $.getUrlParams(window.location.href); history.pushState(params , '' , oldUri); history.replaceState(settings.param , '' , uri); } }); } , //将下级权限置为可查看 setSubOptCheck : function (this_node) { var self_tree = this_node.parent('.func-tree'); var _sub_func_node = self_tree.find('.sub-permission .func-node'); _sub_func_node.each(function () { var self_sub_func_node = $(this); $(this).find('.func-opt').each(function () { if ( $(this).html().indexOf('查看') > 0 ) { self_sub_func_node.find('.func').removeClass('active notall disabled').addClass('notall'); $(this).removeClass('active notall disabled').addClass('active'); var self_sub_func_opt_i = $(this).find('i'); self_sub_func_opt_i.removeClass('fa-square-o').addClass('fa-check-square-o'); } }); }); } , //将下级权限置为全不选 setSubOptDisabled : function (this_node) { var self_tree = this_node.parent('.func-tree'); var _sub_func_node = self_tree.find('.sub-permission .func-node'); _sub_func_node.each(function () { $(this).find('.func').removeClass('active notall disabled').addClass('disabled'); $(this).find('.func-opt').removeClass('active notall disabled').addClass('disabled'); $(this).find('.func-opt > i').removeClass('fa-check-square-o').addClass('fa-square-o'); }); } , //初始化 initPermission : function (privilegeData) { $('.func').addClass('disabled'); $('.func-opt').addClass('disabled'); for ( var i = 0 ; i < privilegeData.length ; i ++ ) { $obj = $('.func-opt[data-id="' + privilegeData[i].privilege_id + '"]'); $obj.removeClass('disabled').addClass('active'); $obj.find('i').removeClass('fa-square-o').addClass('fa-check-square-o'); } $('.func-node').each(function (index) { var func_id = $(this).data('id'); var total_len = $(this).find('.func-opt').length; var active_len = $(this).find('.active').length; if ( total_len == active_len ) { $(this).find('.func').removeClass('disabled').addClass('active'); } else if ( total_len > active_len && active_len > 0 ) { $(this).find('.func').removeClass('disabled').addClass('notall'); } }); } , }; //pop state 事件 window.onpopstate = function (event) { if ( event && event.state ) { $('#searchForm').reloadForm(event.state); var $dataGrid = $('#dataGrid'); $dataGrid.TableGrid('setParam' , event.state); $dataGrid.TableGrid('reload'); } }; var optPermission = function (value , row) { return '' + ' 授权'; }; ================================================ FILE: resources/assets/static/js/backend/SysSms.js ================================================ /** * SysSms JS * * @author MR.Z * @version 2.0 , 2016-09-18 */ var SysSms = { token : $('input[name=_token]').val(), config : {} , init : function () { //重新设置菜单 if ( ! empty(Param.uri.menu) ) { Layout.setSidebarMenuActiveLink('set' , 'a[data-uri="' + Param.uri.menu + '"]'); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); } , //初始化查询form initSearchForm : function () { var $searchForm = $('#searchForm'); $searchForm.reloadForm(Param.query); //查询按钮 $('#searchBtn').on('click' , function (e) { e.preventDefault(); var $dataGrid = $('#dataGrid'); var param = $dataGrid.TableGrid('getParam'); param = $.extend({} , param , $('#searchForm').serializeObject()); param.page = 1; $dataGrid.TableGrid('setParam' , param); $dataGrid.TableGrid('reload'); }); } , //显示 modal setPortletShow : function (type) { var $addEditModal = $('#addEditModal'); $addEditModal.modal('show'); if ( type == 'add' ) { $addEditModal.find('.caption-subject').html('新增 ' + Param.pageTitle); } else if ( type == 'edit' ) { $addEditModal.find('.caption-subject').html('编辑 ' + Param.pageTitle); } } , //关闭 modal setPortletHide : function () { $('#addEditModal').modal('hide'); } , //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $('#addNewBtn').on('click' , function (e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm(Param.defaultRow); $form.attr('action' , Param.uri.insert); }); //编辑按钮 $(document).on('click' , '.editBtn' , function (e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#dataGrid').TableGrid('getRow' , id); var $form = $('#addEditForm'); $form.reloadForm(row); $form.attr('action' , Param.uri.update +'/' + row.id); }); //删除一行 $(document).on('click' , '.destroyBtn' , function (e) { e.preventDefault(); var id = $(this).data('id'); self.delData(id); }); $('#destroySelectBtn').on('click' , function (e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if ( empty(ids) ) { tips.error('请选择要删除的记录'); return; } self.delData(ids); }); //提交添加编辑窗 $('#submitFormBtn').on('click' , function (e) { e.preventDefault(); var $form = $('#addEditForm'); if ( $form.validForm() ) { var data = $form.serializeObject(); data._token = self.token; $.post($form.attr('action') , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if ( res.code != 0 ) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); self.setPortletHide(); } }); } }); //关闭添加编辑窗 $('#closePortletBtn').on('click' , function (e) { e.preventDefault(); self.setPortletHide(); }); } , delData : function (ids) { var self = this; var data = { ids : ids , _token : this.token, }; sure.init('是否删除?' , function () { $.post(Param.uri.destroy , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if ( res.code != 0 ) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); } }); }); } , //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query , '' , uri); $('#dataGrid').TableGrid({ uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function (row) { if ( row.status == -1 ) { return 'warning'; } if ( row.status == 0 ) { return 'info'; } } , loadSuccess : function (rows , settings) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if ( oldUri == uri ) { return false; } var params = $.getUrlParams(window.location.href); history.pushState(params , '' , oldUri); history.replaceState(settings.param , '' , uri); } }); } }; //pop state 事件 window.onpopstate = function (event) { if ( event && event.state ) { $('#searchForm').reloadForm(event.state); var $dataGrid = $('#dataGrid'); $dataGrid.TableGrid('setParam' , event.state); $dataGrid.TableGrid('reload'); } }; var statusColor = {"-1" : 'default' , "0" : 'primary' , "1" : 'danger'}; var formatStatus = function (value) { return '' + Param.status[value] + ''; }; var typeColor = {captcha : 'default'}; var formatType = function (value , row) { return '' + Param.type[value] + ''; }; ================================================ FILE: resources/assets/static/js/backend/SysUser.js ================================================ /** * SysUser JS * * @author MR.Z * @version 2.0 , 2016-09-27 */ var SysUser = { token: $('input[name=_token]').val(), init: function() { //重新设置菜单 if (!empty(Param.uri.menu)) { Layout.setSidebarMenuActiveLink('set', 'a[data-uri="' + Param.uri.menu + '"]'); } //初始化ajax 提示框 loading.initAjax(); this.initBtn(); this.initSearchForm(); this.initGrid(); }, //初始化查询form initSearchForm: function() { var $searchForm = $('#searchForm'); $searchForm.reloadForm(Param.query); //点击查询按钮 $('#searchBtn').on('click', function(e) { e.preventDefault(); var $dataGrid = $('#dataGrid'); var param = $dataGrid.TableGrid('getParam'); param.keyword = $.trim($('#keyword').val()); param.status = $('#status').val(); param.page = 1; //console.log( param ); $dataGrid.TableGrid('setParam', param); $dataGrid.TableGrid('reload'); }); }, //显示 portlet setPortletShow: function(type) { var $tablePortlet = $('#tablePortlet'); var $addEditPortlet = $('#addEditPortlet'); $tablePortlet.slideUp('fast'); if (type == 'add') { if (!$addEditPortlet.hasClass('red')) { $addEditPortlet.removeClass('green-meadow').addClass('red'); } $addEditPortlet.find('.caption-title').html('新建' + Param.pageTitle); } else if (type == 'edit') { if (!$addEditPortlet.hasClass('green-meadow')) { $addEditPortlet.removeClass('red').addClass('green-meadow'); } $addEditPortlet.find('.caption-title').html('编辑' + Param.pageTitle); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); }, //关闭 portlet setPortletHide: function() { $('#tablePortlet').slideDown('fast'); $('#addEditPortlet').slideUp('fast'); }, //初始化各种按钮 initBtn: function() { var self = this; //打开添加框 $('#addNewBtn').on('click', function(e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm(Param.defaultRow); setImgPreview.clear('icon'); $form.attr('action', Param.uri.insert); }); //编辑按钮 $(document).on('click', '.editBtn', function(e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#dataGrid').TableGrid('getRow', id); var $form = $('#addEditForm'); $form.reloadForm(row); setImgPreview.set('icon', row.icon); //console.log( row.roles ); $.each(row.roles, function(index, item) { $('input[name="roles[]"][value="' + item.role_id + '"]').prop('checked', true); }); $form.attr('action', Param.uri.update + '/' + row.id); }); //删除一行 $(document).on('click', '.destroyBtn', function(e) { e.preventDefault(); var id = $(this).data('id'); self.delData(id); }); $('#destroySelectBtn').on('click', function(e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if (empty(ids)) { tips.error('请选择要删除的记录'); return; } self.delData(ids); }); //提交添加编辑窗 $('#submitFormBtn').on('click', function(e) { e.preventDefault(); var $form = $('#addEditForm'); if ($form.validForm()) { var data = $form.serializeObject(); data._token = self.token; $.post($form.attr('action'), data) .fail(function(res) { tips.error(res.responseText); }) .done(function(res) { if (res.code == 401) { //需要登录 tips.error('请先登录'); } else if (res.code != 0) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); self.setPortletHide(); } }); } }); //关闭添加编辑窗 $('#closePortletBtn').on('click', function(e) { e.preventDefault(); self.setPortletHide(); }); //上传按钮 $('#iconUploadBtn').Uploader({ uri: Param.uri.upload, //上传文件 param: Param.uploadParam, album: true, albumUri: Param.uri.album, albumCatalogUri: Param.uri.albumCatalog, albumParam: Param.albumParam, onSuccess: function(ret) { tips.success(ret.msg); if (ret.code == 0) { setImgPreview.set('icon', ret.data.uri); } }, onChooseAlbum: function(uri) { setImgPreview.set('icon', uri); } }); //密码重置 $(document).on('click', '.reset-pwd-btn', function(e) { e.preventDefault(); var id = $(this).data('id'); sure.init('将密码重置为 ' + Param.defaultPwd + " ?", function() { $.get(Param.uri.resetPwd + '/' + id, function(ret) { if (ret.code != 0) { tips.error(ret.msg); return; } tips.success('重置成功'); }); }); }); }, delData: function(ids) { var data = { ids: ids, _token: this.token }; sure.init('是否删除?', function() { $.post(Param.uri.destroy, data) .fail(function(res) { tips(res.responseText); }) .done(function(res) { if (res.code == 401) { //需要登录 tips.error('请先登录'); } else if (res.code != 0) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); } }); }); }, //初始化grid initGrid: function() { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query, '', uri); //console.log( uri ); $('#dataGrid').TableGrid({ uri: Param.uri.read, selectAll: false, param: Param.query, rowStyle: function(row) { if (row.status == 0) { return 'warning'; } }, loadSuccess: function(rows, settings) { var old_uri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if (old_uri == uri) { return false; } var params = $.getUrlParams(window.location.href); history.pushState(params, '', old_uri); history.replaceState(settings.param, '', uri); } }); } }; //pop state 事件 window.onpopstate = function(event) { if (event && event.state) { $('#searchForm').reloadForm(event.state); var $dataGrid = $('#data_grid'); $dataGrid.TableGrid('setParam', event.state); $dataGrid.TableGrid('reload'); } }; var formatUsername = function(value, row) { var html = value + '
'; $.each(row.roles, function(index, role) { html += '' + role.role_name + ''; }); return html; }; var optResetPwd = function(value, row) { return '' + ' 重置密码'; }; var formatTest = function(value) { var data = ['否', '是']; return '' + data[value] + ''; }; ================================================ FILE: resources/assets/static/js/global/app.js ================================================ /** Core script to handle the entire theme and core functions **/ var App = function () { // IE mode var isRTL = false; var isIE8 = false; var isIE9 = false; var isIE10 = false; var resizeHandlers = []; var assetsPath = '../assets/'; var globalImgPath = 'static/themes/global/img/'; var globalPluginsPath = 'global/plugins/'; var globalCssPath = 'global/css/'; // theme layout color set var brandColors = { 'blue' : '#89C4F4' , 'red' : '#F3565D' , 'green' : '#1bbc9b' , 'purple' : '#9b59b6' , 'grey' : '#95a5a6' , 'yellow' : '#F8CB00' }; // initializes main settings var handleInit = function () { if ( $('body').css('direction') === 'rtl' ) { isRTL = true; } isIE8 = ! ! navigator.userAgent.match(/MSIE 8.0/); isIE9 = ! ! navigator.userAgent.match(/MSIE 9.0/); isIE10 = ! ! navigator.userAgent.match(/MSIE 10.0/); if ( isIE10 ) { $('html').addClass('ie10'); // detect IE10 version } if ( isIE10 || isIE9 || isIE8 ) { $('html').addClass('ie'); // detect IE10 version } }; // runs callback functions set by App.addResponsiveHandler(). var _runResizeHandlers = function () { // reinitialize other subscribed elements for ( var i = 0 ; i < resizeHandlers.length ; i ++ ) { var each = resizeHandlers[i]; each.call(); } }; // handle the layout reinitialization on window resize var handleOnResize = function () { var resize; if ( isIE8 ) { var currheight; $(window).resize(function () { if ( currheight == document.documentElement.clientHeight ) { return; //quite event since only body resized not window. } if ( resize ) { clearTimeout(resize); } resize = setTimeout(function () { _runResizeHandlers(); } , 50); // wait 50ms until window resize finishes. currheight = document.documentElement.clientHeight; // store last body client height }); } else { $(window).resize(function () { if ( resize ) { clearTimeout(resize); } resize = setTimeout(function () { _runResizeHandlers(); } , 50); // wait 50ms until window resize finishes. }); } }; // Handles portlet tools & actions var handlePortletTools = function () { // handle portlet remove $('body').on('click' , '.portlet > .portlet-title > .tools > a.remove' , function (e) { e.preventDefault(); var portlet = $(this).closest(".portlet"); if ( $('body').hasClass('page-portlet-fullscreen') ) { $('body').removeClass('page-portlet-fullscreen'); } portlet.find('.portlet-title .fullscreen').tooltip('destroy'); portlet.find('.portlet-title > .tools > .reload').tooltip('destroy'); portlet.find('.portlet-title > .tools > .remove').tooltip('destroy'); portlet.find('.portlet-title > .tools > .config').tooltip('destroy'); portlet.find('.portlet-title > .tools > .collapse, .portlet > .portlet-title > .tools > .expand').tooltip('destroy'); portlet.remove(); }); // handle portlet fullscreen $('body').on('click' , '.portlet > .portlet-title .fullscreen' , function (e) { e.preventDefault(); var portlet = $(this).closest(".portlet"); if ( portlet.hasClass('portlet-fullscreen') ) { $(this).removeClass('on'); portlet.removeClass('portlet-fullscreen'); $('body').removeClass('page-portlet-fullscreen'); portlet.children('.portlet-body').css('height' , 'auto'); } else { var height = App.getViewPort().height - portlet.children('.portlet-title').outerHeight() - parseInt(portlet.children('.portlet-body').css('padding-top')) - parseInt(portlet.children('.portlet-body').css('padding-bottom')); $(this).addClass('on'); portlet.addClass('portlet-fullscreen'); $('body').addClass('page-portlet-fullscreen'); portlet.children('.portlet-body').css('height' , height); } }); $('body').on('click' , '.portlet > .portlet-title > .tools > a.reload' , function (e) { e.preventDefault(); var el = $(this).closest(".portlet").children(".portlet-body"); var url = $(this).attr("data-url"); var error = $(this).attr("data-error-display"); if ( url ) { App.blockUI({ target : el , animate : true , overlayColor : 'none' }); $.ajax({ type : "GET" , cache : false , url : url , dataType : "html" , success : function (res) { App.unblockUI(el); el.html(res); App.initAjax() // reinitialize elements & plugins for newly loaded content } , error : function (xhr , ajaxOptions , thrownError) { App.unblockUI(el); var msg = 'Error on reloading the content. Please check your connection and try again.'; if ( error == "toastr" && toastr ) { toastr.error(msg); } else if ( error == "notific8" && $.notific8 ) { $.notific8('zindex' , 11500); $.notific8(msg , { theme : 'ruby' , life : 3000 }); } else { alert(msg); } } }); } else { // for demo purpose App.blockUI({ target : el , animate : true , overlayColor : 'none' }); window.setTimeout(function () { App.unblockUI(el); } , 1000); } }); // load ajax data on page init $('.portlet .portlet-title a.reload[data-load="true"]').click(); $('body').on('click' , '.portlet > .portlet-title > .tools > .collapse, .portlet .portlet-title > .tools > .expand' , function (e) { e.preventDefault(); var el = $(this).closest(".portlet").children(".portlet-body"); if ( $(this).hasClass("collapse") ) { $(this).removeClass("collapse").addClass("expand"); el.slideUp(200); } else { $(this).removeClass("expand").addClass("collapse"); el.slideDown(200); } }); }; // Handlesmaterial design checkboxes var handleMaterialDesign = function () { // Material design ckeckbox and radio effects $('body').on('click' , '.md-checkbox > label, .md-radio > label' , function () { var the = $(this); // find the first span which is our circle/bubble var el = $(this).children('span:first-child'); // add the bubble class (we do this so it doesnt show on page load) el.addClass('inc'); // clone it var newone = el.clone(true); // add the cloned version before our original el.before(newone); // remove the original so that it is ready to run on next click $("." + el.attr("class") + ":last" , the).remove(); }); if ( $('body').hasClass('page-md') ) { // Material design click effect // credit where credit's due; http://thecodeplayer.com/walkthrough/ripple-click-effect-google-material-design // var element , circle , d , x , y; $('body').on('click' , 'a.btn, button.btn, input.btn, label.btn' , function (e) { element = $(this); if ( element.find(".md-click-circle").length == 0 ) { element.prepend(""); } circle = element.find(".md-click-circle"); circle.removeClass("md-click-animate"); if ( ! circle.height() && ! circle.width() ) { d = Math.max(element.outerWidth() , element.outerHeight()); circle.css({height : d , width : d}); } x = e.pageX - element.offset().left - circle.width() / 2; y = e.pageY - element.offset().top - circle.height() / 2; circle.css({top : y + 'px' , left : x + 'px'}).addClass("md-click-animate"); setTimeout(function () { circle.remove(); } , 1000); }); } // Floating labels var handleInput = function (el) { if ( el.val() != "" ) { el.addClass('edited'); } else { el.removeClass('edited'); } } $('body').on('keydown' , '.form-md-floating-label .form-control' , function (e) { handleInput($(this)); }); $('body').on('blur' , '.form-md-floating-label .form-control' , function (e) { handleInput($(this)); }); $('.form-md-floating-label .form-control').each(function () { if ( $(this).val().length > 0 ) { $(this).addClass('edited'); } }); } // Handles custom checkboxes & radios using jQuery iCheck plugin var handleiCheck = function () { if ( ! $().iCheck ) { return; } $('.icheck').each(function () { var checkboxClass = $(this).attr('data-checkbox') ? $(this).attr('data-checkbox') : 'icheckbox_minimal-grey'; var radioClass = $(this).attr('data-radio') ? $(this).attr('data-radio') : 'iradio_minimal-grey'; if ( checkboxClass.indexOf('_line') > - 1 || radioClass.indexOf('_line') > - 1 ) { $(this).iCheck({ checkboxClass : checkboxClass , radioClass : radioClass , insert : '
' + $(this).attr("data-label") }); } else { $(this).iCheck({ checkboxClass : checkboxClass , radioClass : radioClass }); } }); }; // Handles Bootstrap switches var handleBootstrapSwitch = function () { if ( ! $().bootstrapSwitch ) { return; } $('.make-switch').bootstrapSwitch(); }; // Handles Bootstrap confirmations var handleBootstrapConfirmation = function () { if ( ! $().confirmation ) { return; } $('[data-toggle=confirmation]').confirmation({ btnOkClass : 'btn btn-sm btn-success' , btnCancelClass : 'btn btn-sm btn-danger' }); } // Handles Bootstrap Accordions. var handleAccordions = function () { $('body').on('shown.bs.collapse' , '.accordion.scrollable' , function (e) { App.scrollTo($(e.target)); }); }; // Handles Bootstrap Tabs. var handleTabs = function () { //activate tab if tab id provided in the URL if ( location.hash ) { var tabid = encodeURI(location.hash.substr(1)); $('a[href="#' + tabid + '"]').parents('.tab-pane:hidden').each(function () { var tabid = $(this).attr("id"); $('a[href="#' + tabid + '"]').click(); }); $('a[href="#' + tabid + '"]').click(); } if ( $().tabdrop ) { $('.tabbable-tabdrop .nav-pills, .tabbable-tabdrop .nav-tabs').tabdrop({ text : ' ' }); } }; // Handles Bootstrap Modals. var handleModals = function () { // fix stackable modal issue: when 2 or more modals opened, closing one of modal will remove .modal-open class. $('body').on('hide.bs.modal' , function () { if ( $('.modal:visible').length > 1 && $('html').hasClass('modal-open') === false ) { $('html').addClass('modal-open'); } else if ( $('.modal:visible').length <= 1 ) { $('html').removeClass('modal-open'); } }); // fix page scrollbars issue $('body').on('show.bs.modal' , '.modal' , function () { if ( $(this).hasClass("modal-scroll") ) { $('body').addClass("modal-open-noscroll"); } }); // fix page scrollbars issue $('body').on('hidden.bs.modal' , '.modal' , function () { $('body').removeClass("modal-open-noscroll"); }); // remove ajax content and remove cache on modal closed $('body').on('hidden.bs.modal' , '.modal:not(.modal-cached)' , function () { $(this).removeData('bs.modal'); }); }; // Handles Bootstrap Tooltips. var handleTooltips = function () { // global tooltips $('.tooltips').tooltip(); // portlet tooltips $('.portlet > .portlet-title .fullscreen').tooltip({ trigger : 'hover' , container : 'body' , title : 'Fullscreen' }); $('.portlet > .portlet-title > .tools > .reload').tooltip({ trigger : 'hover' , container : 'body' , title : 'Reload' }); $('.portlet > .portlet-title > .tools > .remove').tooltip({ trigger : 'hover' , container : 'body' , title : 'Remove' }); $('.portlet > .portlet-title > .tools > .config').tooltip({ trigger : 'hover' , container : 'body' , title : 'Settings' }); $('.portlet > .portlet-title > .tools > .collapse, .portlet > .portlet-title > .tools > .expand').tooltip({ trigger : 'hover' , container : 'body' , title : 'Collapse/Expand' }); }; // Handles Bootstrap Dropdowns var handleDropdowns = function () { /* Hold dropdown on click */ $('body').on('click' , '.dropdown-menu.hold-on-click' , function (e) { e.stopPropagation(); }); }; var handleAlerts = function () { $('body').on('click' , '[data-close="alert"]' , function (e) { $(this).parent('.alert').hide(); $(this).closest('.note').hide(); e.preventDefault(); }); $('body').on('click' , '[data-close="note"]' , function (e) { $(this).closest('.note').hide(); e.preventDefault(); }); $('body').on('click' , '[data-remove="note"]' , function (e) { $(this).closest('.note').remove(); e.preventDefault(); }); }; // Handle Hower Dropdowns var handleDropdownHover = function () { $('[data-hover="dropdown"]').not('.hover-initialized').each(function () { $(this).dropdownHover(); $(this).addClass('hover-initialized'); }); }; // Handle textarea autosize var handleTextareaAutosize = function () { if ( typeof(autosize) == "function" ) { autosize(document.querySelector('textarea.autosizeme')); } } // Handles Bootstrap Popovers // last popep popover var lastPopedPopover; var handlePopovers = function () { $('.popovers').popover(); // close last displayed popover $(document).on('click.bs.popover.data-api' , function (e) { if ( lastPopedPopover ) { lastPopedPopover.popover('hide'); } }); }; // Handles scrollable contents using jQuery SlimScroll plugin. var handleScrollers = function () { App.initSlimScroll('.scroller'); }; // Handles Image Preview using jQuery Fancybox plugin var handleFancybox = function () { if ( ! jQuery.fancybox ) { return; } if ( $(".fancybox-button").length > 0 ) { $(".fancybox-button").fancybox({ groupAttr : 'data-rel' , prevEffect : 'none' , nextEffect : 'none' , closeBtn : true , helpers : { title : { type : 'inside' } } }); } }; // Handles counterup plugin wrapper var handleCounterup = function () { if ( ! $().counterUp ) { return; } $("[data-counter='counterup']").counterUp({ delay : 10 , time : 1000 }); }; // Fix input placeholder issue for IE8 and IE9 var handleFixInputPlaceholderForIE = function () { //fix html5 placeholder attribute for ie7 & ie8 if ( isIE8 || isIE9 ) { // ie8 & ie9 // this is html5 placeholder fix for inputs, inputs with placeholder-no-fix class will be skipped(e.g: we need // this for password fields) $('input[placeholder]:not(.placeholder-no-fix), textarea[placeholder]:not(.placeholder-no-fix)').each(function () { var input = $(this); if ( input.val() === '' && input.attr("placeholder") !== '' ) { input.addClass("placeholder").val(input.attr('placeholder')); } input.focus(function () { if ( input.val() == input.attr('placeholder') ) { input.val(''); } }); input.blur(function () { if ( input.val() === '' || input.val() == input.attr('placeholder') ) { input.val(input.attr('placeholder')); } }); }); } }; // Handle Select2 Dropdowns var handleSelect2 = function () { if ( $().select2 ) { $.fn.select2.defaults.set("theme" , "bootstrap"); $('.select2me').select2({ placeholder : "Select" , width : 'auto' , allowClear : true }); } }; // handle group element heights var handleHeight = function () { $('[data-auto-height]').each(function () { var parent = $(this); var items = $('[data-height]' , parent); var height = 0; var mode = parent.attr('data-mode'); var offset = parseInt(parent.attr('data-offset') ? parent.attr('data-offset') : 0); items.each(function () { if ( $(this).attr('data-height') == "height" ) { $(this).css('height' , ''); } else { $(this).css('min-height' , ''); } var height_ = (mode == 'base-height' ? $(this).outerHeight() : $(this).outerHeight(true)); if ( height_ > height ) { height = height_; } }); height = height + offset; items.each(function () { if ( $(this).attr('data-height') == "height" ) { $(this).css('height' , height); } else { $(this).css('min-height' , height); } }); if ( parent.attr('data-related') ) { $(parent.attr('data-related')).css('height' , parent.height()); } }); } //* END:CORE HANDLERS *// return { //main function to initiate the theme init : function () { //IMPORTANT!!!: Do not modify the core handlers call order. //Core handlers handleInit(); // initialize core variables handleOnResize(); // set and handle responsive //UI Component handlers handleMaterialDesign(); // handle material design handleiCheck(); // handles custom icheck radio and checkboxes handleBootstrapSwitch(); // handle bootstrap switch plugin handleScrollers(); // handles slim scrolling contents handleFancybox(); // handle fancy box handleSelect2(); // handle custom Select2 dropdowns handlePortletTools(); // handles portlet action bar functionality(refresh, configure, toggle, remove) handleAlerts(); //handle closabled alerts handleDropdowns(); // handle dropdowns handleTabs(); // handle tabs handleTooltips(); // handle bootstrap tooltips handlePopovers(); // handles bootstrap popovers handleAccordions(); //handles accordions handleModals(); // handle modals handleBootstrapConfirmation(); // handle bootstrap confirmations handleTextareaAutosize(); // handle autosize textareas handleCounterup(); // handle counterup instances //Handle group element heights this.addResizeHandler(handleHeight); // handle auto calculating height on window resize // Hacks handleFixInputPlaceholderForIE(); //IE8 & IE9 input placeholder issue fix } , //main function to initiate core javascript after ajax complete initAjax : function () { //handleUniform(); // handles custom radio & checkboxes handleiCheck(); // handles custom icheck radio and checkboxes handleBootstrapSwitch(); // handle bootstrap switch plugin handleDropdownHover(); // handles dropdown hover handleScrollers(); // handles slim scrolling contents handleSelect2(); // handle custom Select2 dropdowns handleFancybox(); // handle fancy box handleDropdowns(); // handle dropdowns handleTooltips(); // handle bootstrap tooltips handlePopovers(); // handles bootstrap popovers handleAccordions(); //handles accordions handleBootstrapConfirmation(); // handle bootstrap confirmations } , //init main components initComponents : function () { this.initAjax(); } , //public function to remember last opened popover that needs to be closed on click setLastPopedPopover : function (el) { lastPopedPopover = el; } , //public function to add callback a function which will be called on window resize addResizeHandler : function (func) { resizeHandlers.push(func); } , //public functon to call _runresizeHandlers runResizeHandlers : function () { _runResizeHandlers(); } , // wrApper function to scroll(focus) to an element scrollTo : function (el , offeset) { var pos = (el && el.length > 0) ? el.offset().top : 0; if ( el ) { if ( $('body').hasClass('page-header-fixed') ) { pos = pos - $('.page-header').height(); } else if ( $('body').hasClass('page-header-top-fixed') ) { pos = pos - $('.page-header-top').height(); } else if ( $('body').hasClass('page-header-menu-fixed') ) { pos = pos - $('.page-header-menu').height(); } pos = pos + (offeset ? offeset : - 1 * el.height()); } $('html,body').animate({ scrollTop : pos } , 'slow'); } , initSlimScroll : function (el) { if ( ! $().slimScroll ) { return; } $(el).each(function () { if ( $(this).attr("data-initialized") ) { return; // exit } var height; if ( $(this).attr("data-height") ) { height = $(this).attr("data-height"); } else { height = $(this).css('height'); } $(this).slimScroll({ allowPageScroll : true , // allow page scroll when the element scroll is ended size : '7px' , color : ($(this).attr("data-handle-color") ? $(this).attr("data-handle-color") : '#bbb') , wrapperClass : ($(this).attr("data-wrapper-class") ? $(this).attr("data-wrapper-class") : 'slimScrollDiv') , railColor : ($(this).attr("data-rail-color") ? $(this).attr("data-rail-color") : '#eaeaea') , position : isRTL ? 'left' : 'right' , height : height , alwaysVisible : ($(this).attr("data-always-visible") == "1" ? true : false) , railVisible : ($(this).attr("data-rail-visible") == "1" ? true : false) , disableFadeOut : true }); $(this).attr("data-initialized" , "1"); }); } , destroySlimScroll : function (el) { if ( ! $().slimScroll ) { return; } $(el).each(function () { if ( $(this).attr("data-initialized") === "1" ) { // destroy existing instance before updating the height $(this).removeAttr("data-initialized"); $(this).removeAttr("style"); var attrList = {}; // store the custom attribures so later we will reassign. if ( $(this).attr("data-handle-color") ) { attrList["data-handle-color"] = $(this).attr("data-handle-color"); } if ( $(this).attr("data-wrapper-class") ) { attrList["data-wrapper-class"] = $(this).attr("data-wrapper-class"); } if ( $(this).attr("data-rail-color") ) { attrList["data-rail-color"] = $(this).attr("data-rail-color"); } if ( $(this).attr("data-always-visible") ) { attrList["data-always-visible"] = $(this).attr("data-always-visible"); } if ( $(this).attr("data-rail-visible") ) { attrList["data-rail-visible"] = $(this).attr("data-rail-visible"); } $(this).slimScroll({ wrapperClass : ($(this).attr("data-wrapper-class") ? $(this).attr("data-wrapper-class") : 'slimScrollDiv') , destroy : true }); var the = $(this); // reassign custom attributes $.each(attrList , function (key , value) { the.attr(key , value); }); } }); } , // function to scroll to the top scrollTop : function () { App.scrollTo(); } , // wrApper function to block element(indicate loading) blockUI : function (options) { options = $.extend(true , {} , options); var html = ''; if ( options.animate ) { html = '
' + '
' + '
'; } else if ( options.iconOnly ) { html = '
'; } else if ( options.textOnly ) { html = '
  ' + (options.message ? options.message : 'LOADING...') + '
'; } else { html = '
  ' + (options.message ? options.message : 'LOADING...') + '
'; } if ( options.target ) { // element blocking var el = $(options.target); if ( el.height() <= ($(window).height()) ) { options.cenrerY = true; } el.block({ message : html , baseZ : options.zIndex ? options.zIndex : 1000 , centerY : options.cenrerY !== undefined ? options.cenrerY : false , css : { top : '10%' , border : '0' , padding : '0' , backgroundColor : 'none' } , overlayCSS : { backgroundColor : options.overlayColor ? options.overlayColor : '#555' , opacity : options.boxed ? 0.05 : 0.1 , cursor : 'wait' } }); } else { // page blocking $.blockUI({ message : html , baseZ : options.zIndex ? options.zIndex : 1000 , css : { border : '0' , padding : '0' , backgroundColor : 'none' } , overlayCSS : { backgroundColor : options.overlayColor ? options.overlayColor : '#555' , opacity : options.boxed ? 0.05 : 0.1 , cursor : 'wait' } }); } } , // wrApper function to un-block element(finish loading) unblockUI : function (target) { if ( target ) { $(target).unblock({ onUnblock : function () { $(target).css('position' , ''); $(target).css('zoom' , ''); } }); } else { $.unblockUI(); } } , startPageLoading : function (options) { if ( options && options.animate ) { $('.page-spinner-bar').remove(); $('body').append('
'); } else { $('.page-loading').remove(); $('body').append('
  ' + (options && options.message ? options.message : 'Loading...') + '
'); } } , stopPageLoading : function () { $('.page-loading, .page-spinner-bar').remove(); } , alert : function (options) { options = $.extend(true , { container : "" , // alerts parent container(by default placed after the page breadcrumbs) place : "append" , // "append" or "prepend" in container type : 'success' , // alert's type message : "" , // alert's message close : true , // make alert closable reset : true , // close all previouse alerts first focus : true , // auto scroll to the alert after shown closeInSeconds : 0 , // auto close after defined seconds icon : "" // put icon before the message } , options); var id = App.getUniqueID("App_alert"); var html = '
' + (options.close ? '' : '') + (options.icon !== "" ? ' ' : '') + options.message + '
'; if ( options.reset ) { $('.custom-alerts').remove(); } if ( ! options.container ) { if ( $('.page-fixed-main-content').length === 1 ) { $('.page-fixed-main-content').prepend(html); } else if ( ($('body').hasClass("page-container-bg-solid") || $('body').hasClass("page-content-white")) && $('.page-head').length === 0 ) { $('.page-title').after(html); } else { if ( $('.page-bar').length > 0 ) { $('.page-bar').after(html); } else { $('.page-breadcrumb, .breadcrumbs').after(html); } } } else { if ( options.place == "append" ) { $(options.container).append(html); } else { $(options.container).prepend(html); } } if ( options.focus ) { App.scrollTo($('#' + id)); } if ( options.closeInSeconds > 0 ) { setTimeout(function () { $('#' + id).remove(); } , options.closeInSeconds * 1000); } return id; } , //public function to initialize the fancybox plugin initFancybox : function () { handleFancybox(); } , //public helper function to get actual input value(used in IE9 and IE8 due to placeholder attribute not supported) getActualVal : function (el) { el = $(el); if ( el.val() === el.attr("placeholder") ) { return ""; } return el.val(); } , //public function to get a paremeter by name from URL getURLParameter : function (paramName) { var searchString = window.location.search.substring(1) , i , val , params = searchString.split("&"); for ( i = 0 ; i < params.length ; i ++ ) { val = params[i].split("="); if ( val[0] == paramName ) { return unescape(val[1]); } } return null; } , // check for device touch support isTouchDevice : function () { try { document.createEvent("TouchEvent"); return true; } catch ( e ) { return false; } } , // To get the correct viewport width based on // http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/ getViewPort : function () { var e = window , a = 'inner'; if ( ! ('innerWidth' in window) ) { a = 'client'; e = document.documentElement || document.body; } return { width : e[a + 'Width'] , height : e[a + 'Height'] }; } , getUniqueID : function (prefix) { return 'prefix_' + Math.floor(Math.random() * (new Date()).getTime()); } , // check IE8 mode isIE8 : function () { return isIE8; } , // check IE9 mode isIE9 : function () { return isIE9; } , //check RTL mode isRTL : function () { return isRTL; } , // check IE8 mode isAngularJsApp : function () { return (typeof angular == 'undefined') ? false : true; } , getAssetsPath : function () { return assetsPath; } , setAssetsPath : function (path) { assetsPath = path; } , setGlobalImgPath : function (path) { globalImgPath = path; } , getGlobalImgPath : function () { return assetsPath + globalImgPath; } , setGlobalPluginsPath : function (path) { globalPluginsPath = path; } , getGlobalPluginsPath : function () { return assetsPath + globalPluginsPath; } , getGlobalCssPath : function () { return assetsPath + globalCssPath; } , // get layout color code by color name getBrandColor : function (name) { if ( brandColors[name] ) { return brandColors[name]; } else { return ''; } } , getResponsiveBreakpoint : function (size) { // bootstrap responsive breakpoints var sizes = { 'xs' : 480 , // extra small 'sm' : 768 , // small 'md' : 992 , // medium 'lg' : 1200 // large }; return sizes[size] ? sizes[size] : 0; } }; }(); jQuery(document).ready(function () { App.init(); // init metronic core componets }); ================================================ FILE: resources/assets/static/js/global/auth.js ================================================ /** * Auth 页面 JS * * @author MR.Z * @version 2.0 2016-09-11 */ var Auth = { initLogin : function () { loading.initAjax(); //背景幻灯片 $.backstretch( Param.bg , { fade : 1000 , duration : 8000 } ); var $loginBtn = $('#loginBtn'); $loginBtn.prop('disabled' , false); var $loginForm = $('.login-form'); $loginForm.reloadForm(Param.defaultData); var $forgetForm = $('.forget-form'); $loginForm.on('submit' , function (e) { e.preventDefault(); var loginData = $(this).serializeObject(); //检查用户信息 if ( $.trim(loginData.userInfo) == '' ) { tips.error('请填写用户名或手机号'); return false; } //检查密码 if ( $.trim(loginData.password) == '' ) { tips.error('请填写密码'); return false; } $loginBtn.prop('disabled' , true); //禁用登录按钮 // Send the data using post $.post(Param.uri.doLogin , loginData) .fail(function (error) { //ajax出现错误 $loginBtn.prop('disabled' , false); tips.error('发送错误了'); console.log(error); }) .done(function (res) { //ajax返回 if ( res.code === 0 ) { //返回成功 tips.success(res.msg , function () { window.location.href = Param.uri.redirect; }); return true; } $loginBtn.prop('disabled' , false); tips.error(res.msg); }); }); //点击忘记密码 $('#forget-password').on('click' , function (e) { e.preventDefault(); $loginForm.hide(); $forgetForm.show(); }); //返回登录页面 $('#back-btn').on('click' , function(e){ e.preventDefault(); $loginForm.show(); $forgetForm.hide(); }); $forgetForm.on('submit' , function(e){ e.preventDefault(); tips.success('邮件已经发送,请根据提示进行下一步操作' , function () { $loginForm.show(); $forgetForm.hide(); }); }); } }; ================================================ FILE: resources/assets/static/js/global/layout.js ================================================ /** Core script to handle the entire theme and core functions **/ var Layout = function () { var layoutImgPath = 'layouts/layout/img/'; var layoutCssPath = 'layouts/layout/css/'; var resBreakpointMd = App.getResponsiveBreakpoint('md'); //* BEGIN:CORE HANDLERS *// // this function handles responsive layout on screen size resize or mobile device rotate. // Set proper height for sidebar and content. The content and sidebar height must be synced always. var handleSidebarAndContentHeight = function () { var content = $('.page-content'); var sidebar = $('.page-sidebar'); var body = $('body'); var height; if ( body.hasClass("page-footer-fixed") === true && body.hasClass("page-sidebar-fixed") === false ) { var available_height = App.getViewPort().height - $('.page-footer').outerHeight() - $('.page-header').outerHeight(); if ( content.height() < available_height ) { content.attr('style' , 'min-height:' + available_height + 'px'); } } else { if ( body.hasClass('page-sidebar-fixed') ) { height = _calculateFixedSidebarViewportHeight(); if ( body.hasClass('page-footer-fixed') === false ) { height = height - $('.page-footer').outerHeight(); } } else { var headerHeight = $('.page-header').outerHeight(); var footerHeight = $('.page-footer').outerHeight(); if ( App.getViewPort().width < resBreakpointMd ) { height = App.getViewPort().height - headerHeight - footerHeight; } else { height = sidebar.height() + 20; } if ( (height + headerHeight + footerHeight) <= App.getViewPort().height ) { height = App.getViewPort().height - headerHeight - footerHeight; } } content.attr('style' , 'min-height:' + height + 'px'); } }; // Handle sidebar menu links var handleSidebarMenuActiveLink = function (mode , el) { var url = location.hash.toLowerCase(); var menu = $('.page-sidebar-menu'); if ( mode === 'click' || mode === 'set' ) { el = $(el); } else if ( mode === 'match' ) { menu.find("li > a").each(function () { var path = $(this).attr("href").toLowerCase(); // url match condition if ( path.length > 1 && url.substr(1 , path.length - 1) == path.substr(1) ) { el = $(this); return; } }); } if ( ! el || el.length == 0 ) { return; } if ( el.attr('href').toLowerCase() === 'javascript:;' || el.attr('href').toLowerCase() === '#' ) { return; } var slideSpeed = parseInt(menu.data("slide-speed")); var keepExpand = menu.data("keep-expanded"); // begin: handle active state if ( menu.hasClass('page-sidebar-menu-hover-submenu') === false ) { menu.find('li.nav-item.open').each(function () { var match = false; $(this).find('li').each(function () { if ( $(this).find(' > a').attr('href') === el.attr('href') ) { match = true; return; } }); if ( match === true ) { return; } $(this).removeClass('open'); $(this).find('> a > .arrow.open').removeClass('open'); $(this).find('> .sub-menu').slideUp(); }); } else { menu.find('li.open').removeClass('open'); } menu.find('li.active').removeClass('active'); menu.find('li > a > .selected').remove(); // end: handle active state el.parents('li').each(function () { $(this).addClass('active'); $(this).find('> a > span.arrow').addClass('open'); if ( $(this).parent('ul.page-sidebar-menu').length === 1 ) { $(this).find('> a').append(''); } if ( $(this).children('ul.sub-menu').length === 1 ) { $(this).addClass('open'); } }); if ( mode === 'click' ) { if ( App.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass("in") ) { // close the menu on mobile view while laoding a page $('.page-header .responsive-toggler').click(); } } }; // Handle sidebar menu var handleSidebarMenu = function () { // handle sidebar link click $('.page-sidebar-menu').on('click' , 'li > a.nav-toggle, li > a > span.nav-toggle' , function (e) { var that = $(this).closest('.nav-item').children('.nav-link'); if ( App.getViewPort().width >= resBreakpointMd && ! $('.page-sidebar-menu').attr("data-initialized") && $('body').hasClass('page-sidebar-closed') && that.parent('li').parent('.page-sidebar-menu').length === 1 ) { return; } var hasSubMenu = that.next().hasClass('sub-menu'); if ( App.getViewPort().width >= resBreakpointMd && that.parents('.page-sidebar-menu-hover-submenu').length === 1 ) { // exit of hover sidebar menu return; } if ( hasSubMenu === false ) { if ( App.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass("in") ) { // close the menu on mobile view while laoding a page $('.page-header .responsive-toggler').click(); } return; } var parent = that.parent().parent(); var the = that; var menu = $('.page-sidebar-menu'); var sub = that.next(); var autoScroll = menu.data("auto-scroll"); var slideSpeed = parseInt(menu.data("slide-speed")); var keepExpand = menu.data("keep-expanded"); if ( ! keepExpand ) { parent.children('li.open').children('a').children('.arrow').removeClass('open'); parent.children('li.open').children('.sub-menu:not(.always-open)').slideUp(slideSpeed); parent.children('li.open').removeClass('open'); } var slideOffeset = - 200; if ( sub.is(":visible") ) { $('.arrow' , the).removeClass("open"); the.parent().removeClass("open"); sub.slideUp(slideSpeed , function () { if ( autoScroll === true && $('body').hasClass('page-sidebar-closed') === false ) { if ( $('body').hasClass('page-sidebar-fixed') ) { menu.slimScroll({ 'scrollTo' : (the.position()).top }); } else { App.scrollTo(the , slideOffeset); } } handleSidebarAndContentHeight(); }); } else if ( hasSubMenu ) { $('.arrow' , the).addClass("open"); the.parent().addClass("open"); sub.slideDown(slideSpeed , function () { if ( autoScroll === true && $('body').hasClass('page-sidebar-closed') === false ) { if ( $('body').hasClass('page-sidebar-fixed') ) { menu.slimScroll({ 'scrollTo' : (the.position()).top }); } else { App.scrollTo(the , slideOffeset); } } handleSidebarAndContentHeight(); }); } e.preventDefault(); }); // handle menu close for angularjs version if ( App.isAngularJsApp() ) { $(".page-sidebar-menu li > a").on("click" , function (e) { if ( App.getViewPort().width < resBreakpointMd && $(this).next().hasClass('sub-menu') === false ) { $('.page-header .responsive-toggler').click(); } }); } // handle ajax links within sidebar menu $('.page-sidebar').on('click' , ' li > a.ajaxify' , function (e) { e.preventDefault(); App.scrollTop(); var url = $(this).attr("href"); var menuContainer = $('.page-sidebar ul'); var pageContent = $('.page-content'); var pageContentBody = $('.page-content .page-content-body'); menuContainer.children('li.active').removeClass('active'); menuContainer.children('arrow.open').removeClass('open'); $(this).parents('li').each(function () { $(this).addClass('active'); $(this).children('a > span.arrow').addClass('open'); }); $(this).parents('li').addClass('active'); if ( App.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass("in") ) { // close the menu on mobile view while laoding a page $('.page-header .responsive-toggler').click(); } App.startPageLoading(); var the = $(this); $.ajax({ type : "GET" , cache : false , url : url , dataType : "html" , success : function (res) { if ( the.parents('li.open').length === 0 ) { $('.page-sidebar-menu > li.open > a').click(); } App.stopPageLoading(); pageContentBody.html(res); Layout.fixContentHeight(); // fix content height App.initAjax(); // initialize core stuff } , error : function (xhr , ajaxOptions , thrownError) { App.stopPageLoading(); pageContentBody.html('

Could not load the requested content.

'); } }); }); // handle ajax link within main content $('.page-content').on('click' , '.ajaxify' , function (e) { e.preventDefault(); App.scrollTop(); var url = $(this).attr("href"); var pageContent = $('.page-content'); var pageContentBody = $('.page-content .page-content-body'); App.startPageLoading(); if ( App.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass("in") ) { // close the menu on mobile view while laoding a page $('.page-header .responsive-toggler').click(); } $.ajax({ type : "GET" , cache : false , url : url , dataType : "html" , success : function (res) { App.stopPageLoading(); pageContentBody.html(res); Layout.fixContentHeight(); // fix content height App.initAjax(); // initialize core stuff } , error : function (xhr , ajaxOptions , thrownError) { pageContentBody.html('

Could not load the requested content.

'); App.stopPageLoading(); } }); }); // handle scrolling to top on responsive menu toggler click when header is fixed for mobile view $(document).on('click' , '.page-header-fixed-mobile .page-header .responsive-toggler' , function () { App.scrollTop(); }); // handle sidebar hover effect handleFixedSidebarHoverEffect(); // handle the search bar close $('.page-sidebar').on('click' , '.sidebar-search .remove' , function (e) { e.preventDefault(); $('.sidebar-search').removeClass("open"); }); // handle the search query submit on enter press $('.page-sidebar .sidebar-search').on('keypress' , 'input.form-control' , function (e) { if ( e.which == 13 ) { $('.sidebar-search').submit(); return false; //<---- Add this line } }); // handle the search submit(for sidebar search and responsive mode of the header search) $('.sidebar-search .submit').on('click' , function (e) { e.preventDefault(); if ( $('body').hasClass("page-sidebar-closed") ) { if ( $('.sidebar-search').hasClass('open') === false ) { if ( $('.page-sidebar-fixed').length === 1 ) { $('.page-sidebar .sidebar-toggler').click(); //trigger sidebar toggle button } $('.sidebar-search').addClass("open"); } else { $('.sidebar-search').submit(); } } else { $('.sidebar-search').submit(); } }); // handle close on body click if ( $('.sidebar-search').length !== 0 ) { $('.sidebar-search .input-group').on('click' , function (e) { e.stopPropagation(); }); $('body').on('click' , function () { if ( $('.sidebar-search').hasClass('open') ) { $('.sidebar-search').removeClass("open"); } }); } }; // Helper function to calculate sidebar height for fixed sidebar layout. var _calculateFixedSidebarViewportHeight = function () { var sidebarHeight = App.getViewPort().height - $('.page-header').outerHeight(true); if ( $('body').hasClass("page-footer-fixed") ) { sidebarHeight = sidebarHeight - $('.page-footer').outerHeight(); } return sidebarHeight; }; // Handles fixed sidebar var handleFixedSidebar = function () { var menu = $('.page-sidebar-menu'); App.destroySlimScroll(menu); if ( $('.page-sidebar-fixed').length === 0 ) { handleSidebarAndContentHeight(); return; } if ( App.getViewPort().width >= resBreakpointMd ) { menu.attr("data-height" , _calculateFixedSidebarViewportHeight()); App.initSlimScroll(menu); handleSidebarAndContentHeight(); } }; // Handles sidebar toggler to close/hide the sidebar. var handleFixedSidebarHoverEffect = function () { var body = $('body'); if ( body.hasClass('page-sidebar-fixed') ) { $('.page-sidebar').on('mouseenter' , function () { if ( body.hasClass('page-sidebar-closed') ) { $(this).find('.page-sidebar-menu').removeClass('page-sidebar-menu-closed'); } }).on('mouseleave' , function () { if ( body.hasClass('page-sidebar-closed') ) { $(this).find('.page-sidebar-menu').addClass('page-sidebar-menu-closed'); } }); } }; // Hanles sidebar toggler var handleSidebarToggler = function () { var body = $('body'); if ( $.cookie && $.cookie('sidebar_closed') === '1' && App.getViewPort().width >= resBreakpointMd ) { $('body').addClass('page-sidebar-closed'); $('.page-sidebar-menu').addClass('page-sidebar-menu-closed'); } // handle sidebar show/hide $('body').on('click' , '.sidebar-toggler' , function (e) { var sidebar = $('.page-sidebar'); var sidebarMenu = $('.page-sidebar-menu'); $(".sidebar-search" , sidebar).removeClass("open"); if ( body.hasClass("page-sidebar-closed") ) { body.removeClass("page-sidebar-closed"); sidebarMenu.removeClass("page-sidebar-menu-closed"); if ( $.cookie ) { $.cookie('sidebar_closed' , '0'); } } else { body.addClass("page-sidebar-closed"); sidebarMenu.addClass("page-sidebar-menu-closed"); if ( body.hasClass("page-sidebar-fixed") ) { sidebarMenu.trigger("mouseleave"); } if ( $.cookie ) { $.cookie('sidebar_closed' , '1'); } } $(window).trigger('resize'); }); }; // Handles the horizontal menu var handleHorizontalMenu = function () { //handle tab click $('.page-header').on('click' , '.hor-menu a[data-toggle="tab"]' , function (e) { e.preventDefault(); var nav = $(".hor-menu .nav"); var active_link = nav.find('li.current'); $('li.active' , active_link).removeClass("active"); $('.selected' , active_link).remove(); var new_link = $(this).parents('li').last(); new_link.addClass("current"); new_link.find("a:first").append(''); }); // handle search box expand/collapse $('.page-header').on('click' , '.search-form' , function (e) { $(this).addClass("open"); $(this).find('.form-control').focus(); $('.page-header .search-form .form-control').on('blur' , function (e) { $(this).closest('.search-form').removeClass("open"); $(this).unbind("blur"); }); }); // handle hor menu search form on enter press $('.page-header').on('keypress' , '.hor-menu .search-form .form-control' , function (e) { if ( e.which == 13 ) { $(this).closest('.search-form').submit(); return false; } }); // handle header search button click $('.page-header').on('mousedown' , '.search-form.open .submit' , function (e) { e.preventDefault(); e.stopPropagation(); $(this).closest('.search-form').submit(); }); // handle hover dropdown menu for desktop devices only $('[data-hover="megamenu-dropdown"]').not('.hover-initialized').each(function () { $(this).dropdownHover(); $(this).addClass('hover-initialized'); }); $(document).on('click' , '.mega-menu-dropdown .dropdown-menu' , function (e) { e.stopPropagation(); }); }; // Handles Bootstrap Tabs. var handleTabs = function () { // fix content height on tab click $('body').on('shown.bs.tab' , 'a[data-toggle="tab"]' , function () { handleSidebarAndContentHeight(); }); }; // Handles the go to top button at the footer var handleGoTop = function () { var offset = 300; var duration = 500; if ( navigator.userAgent.match(/iPhone|iPad|iPod/i) ) { // ios supported $(window).bind("touchend touchcancel touchleave" , function (e) { if ( $(this).scrollTop() > offset ) { $('.scroll-to-top').fadeIn(duration); } else { $('.scroll-to-top').fadeOut(duration); } }); } else { // general $(window).scroll(function () { if ( $(this).scrollTop() > offset ) { $('.scroll-to-top').fadeIn(duration); } else { $('.scroll-to-top').fadeOut(duration); } }); } $('.scroll-to-top').click(function (e) { e.preventDefault(); $('html, body').animate({scrollTop : 0} , duration); return false; }); }; // Hanlde 100% height elements(block, portlet, etc) var handle100HeightContent = function () { $('.full-height-content').each(function () { var target = $(this); var height; height = App.getViewPort().height - $('.page-header').outerHeight(true) - $('.page-footer').outerHeight(true) - $('.page-title').outerHeight(true) - $('.page-bar').outerHeight(true); if ( target.hasClass('portlet') ) { var portletBody = target.find('.portlet-body'); App.destroySlimScroll(portletBody.find('.full-height-content-body')); // destroy slimscroll height = height - target.find('.portlet-title').outerHeight(true) - parseInt(target.find('.portlet-body').css('padding-top')) - parseInt(target.find('.portlet-body').css('padding-bottom')) - 5; if ( App.getViewPort().width >= resBreakpointMd && target.hasClass("full-height-content-scrollable") ) { height = height - 35; portletBody.find('.full-height-content-body').css('height' , height); App.initSlimScroll(portletBody.find('.full-height-content-body')); } else { portletBody.css('min-height' , height); } } else { App.destroySlimScroll(target.find('.full-height-content-body')); // destroy slimscroll if ( App.getViewPort().width >= resBreakpointMd && target.hasClass("full-height-content-scrollable") ) { height = height - 35; target.find('.full-height-content-body').css('height' , height); App.initSlimScroll(target.find('.full-height-content-body')); } else { target.css('min-height' , height); } } }); }; //* END:CORE HANDLERS *// return { // Main init methods to initialize the layout //IMPORTANT!!!: Do not modify the core handlers call order. initHeader : function () { handleHorizontalMenu(); // handles horizontal menu } , setSidebarMenuActiveLink : function (mode , el) { handleSidebarMenuActiveLink(mode , el); } , initSidebar : function () { //layout handlers handleFixedSidebar(); // handles fixed sidebar menu handleSidebarMenu(); // handles main menu handleSidebarToggler(); // handles sidebar hide/show if ( App.isAngularJsApp() ) { handleSidebarMenuActiveLink('match'); // init sidebar active links } App.addResizeHandler(handleFixedSidebar); // reinitialize fixed sidebar on window resize } , initContent : function () { handle100HeightContent(); // handles 100% height elements(block, portlet, etc) handleTabs(); // handle bootstrah tabs App.addResizeHandler(handleSidebarAndContentHeight); // recalculate sidebar & content height on window resize App.addResizeHandler(handle100HeightContent); // reinitialize content height on window resize } , initFooter : function () { handleGoTop(); //handles scroll to top functionality in the footer } , init : function () { this.initHeader(); this.initSidebar(); this.initContent(); this.initFooter(); } , //public function to fix the sidebar and content height accordingly fixContentHeight : function () { handleSidebarAndContentHeight(); } , initFixedSidebarHoverEffect : function () { handleFixedSidebarHoverEffect(); } , initFixedSidebar : function () { handleFixedSidebar(); } , getLayoutImgPath : function () { return App.getAssetsPath() + layoutImgPath; } , getLayoutCssPath : function () { return App.getAssetsPath() + layoutCssPath; } }; }(); if ( App.isAngularJsApp() === false ) { jQuery(document).ready(function () { Layout.init(); // init metronic core componets }); } ================================================ FILE: resources/assets/static/js/index/Articles.js ================================================ var Articles = { config : { maxCommentLength : 250 , curCommentLength : 0 , tipTemplate : '可写 {len} 个字' , commentItemTemp : '
  • ' + '
    {content}
    ' + '

    ' + '{replyBtn}' + '{reply}

  • ' , commentReplyBtnTemp : '

    ' , commentItemReplyTemp : '
    {replyContent}
    {timestamp}
    ' , curComment : '' } , init : function () { this.initImg(); this.initLikes(); this.initComments(); this.initSendComment(); this.initMenu(); } , //初始化图片 initImg : function () { $( '.article-content img' ).addClass( 'img-responsive' ); } , initLikes : function () { var $likeBtn = $( '#likeBtn' ); $likeBtn.on( 'click' , function ( e ) { e.preventDefault(); $.post( Param.uri.likes ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code != 0 ) { tips.error( res.msg ); return false; } tips.success( res.msg ); var $likesCount = $( '#likesCount' ); var count = parseInt( $likesCount.html() ) + 1; $likesCount.html( count ); $likeBtn.animateCss( 'bounceIn' ); } ); } ); } , //初始化评论列表 initComments : function () { var self = this; var data = {}; $.get( Param.uri.comments , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code != 0 ) { tips.error( res.msg ); return false; } var rows = res.data.rows; var html = ''; for ( var i = 0 ; i < rows.length ; i ++ ) { var row = rows[ i ]; var reply = ''; var replyBtn = ''; if ( ! empty( row[ 'reply' ] ) ) { reply = self.config.commentItemReplyTemp .replace( /\{replyContent}/g , row[ 'reply' ] ) .replace( /\{timestamp}/g , row[ 'replied_at' ].substr( 2 , 14 ) ); } else { replyBtn = self.config.commentReplyBtnTemp .replace( /\{articleId}/g , row[ 'id' ] ); } html += self.config.commentItemTemp .replace( /\{author}/g , row[ 'nickname' ] ) .replace( /\{authorId}/g , row[ 'user_id' ] ) .replace( /\{timestamp}/g , row[ 'created_at' ].substr( 2 , 14 ) ) .replace( /\{replyBtn}/g , replyBtn ) .replace( /\{content}/g , row[ 'content' ] ) .replace( /\{reply}/g , reply ); } $( '.comments-list' ).append( html ); } ); } , //初始化发送评论 initSendComment : function () { var self = this; $( '#sendCommentForm' )[ 0 ].reset(); self.config.curComment = ''; //控制字数 self.initCommentLength(); $( '.send-comment-content' ).on( 'keyup' , function ( e ) { var curComment = $.trim( $( this ).val() ); var curCommentLength = curComment.length; if ( self.config.maxCommentLength - curCommentLength < 0 ) { e.preventDefault(); $( this ).val( self.config.curComment ); return false; } self.config.curCommentLength = curCommentLength; self.config.curComment = curComment; self.initCommentLength(); } ); //发表评论按钮 $( '#sendCommentBtn' ).on( 'click' , function ( e ) { var data = { content : self.config.curComment }; $.post( Param.uri.comments , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code != 0 ) { tips.error( res.msg ); return false; } tips.success( res.msg ); } ); } ); } , initCommentLength : function () { var self = this; var strLen = self.config.maxCommentLength - self.config.curCommentLength; var $sendCommentLength = $( '.send-comment-length' ); $sendCommentLength.html( this.config.tipTemplate.replace( /\{len}/g , strLen ) ); }, initMenu : function(){ $('.navbar-collapse li:eq(0)').addClass('active'); } }; ================================================ FILE: resources/assets/static/js/index/Auth.js ================================================ var Auth = { config : { bg : [ 'static/themes/index/img/auth_1.jpg' , 'static/themes/index/img/auth_2.jpg' , 'static/themes/index/img/auth_3.jpg' , 'static/themes/index/img/auth_4.jpg' , 'static/themes/index/img/auth_5.jpg' ] , coolDownTime : null } , init : function () { loading.initAjax(); var self = this; //背景幻灯片 this.config.bg.sort( function () {return Math.random() > 0.5 ? - 1 : 1;} ); $( '.auth-left' ).backstretch( this.config.bg , { fade : 1000 , duration : 8000 } ); self.setHeight(); $( window ).resize( function () { self.setHeight(); } ); self.initBtn(); } , setHeight : function () { var $authLeft = $( '.auth-left' ); var $authRight = $( '.auth-right' ); var winWidth = $( window ).width(); if ( winWidth < 992 ) { $authLeft.height( $( window ).height() / 2 ); $authRight.height( $( window ).height() / 2 ); } else { $authLeft.height( $( window ).height() ); $authRight.height( $( window ).height() ); } } , initBtn : function () { var self = this; $( '#signInBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var data = $( '#signInForm' ).serializeObject(); $.post( Param.uri.doSignIn , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code != 0 ) { tips.error( res.msg ); return false; } console.log( res.data ); tips.success( res.msg , function () { if ( ! empty( res.data.redirect ) ) { window.location.href = res.data.redirect; } } ); } ); } ); if ( typeof ( Param.coolDownTime ) != 'undefined' ) { this.initCaptcha(); $( '#sendCaptchaBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var data = { email : $.trim( $( 'input[name="email"]' ).val() ) }; if ( empty( data.email ) ) { tips.error( '请填写email' ); return false; } $.post( Param.uri.sendCaptcha , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code != 0 ) { tips.error( res.msg ); return false; } tips.success( res.msg ); self.config.coolDownTime = moment().format( 'X' ); self.coolDown(); } ); } ); } //注册按钮 $( '#signUpBtn' ).on( 'click' , function ( e ) { e.preventDefault(); $( this ).prop( 'disabled' , true ); var data = $( '#signUpForm' ).serializeObject(); if ( empty( data.email ) ) { tips.error( '请填写email' ); $( this ).prop( 'disabled' , false ); return false; } if ( empty( data.pwd ) ) { tips.error( '请设置密码' ); $( this ).prop( 'disabled' , false ); return false; } if ( empty( data.captcha ) ) { tips.error( '请填写验证码' ); $( this ).prop( 'disabled' , false ); return false; } $.post( Param.uri.doSignUp , data ) .fail( function ( res ) { $( this ).prop( 'disabled' , false ); tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code != 0 ) { tips.error( res.msg ); $( this ).prop( 'disabled' , false ); return false; } tips.success( res.msg , function () { window.location.href = Param.uri.base; } ); } ); } ) } , //初始化验证码 initCaptcha : function () { var self = this; if ( empty( Param.coolDownTime ) ) { $( '#sendCaptchaBtn' ).html( '获取' ).prop( 'disabled' , false ); return true; } //禁止发送验证码 并倒数 self.config.coolDownTime = Param.coolDownTime; self.coolDown(); } , //设置倒数 coolDown : function () { var self = this; var currentTime = moment().format( 'X' ); var leftTime = parseInt( self.config.coolDownTime ) + parseInt( Param.coolDownGap ) - currentTime; if ( leftTime <= 0 ) { $( '#sendCaptchaBtn' ).html( '获取' ).prop( 'disabled' , false ); self.config.coolDownTime = 0; return true; } else { $( '#sendCaptchaBtn' ).html( leftTime + '秒' ).prop( 'disabled' , true ); setTimeout( function () { self.coolDown() } , 1000 ); } } }; ================================================ FILE: resources/assets/static/js/index/Index.js ================================================ //渲染类型 var RenderType = { APPEND : 'append' , //添加 REPLACE : 'replace' //替换 }; var Index = { //页面配置文件 config : { bg : [ 'static/themes/index/img/home_1.jpg' , 'static/themes/index/img/home_2.jpg' , 'static/themes/index/img/home_3.jpg' , 'static/themes/index/img/home_4.jpg' , 'static/themes/index/img/home_5.jpg' ] , keyword : '' , //关键字 catalog : '' , //分类 tag : '' , //标签 page : 1 , //页码 total : 1 , //总页数 loadingTemp : '
    ' + '' + '

    正在加载中...

    ' , //文章列表模板 articleTemp : '
    ' + '
    ' + 'DMG - {timestamp}' + '
    ' + '
    ' + '{title}' + '
    ' + '
    ' + '阅读 {pv} - 评论 {comments} - 喜欢 {likes}' + '
    ' } , //初始化页面 init : function () { var self = this; self.initHeight(); self.initBtn(); self.loadList( RenderType.REPLACE ); //背景幻灯片 this.config.bg.sort( function () {return Math.random() > 0.5 ? - 1 : 1;} ); $( '.page-cover' ).backstretch( this.config.bg , { fade : 1000 , duration : 8000 } ); } , //初始化页面高度 initHeight : function () { var self = this; self._setHeight(); $( window ).on( 'resize' , function () { self._setHeight(); } ); } , //设置页面高度 _setHeight : function () { var $pageCover = $( '.page-cover' ); var $pageContent = $( '.page-content' ); $pageContent.height( $( window ).height() ); $pageCover.height( $( window ).height() ); } , initBtn : function () { var self = this; //分类点击 $( '.catalog' ).on( 'click' , function ( e ) { e.preventDefault(); var catalog = $( this ).data( 'catalog' ); var text = $( this ).text(); if ( catalog == self.config.catalog ) { return false; } if ( catalog == '' ) { console.log( 'here' ); $( this ).parent().addClass( 'active' ).next().removeClass( 'active' ); } else { $( this ).parents( 'li.dropdown' ).find( '.dropdown-toggle' ).text( text ); $( this ).parents( 'li.dropdown' ).addClass( 'active' ).prev().removeClass( 'active' ); } self.config.catalog = catalog; self.config.page = 1; self.config.total = 1; self.setKeyword( '' ); self.loadList( RenderType.REPLACE ); } ); //标签点击 $( '.tags > a' ).on( 'click' , function ( e ) { e.preventDefault(); var tag = $( this ).data( 'tag' ); if ( tag == self.config.tag ) { return false; } $( '.tags > a' ).removeClass( 'active' ); $( this ).addClass( 'active' ); self.config.tag = tag; self.config.page = 1; self.config.total = 1; self.setKeyword( '' ); self.loadList( RenderType.REPLACE ); } ); //加载更多 $( '.getMoreBtn' ).on( 'click' , function ( e ) { e.preventDefault(); if ( self.config.total >= self.config.page ) { return false; } self.config.page ++; self.loadList( RenderType.APPEND ); } ) } , //设置关键字 setKeyword : function ( keyword ) { this.config.keyword = $.trim( keyword ); $( 'input[name="keyword"]' ).val( keyword ); } , //加载列表 loadList : function ( renderType ) { var self = this; var data = { catalog : self.config.catalog , tag : self.config.tag , page : self.config.page , keyword : self.config.keyword }; if ( renderType == RenderType.APPEND ) { $( '.content-list' ).append( self.config.loadingTemp ); } else if ( renderType == RenderType.REPLACE ) { $( '.content-list' ).html( self.config.loadingTemp ); } $.get( Param.uri.articles , data ) .fail( function ( res ) { //tips.error(res.responseText); console.log( 'error' , res ); } ) .done( function ( res ) { console.log( res ); if ( res.code != 0 ) { console.log( res.msg ); return false; } self.config.total = res.data.total; self.renderList( res.data.rows , renderType ); } ); } , //渲染列表 renderList : function ( data , type ) { var temp = this.config.articleTemp; var html = []; for ( var i = 0 ; i < data.length ; i ++ ) { var item = data[ i ]; var timestamp = getTimestamp( item.created_at ); html.push( temp.replace( /\{id}/g , item.id ) .replace( /\{title}/g , item.title ) .replace( /\{pv}/g , item.pv ) .replace( /\{comments}/g , item.comments ) .replace( /\{likes}/g , item.likes ) .replace( /\{timestamp}/g , timestamp ) ); } if ( type == RenderType.REPLACE ) { $( '.content-list' ).html( html.join( "\n" ) ); } else if ( type == RenderType.APPEND ) { $( '.loading' ).remove(); $( '.content-list' ).append( html.join( "\n" ) ); } } }; var getTimestamp = function ( timeString ) { var unit = [ 31104000 , 2592000 , 86400 , 3600 , 60 , 3600 ]; var unitText = [ '年前' , '个月前' , '天前' , '小时之前' , '分钟之前' , '秒之前' ]; var diff = moment().unix() - moment( timeString ).unix(); for ( var i = 0 ; i < unit.length ; i ++ ) { if ( diff > unit[ i ] ) { diff = Math.round( diff / unit[ i ] ); break; } } return diff + unitText[ i ]; }; ================================================ FILE: resources/assets/static/js/index/Questions.js ================================================ var Questions = { config : { mde : null, maxCommentLength : 250 , curCommentLength : 0 , tipTemplate : '可写 {len} 个字' , commentItemTemp : '
  • ' + '
    {content}
    ' + '

    ' + '{replyBtn}' + '{reply}

  • ' , commentReplyBtnTemp : '

    ' , commentItemReplyTemp : '
    {replyContent}
    {timestamp}
    ' , commentReplyTemp : '' , curComment : '', answerItemTemp : '
  • ' + '
    {content}
    ' + '

    ' + '{adoptBtn}' + '{replyBtn}' + '{reply}

  • ' , answerAdoptBtnTemp : '', answerReplyBtnTemp :'

    ' , answerItemReplyTemp : '
    {replyContent}
    {timestamp}
    ' , } , init : function () { this.initQuestion(); this.initImg(); this.initLikes(); // this.initAnswers(); this.initBtn(); this.initSendAnswer(); this.initReplyComment(); this.initSendCommentReply(); this.initPriceModal(); // this.initSendComment(); this.initMenu(); this.config.mde = new SimpleMDE( { element : $( ".editor" )[ 0 ] , toolbar : [ 'link' , 'table' , '|' , 'preview' , 'side-by-side' , 'fullscreen' ] , spellChecker : false } ); } , //初始化图片 initImg : function () { $( '.article-content img' ).addClass( 'img-responsive' ); } , initLikes : function () { var $likeBtn = $( '#likeBtn' ); $likeBtn.on( 'click' , function ( e ) { e.preventDefault(); $.post( Param.uri.likes ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code != 0 ) { tips.error( res.msg ); return false; } tips.success( res.msg ); var $likesCount = $( '#likesCount' ); var count = parseInt( $likesCount.html() ) + 1; $likesCount.html( count ); $likeBtn.animateCss( 'bounceIn' ); } ); } ); } , //初始化评论列表 initComments : function () { var self = this; var data = {}; $.get( Param.uri.comments , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code != 0 ) { tips.error( res.msg ); return false; } var rows = res.data.rows; var html = ''; for ( var i = 0 ; i < rows.length ; i ++ ) { var row = rows[ i ]; var reply = ''; var replyBtn = ''; if ( ! empty( row[ 'reply' ] ) ) { reply = self.config.commentItemReplyTemp .replace( /\{replyContent}/g , row[ 'reply' ] ) .replace( /\{timestamp}/g , row[ 'replied_at' ].substr( 2 , 14 ) ); } else { replyBtn = self.config.commentReplyBtnTemp .replace( /\{articleId}/g , row[ 'id' ] ); } html += self.config.commentItemTemp .replace( /\{author}/g , row[ 'nickname' ] ) .replace( /\{authorId}/g , row[ 'user_id' ] ) .replace( /\{timestamp}/g , row[ 'created_at' ].substr( 2 , 14 ) ) .replace( /\{replyBtn}/g , replyBtn ) .replace( /\{content}/g , row[ 'content' ] ) .replace( /\{reply}/g , reply ); } $( '.comments-list' ).append( html ); } ); } , initAnswers : function(){ var self = this; // var data = {question_status:self.config.question.status}; $.get( Param.uri.answers ).fail( function(res){ tips.error( res.msg ); }).done(function( res ){ if( res.code != 0 ){ tips.error( res.msg ); return false; } var rows = res.data.rows; var html = ''; for( var i= 0; i'; } html += ''; // tips.success(res.msg); $('#addPriceModal .modal-body #addprice').html(html); }).fail(function(res){ tips.error(res.msg); }); } }; ================================================ FILE: resources/assets/static/js/index/QuestionsCreate.js ================================================ var QuestionsCreate = { config : { mde : null, } , init : function () { this.initSendQuestion(); this.initCategory(); this.initPrice(); this.initMenu(); this.config.mde = new SimpleMDE( { element : $( ".editor" )[ 0 ] , toolbar : [ 'link' , 'table' , '|' , 'preview' , 'side-by-side' , 'fullscreen' ] , spellChecker : false } ); } , initCategory : function(){ $.get(Param.uri.questioncategory , {} , function(res){ var options = ''; for(var i=0 ; i < res.data.length ; i++){ options += ''; } // options = form_options_rows(res); $('#category').html(options); // console.log(res); }); }, initPrice : function(){ var options = ''; for(var i=0 ; i < Param.prices.length ; i++){ options += ''; } $('#price').html(options); }, initSendQuestion: function(){ var self = this; $('#sendQuestionBtn').on( 'click' , function(e){ e.preventDefault(); console.log($('#content').text()); var data = { title : $('#title').val(), content : self.config.mde.value(), category : $('#category').val(), price : $('#price').val(), hide : $('#hide').is(':checked') ? 1 : 0 , }; $.post(Param.uri.questioncreate , data ) .done(function( res ){ tips.success(res.msg); }).fail(function( res ){ tips.error(res.msg); }); }); }, initMenu : function(){ $('.navbar-collapse li:eq(0)').addClass('active'); } }; ================================================ FILE: resources/assets/static/js/index/Users.js ================================================ var Users = { init : function () { } }; ================================================ FILE: resources/assets/static/js/mp/Index.js ================================================ var Index = { init : function(){ // 指定图表的配置项和数据 var usersOption = { tooltip : { trigger : 'axis' } , legend : { data : ['用户注册'] } , grid : { left : '3%' , right : '4%' , bottom : '3%' , containLabel : true } , xAxis : [ { type : 'category' , boundaryGap : true , data : Param.charts.users.period } ] , yAxis : [ { type : 'value' } ] , series : [ { name : '注册人数' , type : 'line' , data : Param.charts.users.data } ] }; var apiOption = { color: ['#3398DB'], tooltip : { trigger: 'axis', axisPointer : { // 坐标轴指示器,坐标轴触发有效 type : 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, grid : { left : '3%' , right : '4%' , bottom : '3%' , containLabel : true } , xAxis : [ { type : 'category' , data : Param.charts.api.period, axisTick: { alignWithLabel: true } } ] , yAxis : [ { type : 'value' } ] , series : [ { name : '访问量' , type : 'bar' , barWidth: '60%', label: { normal: { show: true, position: 'top' } }, data : Param.charts.api.data } ] }; var userChart = echarts.init(document.getElementById('userChart')); userChart.setOption(usersOption); var apiChart = echarts.init(document.getElementById('apiChart')); apiChart.setOption(apiOption); } }; ================================================ FILE: resources/assets/static/js/mp/MerAd.js ================================================ /** * MerAd JS * * @author MR.Z * @version 2.0 , 2016-09-16 */ var MerAd = { config : {} , init : function () { //重新设置菜单 if ( ! empty(Param.uri.menu) ) { Layout.setSidebarMenuActiveLink('set' , 'a[data-uri="' + Param.uri.menu + '"]'); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); } , //初始化查询form initSearchForm : function () { var $searchForm = $('#searchForm'); $searchForm.reloadForm(Param.query); //查询按钮 $('#searchBtn').on('click' , function (e) { e.preventDefault(); var $dataGrid = $('#dataGrid'); var param = $dataGrid.TableGrid('getParam'); param = $.extend({} , param , $('#searchForm').serializeObject()); param.page = 1; $dataGrid.TableGrid('setParam' , param); $dataGrid.TableGrid('reload'); }); } , //显示 portlet setPortletShow : function (type) { var $tablePortlet = $('#tablePortlet'); var $addEditPortlet = $('#addEditPortlet'); $tablePortlet.slideUp('fast'); if ( type == 'add' ) { if ( ! $addEditPortlet.hasClass('blue') ) { $addEditPortlet.removeClass('green-meadow').addClass('blue'); } $addEditPortlet.find('.caption-subject').html('新增 ' + Param.pageTitle); } else if ( type == 'edit' ) { if ( ! $addEditPortlet.hasClass('green-meadow') ) { $addEditPortlet.removeClass('blue').addClass('green-meadow'); } $addEditPortlet.find('.caption-subject').html('编辑 ' + Param.pageTitle); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); } , //关闭 portlet setPortletHide : function () { $('#tablePortlet').slideDown('fast'); $('#addEditPortlet').slideUp('fast'); } , setUploadCropByCatalog : function (catalogId) { for ( var i = 0 ; i < Param.catalog.length ; i ++ ) { var row = Param.catalog[i]; if ( row['id'] == catalogId ) { var $iconUploadBtn = $('#iconUploadBtn'); var uploadParam = $iconUploadBtn.Uploader('getParam'); uploadParam['width'] = row.width; uploadParam['height'] = row.height; $iconUploadBtn.Uploader('set_param' , uploadParam); } } } , //初始化各种按钮 initBtn : function () { var self = this; $('input[name="catalog_id"]').on('change' , function () { self.setUploadCropByCatalog($(this).val()); }); //打开添加框 $('#addNewBtn').on('click' , function (e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm(Param.defaultRow); setImgPreview.clear('icon'); self.setUploadCropByCatalog(Param.defaultRow.catalog_id); $form.attr('action' , Param.uri.insert); }); //编辑按钮 $(document).on('click' , '.editBtn' , function (e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#dataGrid').TableGrid('getRow' , id); var $form = $('#addEditForm'); $form.reloadForm(row); setImgPreview.set('icon' , row.icon); self.setUploadCropByCatalog(row.catalog_id); $form.attr('action' , Param.uri.update + row.id); }); //删除一行 $(document).on('click' , '.destroyBtn' , function (e) { e.preventDefault(); var id = $(this).data('id'); self.delData(id); }); $('#destroySelectBtn').on('click' , function (e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if ( empty(ids) ) { tips.error('请选择要删除的记录'); return; } self.delData(ids); }); //提交添加编辑窗 $('#submitFormBtn').on('click' , function (e) { e.preventDefault(); var $form = $('#addEditForm'); if ( $form.validForm() ) { var data = $form.serializeObject(); $.post($form.attr('action') , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if ( res.code != 0 ) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); self.setPortletHide(); } }); } }); //关闭添加编辑窗 $('#closePortletBtn').on('click' , function (e) { e.preventDefault(); self.setPortletHide(); }); //上传按钮 $('#iconUploadBtn').Uploader({ uri : Param.uri.upload , //上传文件 param : Param.uploadParam , album : true , albumUri : Param.uri.album , albumCatalogUri : Param.uri.albumCatalog , albumParam : Param.albumParam , onSuccess : function (ret) { tips.success(ret.msg); if ( ret.code == 0 ) { setImgPreview.set('icon' , ret.data.savePath); } } , onChooseAlbum : function (uri) { setImgPreview.set('icon' , uri); } }); } , delData : function (ids) { var self = this; var data = { ids : ids }; sure.init('是否删除?' , function () { $.post(Param.uri.destroy , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if ( res.code != 0 ) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); } }); }); } , //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query , '' , uri); $('#dataGrid').TableGrid({ uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function (row) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function (rows , settings) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if ( oldUri == uri ) { return false; } var params = $.getUrlParams(window.location.href); history.pushState(params , '' , oldUri); history.replaceState(settings.param , '' , uri); } }); } }; //pop state 事件 window.onpopstate = function (event) { if ( event && event.state ) { $('#searchForm').reloadForm(event.state); var $dataGrid = $('#dataGrid'); $dataGrid.TableGrid('setParam' , event.state); $dataGrid.TableGrid('reload'); } }; var formatName = function (value , row) { return value + '
    ' + ''+ row['catalog_text'] +''; }; ================================================ FILE: resources/assets/static/js/mp/MerAdCatalog.js ================================================ /** * MerAdCatalog JS * * @author MR.Z * @version 2.0 , 2016-09-16 */ var MerAdCatalog = { config : {} , init : function () { //重新设置菜单 if ( !empty( Param.uri.menu ) ) { Layout.setSidebarMenuActiveLink('set' , 'a[data-uri="'+ Param.uri.menu +'"]'); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); } , //初始化查询form initSearchForm : function () { var $searchForm = $('#searchForm'); $searchForm.reloadForm(Param.query); //查询按钮 $('#searchBtn').on('click' , function (e) { e.preventDefault(); var $dataGrid = $('#dataGrid'); var param = $dataGrid.TableGrid('getParam'); param = $.extend({} , param , $('#searchForm').serializeObject() ); param.page = 1; $dataGrid.TableGrid('setParam' , param); $dataGrid.TableGrid('reload'); }); } , //显示 modal setPortletShow : function ( type ) { var $addEditModal = $('#addEditModal') ; $addEditModal.modal('show'); if ( type == 'add' ) { $addEditModal.find('.caption-subject').html('新增 ' + Param.pageTitle ); } else if ( type == 'edit' ) { $addEditModal.find('.caption-subject').html('编辑 ' + Param.pageTitle ); } }, //关闭 modal setPortletHide : function () { $('#addEditModal').modal('hide') ; }, //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $('#addNewBtn').on('click' , function (e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm( Param.defaultRow ); $form.attr('action' , Param.uri.insert ); }); //编辑按钮 $(document).on('click' , '.editBtn' , function (e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#dataGrid').TableGrid('getRow' , id); var $form = $('#addEditForm'); $form.reloadForm( row ); $form.attr('action' , Param.uri.update + row.id ); }); //删除一行 $(document).on('click' , '.destroyBtn' , function (e) { e.preventDefault(); var id = $(this).data('id'); self.delData( id ); }); $('#destroySelectBtn').on('click' , function (e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if ( empty( ids ) ) { tips.error('请选择要删除的记录'); return ; } self.delData( ids ); }); //提交添加编辑窗 $('#submitFormBtn').on('click' , function (e) { e.preventDefault(); var $form = $('#addEditForm'); if( $form.validForm() ) { var data = $form.serializeObject(); $.post( $form.attr('action') , data ) .fail( function(res){ tips.error( res.responseText ); }) .done( function( res ){ if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if( res.code != 0 ){ tips.error( res.msg ); } else { tips.success( res.msg ); $('#dataGrid').TableGrid('reload'); self.setPortletHide(); } }); } }); //关闭添加编辑窗 $('#closePortletBtn').on('click' , function (e) { e.preventDefault(); self.setPortletHide(); }); } , delData : function ( ids ) { var self = this ; var data = { ids : ids }; sure.init('是否删除?' , function () { $.post( Param.uri.destroy , data ) .fail( function(res){ tips.error( res.responseText ); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if( res.code != 0 ){ tips.error( res.msg ); } else { tips.success( res.msg ); $('#dataGrid').TableGrid('reload'); } }); }); }, //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query , '' , uri); $('#dataGrid').TableGrid({ uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function (row) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function ( rows , settings ) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if ( oldUri == uri) { return false ; } var params = $.getUrlParams(window.location.href); history.pushState(params , '' , oldUri); history.replaceState(settings.param , '' , uri); } }); } }; //pop state 事件 window.onpopstate = function (event) { if ( event && event.state ) { $('#searchForm').reloadForm( event.state ); var $dataGrid = $('#dataGrid'); $dataGrid.TableGrid('setParam' , event.state); $dataGrid.TableGrid('reload'); } }; ================================================ FILE: resources/assets/static/js/mp/MerArticles.js ================================================ /** * MerArticles JS * * @author MR.Z * @version 2.0 , 2016-09-14 */ var MerArticles = { config : { mde : null } , init : function () { var self = this; //重新设置菜单 if ( ! empty( Param.uri.menu ) ) { Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri="' + Param.uri.menu + '"]' ); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); $( '.dtp' ).datetimepicker( DTP_DATE_OPTION ); this.config.mde = new SimpleMDE( { element : $( ".editor" )[ 0 ] , toolbar : [ 'link' , { name : "image" , action : function uploadImage() { //editor.value( editor.value() + 'http://www.baidu.com' ); $('#mdeUploadBtn').trigger('click'); } , className : "fa fa-image" , title : "Upload Image Button" } , 'table' , '|' , 'preview' , 'side-by-side' , 'fullscreen' ] , spellChecker : false } ); //KE_OPTIONS.uploadJson = Param.uri.uploadKE; //this.config['content'] = KindEditor.create('textarea[name="content"]' , KE_OPTIONS); } , //初始化查询form initSearchForm : function () { var $searchForm = $( '#searchForm' ); $searchForm.reloadForm( Param.query ); //查询按钮 $( '#searchBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var $dataGrid = $( '#dataGrid' ); var param = $dataGrid.TableGrid( 'getParam' ); param = $.extend( {} , param , $searchForm.serializeObject() ); param.page = 1; $dataGrid.TableGrid( 'setParam' , param ); $dataGrid.TableGrid( 'reload' ); } ); } , //显示 portlet setPortletShow : function ( type ) { var $tablePortlet = $( '#tablePortlet' ); var $addEditPortlet = $( '#addEditPortlet' ); $tablePortlet.slideUp( 'fast' ); if ( type == 'add' ) { if ( ! $addEditPortlet.hasClass( 'blue' ) ) { $addEditPortlet.removeClass( 'green-meadow' ).addClass( 'blue' ); } $addEditPortlet.find( '.caption-subject' ).html( '新建' + Param.pageTitle ); } else if ( type == 'edit' ) { if ( ! $addEditPortlet.hasClass( 'green-meadow' ) ) { $addEditPortlet.removeClass( 'blue' ).addClass( 'green-meadow' ); } $addEditPortlet.find( '.caption-subject' ).html( '编辑' + Param.pageTitle ); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); } , //关闭 portlet setPortletHide : function () { $( '#tablePortlet' ).slideDown( 'fast' ); $( '#addEditPortlet' ).slideUp( 'fast' ); } , //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $( '#addNewBtn' ).on( 'click' , function ( e ) { e.preventDefault(); self.setPortletShow( 'add' ); var $form = $( '#addEditForm' ); $form.reloadForm( Param.defaultRow ); setImgPreview.clear( 'icon' ); //self.config['content'].html(''); self.config.mde.value( '' ); $form.attr( 'action' , Param.uri.insert ); } ); //编辑按钮 $( document ).on( 'click' , '.editBtn' , function ( e ) { e.preventDefault(); self.setPortletShow( 'edit' ); var id = $( this ).data( 'id' ); var row = $( '#dataGrid' ).TableGrid( 'getRow' , id ); var $form = $( '#addEditForm' ); $form.reloadForm( row ); setImgPreview.set( 'icon' , row.icon ); //self.config['content'].html(row.content); self.config.mde.value( row.content ); $form.attr( 'action' , Param.uri.update + row.id ); } ); //删除一行 $( document ).on( 'click' , '.destroyBtn' , function ( e ) { e.preventDefault(); var id = $( this ).data( 'id' ); self.delData( id ); } ); $( '#destroySelectBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var ids = $( '.checker:checked' ).serializeJSON().selectChecker; if ( empty( ids ) ) { tips.error( '请选择要删除的记录' ); return; } self.delData( ids ); } ); //提交添加编辑窗 $( '#submitFormBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var $form = $( '#addEditForm' ); if ( $form.validForm() ) { var data = $form.serializeObject(); data.content = self.config.mde.value(); $.post( $form.attr( 'action' ) , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code == 1001 ) { //需要登录 tips.error( '请先登录' ); } else if ( res.code != 0 ) { tips.error( res.msg ); } else { tips.success( res.msg ); $( '#dataGrid' ).TableGrid( 'reload' ); self.setPortletHide(); } } ); } } ); //关闭添加编辑窗 $( '#closePortletBtn' ).on( 'click' , function ( e ) { e.preventDefault(); self.setPortletHide(); } ); //上传按钮 $( '#iconUploadBtn' ).Uploader( { uri : Param.uri.upload , //上传文件 param : Param.uploadParam , album : true , albumUri : Param.uri.album , albumCatalogUri : Param.uri.albumCatalog , albumParam : Param.albumParam , onSuccess : function ( ret ) { tips.success( ret.msg ); if ( ret.code == 0 ) { setImgPreview.set( 'icon' , ret.data.savePath ); } } , onChooseAlbum : function ( uri ) { setImgPreview.set( 'icon' , uri ); } } ); $( '#mdeUploadBtn' ).Uploader( { uri : Param.uri.upload , //上传文件 param : Param.contentParam , album : false , onSuccess : function ( ret ) { tips.success( ret.msg ); if ( ret.code == 0 ) { var editor = self.config.mde; editor.value( editor.value() + '![](' + ret.data.uri + ')' ); //setImgPreview.set( 'icon' , ret.data.uri ); } } } ); } , delData : function ( ids ) { var self = this; var data = { ids : ids }; sure.init( '是否删除?' , function () { $.post( Param.uri.destroy , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code == 1001 ) { //需要登录 tips.error( '请先登录' ); } else if ( res.code != 0 ) { tips.error( res.msg ); } else { tips.success( res.msg ); $( '#dataGrid' ).TableGrid( 'reload' ); } } ); } ); } , //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param( Param.query ); history.replaceState( Param.query , '' , uri ); $( '#dataGrid' ).TableGrid( { uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function ( row ) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function ( rows , settings ) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param( settings.param ); if ( oldUri == uri ) { return false; } var params = $.getUrlParams( window.location.href ); history.pushState( params , '' , oldUri ); history.replaceState( settings.param , '' , uri ); } } ); } }; //pop state 事件 window.onpopstate = function ( event ) { if ( event && event.state ) { $( '#searchForm' ).reloadForm( event.state ); var $dataGrid = $( '#dataGrid' ); $dataGrid.TableGrid( 'setParam' , event.state ); $dataGrid.TableGrid( 'reload' ); } }; var formatPreview = function ( value , row ) { return '[' + row.catalog_text + '] ' + '' + value + ''; }; var formatTags = function ( value ) { var tags = value.split( ' ' ); var html = ''; for ( var i = 0 ; i < tags.length ; i ++ ) { html += '' + tags[ i ] + ' '; } return html; }; ================================================ FILE: resources/assets/static/js/mp/MerArticlesCatalog.js ================================================ /** * MerArticlesCatalog JS * * @author MR.Z * @version 2.0 , 2016-09-15 */ var MerArticlesCatalog = { init : function () { //重新设置菜单 if ( ! empty(Param.uri.menu) ) { Layout.setSidebarMenuActiveLink('set' , 'a[data-uri="' + Param.uri.menu + '"]'); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化数据表 this.initGrid(); } , //显示 modal setPortletShow : function (type) { var $addEditModal = $('#addEditModal'); $addEditModal.modal('show'); if ( type == 'add' ) { $addEditModal.find('.caption-subject').html('新增 ' + Param.pageTitle); } else if ( type == 'edit' ) { $addEditModal.find('.caption-subject').html('编辑 ' + Param.pageTitle); } } , //关闭 modal setPortletHide : function () { $('#addEditModal').modal('hide'); } , //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $('#addNewBtn').on('click' , function (e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm(Param.defaultRow); setImgPreview.clear('icon'); setImgPreview.clear('icon'); $form.attr('action' , Param.uri.insert); }); //编辑按钮 $(document).on('click' , '.editBtn' , function (e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#treeGrid').TreeGrid('getRow' , id); var $form = $('#addEditForm'); $form.reloadForm(row); setImgPreview.set('icon' , row.icon); setImgPreview.set('icon' , row.icon); setImgPreview.set('icon' , row.icon); $form.attr('action' , Param.uri.update + row.id); }); //删除一行 $(document).on('click' , '.destroyBtn' , function (e) { e.preventDefault(); var id = $(this).data('id'); self.delData(id); }); $('#destroySelectBtn').on('click' , function (e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if ( empty(ids) ) { tips.error('请选择要删除的记录'); return; } self.delData(ids); }); //提交添加编辑窗 $('#submitFormBtn').on('click' , function (e) { e.preventDefault(); var $form = $('#addEditForm'); if ( $form.validForm() ) { var data = $form.serializeObject(); $.post($form.attr('action') , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if ( res.code != 0 ) { tips.error(res.msg); } else { tips.success(res.msg); $('#treeGrid').TreeGrid('reload'); self.setPortletHide(); } }); } }); //关闭添加编辑窗 $('#closePortletBtn').on('click' , function (e) { e.preventDefault(); self.setPortletHide(); }); //上传按钮 $('#iconUploadBtn').Uploader({ uri : Param.uri.upload , //上传文件 param : Param.uploadParam , album : true , albumUri : Param.uri.album , albumCatalogUri : Param.uri.albumCatalog , albumParam : Param.albumParam , onSuccess : function (ret) { tips.success(ret.msg); if ( ret.code == 0 ) { setImgPreview.set('icon' , ret.data.savePath); } } , onChooseAlbum : function (uri) { setImgPreview.set('icon' , uri); } }); } , delData : function (ids) { var self = this; var data = { ids : ids }; sure.init('是否删除?' , function () { $.post(Param.uri.destroy , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if ( res.code != 0 ) { tips.error(res.msg); } else { tips.success(res.msg); $('#treeGrid').TreeGrid('reload'); } }); }); } , //初始化tree grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query , '' , uri); $('#treeGrid').TreeGrid({ uri : Param.uri.read , field : 'text' , //显示箭头的字段 param : Param.query , //查询参数 rowStyle : function (row) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function (rows , settings) { var options = ''; options += form_options_rows(rows , settings); $('select[name="pid"]').html(options); var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if ( oldUri == uri ) { return false; } var params = $.getUrlParams(window.location.href); history.pushState(params , '' , oldUri); history.replaceState(settings.param , '' , uri); } }); } }; //pop state 事件 window.onpopstate = function (event) { if ( event && event.state ) { $('#searchForm').reloadForm(event.state); var $treeGrid = $('#treeGrid'); $treeGrid.TreeGrid('setParam' , event.state); $treeGrid.TreeGrid('reload'); } }; ================================================ FILE: resources/assets/static/js/mp/MerGoods.js ================================================ /** * MerGoods JS * * @author MR.Z * @version 2.0 , 2016-10-11 */ var MerGoods = { config : { id : 0 , content : null } , init : function () { //重新设置菜单 if ( ! empty( Param.uri.menu ) ) { Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri="' + Param.uri.menu + '"]' ); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); this.initIconGrid(); this.initOrderGrid(); this.initCommentsGrid(); $( '.dtp' ).datetimepicker( DTP_DATETIME_OPTION ); KE_OPTIONS.uploadJson = Param.uri.uploadKE; this.config.content = KindEditor.create( 'textarea[name="content"]' , KE_OPTIONS ); } , //初始化查询form initSearchForm : function () { var $searchForm = $( '#searchForm' ); $searchForm.reloadForm( Param.query ); //查询按钮 $( '#searchBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var $dataGrid = $( '#dataGrid' ); var param = $dataGrid.TableGrid( 'getParam' ); param = $.extend( {} , param , $( '#searchForm' ).serializeObject() ); param.page = 1; $dataGrid.TableGrid( 'setParam' , param ); $dataGrid.TableGrid( 'reload' ); } ); } , //显示 portlet setPortletShow : function ( type ) { var $tablePortlet = $( '#tablePortlet' ); var $addEditPortlet = $( '#addEditPortlet' ); $tablePortlet.slideUp( 'fast' ); if ( type == 'add' ) { if ( ! $addEditPortlet.hasClass( 'blue' ) ) { $addEditPortlet.removeClass( 'green-meadow' ).addClass( 'blue' ); } $addEditPortlet.find( '.caption-subject' ).html( '新增 ' + Param.pageTitle ); } else if ( type == 'edit' ) { if ( ! $addEditPortlet.hasClass( 'green-meadow' ) ) { $addEditPortlet.removeClass( 'blue' ).addClass( 'green-meadow' ); } $addEditPortlet.find( '.caption-subject' ).html( '编辑 ' + Param.pageTitle ); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); } , //关闭 portlet setPortletHide : function () { $( '#tablePortlet' ).slideDown( 'fast' ); $( '#addEditPortlet' ).slideUp( 'fast' ); } , //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $( '#addNewBtn' ).on( 'click' , function ( e ) { e.preventDefault(); self.setPortletShow( 'add' ); var $form = $( '#addEditForm' ); $form.reloadForm( Param.defaultRow ); setImgPreview.clear( 'icon' ); var $goodsTabs = $( '#goodsTabs' ); $goodsTabs.find( 'a:eq(0)' ).tab( 'show' ); $goodsTabs.find( '#goodsTabs li:gt(0)' ).hide(); self.config[ 'content' ].html( '' ); $form.attr( 'action' , Param.uri.insert ); } ); //编辑按钮 $( document ).on( 'click' , '.editBtn' , function ( e ) { e.preventDefault(); self.setPortletShow( 'edit' ); //处理tab var $goodsTabs = $( '#goodsTabs' ); $goodsTabs.find( 'a:eq(0)' ).tab( 'show' ); $goodsTabs.find( '#goodsTabs li' ).show(); var id = $( this ).data( 'id' ); self.config[ 'id' ] = id; var row = $( '#dataGrid' ).TableGrid( 'getRow' , id ); var $basicForm = $( '#addEditForm' ); $basicForm.reloadForm( row ); $basicForm.attr( 'action' , Param.uri.update + row.id ); //处理seo form $( '#seoForm' ).reloadForm( row ); //处理profile form $( '#profileForm' ).reloadForm( row ); self.config[ 'content' ].html( row.content ); //加载图片 Param.queryIcon[ 'goodsId' ] = id; var $iconGrid = $( '#iconGrid' ); $iconGrid.TableGrid( 'setParam' , Param.queryIcon ); $iconGrid.TableGrid( 'reload' ); //加载订单 Param.queryOrder[ 'goodsId' ] = id; var $orderGrid = $( '#orderGrid' ); $orderGrid.TableGrid( 'setParam' , Param.queryOrder ); $orderGrid.TableGrid( 'reload' ); //加载评论 Param.queryComments[ 'typeId' ] = id; var $commentsGrid = $( '#commentsGrid' ); $commentsGrid.TableGrid( 'setParam' , Param.queryComments ); $commentsGrid.TableGrid( 'reload' ); } ); //提交seo信息 $( '#submitSeoBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var data = $( '#seoForm' ).serializeObject(); $.post( Param.uri.update + self.config.id , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code == 1001 ) { //需要登录 tips.error( '请先登录' ); } else if ( res.code != 0 ) { tips.error( res.msg ); } else { tips.success( res.msg ); $( '#dataGrid' ).TableGrid( 'reload' ); } } ); } ); //提交 profile 信息 $( '#submitProfileBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var data = $( '#profileForm' ).serializeObject(); $.post( Param.uri.updateProfile + self.config.id , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code == 1001 ) { //需要登录 tips.error( '请先登录' ); } else if ( res.code != 0 ) { tips.error( res.msg ); } else { tips.success( res.msg ); $( '#dataGrid' ).TableGrid( 'reload' ); } } ); } ); $( '#destroySelectBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var ids = $( '.checker:checked' ).serializeJSON().selectChecker; if ( empty( ids ) ) { tips.error( '请选择要删除的记录' ); return; } self.delData( ids ); } ); //提交添加编辑窗 $( '#submitFormBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var $form = $( '#addEditForm' ); if ( $form.validForm() ) { var data = $form.serializeObject(); $.post( $form.attr( 'action' ) , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code == 1001 ) { //需要登录 tips.error( '请先登录' ); } else if ( res.code != 0 ) { tips.error( res.msg ); } else { tips.success( res.msg ); $( '#dataGrid' ).TableGrid( 'reload' ); self.setPortletHide(); } } ); } } ); //关闭添加编辑窗 $( '.closePortletBtn' ).on( 'click' , function ( e ) { e.preventDefault(); self.setPortletHide(); } ); //上传按钮 $( '#iconUploadBtn' ).Uploader( { uri : Param.uri.upload , //上传文件 param : Param.uploadParam , album : true , albumUri : Param.uri.album , albumCatalogUri : Param.uri.albumCatalog , albumParam : Param.albumParam , onSuccess : function ( ret ) { tips.success( ret.msg ); if ( ret.code == 0 ) { self.insertIcon( ret.data.savePath ); //setImgPreview.set( 'icon' , ret.data.savePath ); } } , onChooseAlbum : function ( uri ) { self.insertIcon( uri ); //setImgPreview.set( 'icon' , uri ); } } ); //设置 商品状态 $( document ).on( 'click' , '.setStatusBtn' , function ( e ) { e.preventDefault(); var id = $( this ).data( 'id' ); var data = { status : $( this ).data( 'status' ) }; sure.init( '确定更新状态吗?' , function () { $.post( Param.uri.update + id , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code != 0 ) { tips.error( res.msg ); return false; } tips.success( res.msg ); $( '#dataGrid' ).TableGrid( 'reload' ); } ); } ); } ); $( document ).on( 'click' , '.setSelectStatusBtn' , function ( e ) { e.preventDefault(); console.log( $( '.checker:checked' ).serializeJSON() ); var ids = $( '.checker:checked' ).serializeJSON().selectChecker; if ( empty( ids ) ) { tips.error( '请选择要操作的商品' ); return false; } var data = { ids : ids , status : $( this ).data( 'status' ) }; $.post( Param.uri.updateByIds , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code != 0 ) { tips.error( res.msg ); return false; } tips.success( res.msg ); $( '#dataGrid' ).TableGrid( 'reload' ); } ); } ); //设置为封面 $( document ).on( 'click' , '.setCoverBtn' , function ( e ) { e.preventDefault(); var data = { id : $( this ).data( 'id' ) }; $.get( Param.uri.setIconCover , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code != 0 ) { tips.error( res.msg ); return false; } tips.success( res.msg ); $( '#iconGrid' ).TableGrid( 'reload' ); } ); } ); //删除图片 $( document ).on( 'click' , '.destroyIconBtn' , function ( e ) { e.preventDefault(); var data = { ids : $( this ).data( 'id' ) }; sure.init( '确认删除图片吗?' , function () { $.post( Param.uri.destroyIcon , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code != 0 ) { tips.error( res.msg ); return false; } tips.success( res.msg ); $( '#iconGrid' ).TableGrid( 'reload' ); } ); } ); } ); $( document ).on( 'click' , '.setCommentStatusBtn' , function ( e ) { e.preventDefault(); var data = { status : $( this ).data( 'status' ) }; $.post( Param.uri.updateComments + $( this ).data( 'id' ) , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code != 0 ) { tips.error( res.msg ); return false; } tips.success( res.msg ); $( '#commentsGrid' ).TableGrid( 'reload' ); } ); } ); } , //添加图片 insertIcon : function ( uri ) { var data = { goods_id : this.config.id , uri : uri }; $.post( Param.uri.insertIcon , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code != 0 ) { tips.error( res.msg ); return false; } tips.success( res.msg ); $( '#iconGrid' ).TableGrid( 'reload' ); } ); } , //初始化grid initGrid : function () { var uri = Param.uri.this + '?' + $.param( Param.query ); history.replaceState( Param.query , '' , uri ); $( '#dataGrid' ).TableGrid( { uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function ( row ) { if ( row.status != 1 ) { return 'warning'; } } , loadSuccess : function ( rows , settings ) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param( settings.param ); if ( oldUri == uri ) { return false; } var params = $.getUrlParams( window.location.href ); history.pushState( params , '' , oldUri ); history.replaceState( settings.param , '' , uri ); } } ); } , initIconGrid : function () { var self = this; $( '#iconGrid' ).TableGrid( { uri : Param.uri.readIcon , param : Param.queryIcon , loadAfterInit : false , pagination : false } ); } , initOrderGrid : function () { $( '#orderGrid' ).TableGrid( { uri : Param.uri.readOrder , param : Param.queryOrder , loadAfterInit : false } ); } , initCommentsGrid : function () { $( '#commentsGrid' ).TableGrid( { uri : Param.uri.readComments , param : Param.queryComments , loadAfterInit : false } ); } , }; //pop state 事件 window.onpopstate = function ( event ) { if ( event && event.state ) { $( '#searchForm' ).reloadForm( event.state ); var $dataGrid = $( '#dataGrid' ); $dataGrid.TableGrid( 'setParam' , event.state ); $dataGrid.TableGrid( 'reload' ); } }; var statusColor = { "-1" : 'bg-red' , "0" : 'label-primary' , "1" : 'label-default' }; var formatStatus = function ( value ) { return '' + Param.status[ value ] + ''; }; var formatGoodsIcon = function ( value ) { if ( empty( value ) ) { return ''; } var uri = Param.uri.img + get_thumb( value , 160 ); return ''; }; var formatName = function ( value , row ) { var html = '[' + row.catalog_text + ']'; html += '' + row.name + ' '; if ( ! empty( row.pid ) ) { html += '#' + row.pid + ''; } if ( row.recommend == 1 ) { html += ' '; } if ( row.hot == 1 ) { html += ' '; } if ( row.cheap == 1 ) { html += ' '; } return html; }; var optSetStatus = function ( _ , row ) { if ( row.status != 1 ) { return '' + ' 上架'; } return '' + ' 下架'; }; var formatCover = function ( value ) { if ( value == 1 ) { return ''; } return ''; }; var optIconDefault = function ( _ , row ) { if ( row.is_cover == 0 ) { return '' + ' 设为封面 '; } return ''; }; var optDestroy = function ( _ , row ) { return '' + ' 删除 '; }; var formatCommentStatus = function ( value ) { return '' + Param.commentStatus[ value ] + ''; }; var optCommentStatus = function ( _ , row ) { if ( row.status == 0 ) { return '' + ' 审核通过'; } else { return '' + ' 取消审核'; } }; ================================================ FILE: resources/assets/static/js/mp/MerGoodsCatalog.js ================================================ /** * MerGoodsCatalog JS * * @author MR.Z * @version 2.0 , 2016-10-11 */ var MerGoodsCatalog = { config : {} , init : function () { //重新设置菜单 if ( ! empty( Param.uri.menu ) ) { Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri="' + Param.uri.menu + '"]' ); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); } , //初始化查询form initSearchForm : function () { var $searchForm = $( '#searchForm' ); $searchForm.reloadForm( Param.query ); //查询按钮 $( '#searchBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var $treeGrid = $( '#treeGrid' ); var param = $treeGrid.TreeGrid( 'getParam' ); param = $.extend( {} , param , $( '#searchForm' ).serializeObject() ); param.page = 1; $treeGrid.TreeGrid( 'setParam' , param ); $treeGrid.TreeGrid( 'reload' ); } ); } , //显示 portlet setPortletShow : function ( type ) { var $tablePortlet = $( '#tablePortlet' ); var $addEditPortlet = $( '#addEditPortlet' ); $tablePortlet.slideUp( 'fast' ); if ( type == 'add' ) { if ( ! $addEditPortlet.hasClass( 'blue' ) ) { $addEditPortlet.removeClass( 'green-meadow' ).addClass( 'blue' ); } $addEditPortlet.find( '.caption-subject' ).html( '新增 ' + Param.pageTitle ); } else if ( type == 'edit' ) { if ( ! $addEditPortlet.hasClass( 'green-meadow' ) ) { $addEditPortlet.removeClass( 'blue' ).addClass( 'green-meadow' ); } $addEditPortlet.find( '.caption-subject' ).html( '编辑 ' + Param.pageTitle ); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); } , //关闭 portlet setPortletHide : function () { $( '#tablePortlet' ).slideDown( 'fast' ); $( '#addEditPortlet' ).slideUp( 'fast' ); } , //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $( '#addNewBtn' ).on( 'click' , function ( e ) { e.preventDefault(); self.setPortletShow( 'add' ); var $form = $( '#addEditForm' ); $form.reloadForm( Param.defaultRow ); setImgPreview.clear( 'icon' ); setImgPreview.clear( 'icon' ); $form.attr( 'action' , Param.uri.insert ); } ); //编辑按钮 $( document ).on( 'click' , '.editBtn' , function ( e ) { e.preventDefault(); self.setPortletShow( 'edit' ); var id = $( this ).data( 'id' ); var row = $( '#treeGrid' ).TreeGrid( 'getRow' , id ); var $form = $( '#addEditForm' ); $form.reloadForm( row ); setImgPreview.set( 'icon' , row.icon ); setImgPreview.set( 'icon' , row.icon ); setImgPreview.set( 'icon' , row.icon ); $form.attr( 'action' , Param.uri.update + row.id ); } ); //删除一行 $( document ).on( 'click' , '.destroyBtn' , function ( e ) { e.preventDefault(); var id = $( this ).data( 'id' ); self.delData( id ); } ); $( '#destroySelectBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var ids = $( '.checker:checked' ).serializeJSON().selectChecker; if ( empty( ids ) ) { tips.error( '请选择要删除的记录' ); return; } self.delData( ids ); } ); //提交添加编辑窗 $( '#submitFormBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var $form = $( '#addEditForm' ); if ( $form.validForm() ) { var data = $form.serializeObject(); $.post( $form.attr( 'action' ) , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code == 1001 ) { //需要登录 tips.error( '请先登录' ); } else if ( res.code != 0 ) { tips.error( res.msg ); } else { tips.success( res.msg ); $( '#treeGrid' ).TreeGrid( 'reload' ); self.setPortletHide(); } } ); } } ); //关闭添加编辑窗 $( '#closePortletBtn' ).on( 'click' , function ( e ) { e.preventDefault(); self.setPortletHide(); } ); //上传按钮 $( '#iconUploadBtn' ).Uploader( { uri : Param.uri.upload , //上传文件 param : Param.uploadParam , album : true , albumUri : Param.uri.album , albumCatalogUri : Param.uri.albumCatalog , albumParam : Param.albumParam , onSuccess : function ( ret ) { tips.success( ret.msg ); if ( ret.code == 0 ) { setImgPreview.set( 'icon' , ret.data.savePath ); } } , onChooseAlbum : function ( uri ) { setImgPreview.set( 'icon' , uri ); } } ); } , delData : function ( ids ) { var self = this; var data = { ids : ids }; sure.init( '是否删除?' , function () { $.post( Param.uri.destroy , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code == 1001 ) { //需要登录 tips.error( '请先登录' ); } else if ( res.code != 0 ) { tips.error( res.msg ); } else { tips.success( res.msg ); $( '#treeGrid' ).TreeGrid( 'reload' ); } } ); } ); } , //初始化tree grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param( Param.query ); history.replaceState( Param.query , '' , uri ); $( '#treeGrid' ).TreeGrid( { uri : Param.uri.read , field : 'text' , //显示箭头的字段 param : Param.query , //查询参数 rowStyle : function ( row ) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function ( rows , settings ) { var options = ''; options += form_options_rows( rows , settings ); $( 'select[name="pid"]' ).html( options ); var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param( settings.param ); if ( oldUri == uri ) { return false; } var params = $.getUrlParams( window.location.href ); history.pushState( params , '' , oldUri ); history.replaceState( settings.param , '' , uri ); } } ); } }; //pop state 事件 window.onpopstate = function ( event ) { if ( event && event.state ) { $( '#searchForm' ).reloadForm( event.state ); var $treeGrid = $( '#treeGrid' ); $treeGrid.TreeGrid( 'setParam' , event.state ); $treeGrid.TreeGrid( 'reload' ); } }; var typeColor = { goods : 'default' , virtual : 'primary' , service : 'success' }; ================================================ FILE: resources/assets/static/js/mp/MerOrder.js ================================================ /** * MerOrder JS * * @author MR.Z * @version 2.0 , 2016-09-18 */ var MerOrder = { config : { row : null , } , init : function () { //重新设置菜单 if ( ! empty( Param.uri.menu ) ) { Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri="' + Param.uri.menu + '"]' ); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); this.initItemsGrid(); this.initLogsGrid(); } , //初始化查询form initSearchForm : function () { var $searchForm = $( '#searchForm' ); $searchForm.reloadForm( Param.query ); //查询按钮 $( '#searchBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var $dataGrid = $( '#dataGrid' ); var param = $dataGrid.TableGrid( 'getParam' ); param = $.extend( {} , param , $( '#searchForm' ).serializeObject() ); param.page = 1; $dataGrid.TableGrid( 'setParam' , param ); $dataGrid.TableGrid( 'reload' ); } ); } , //显示 portlet setPortletShow : function ( type ) { var $tablePortlet = $( '#tablePortlet' ); var $addEditPortlet = $( '#addEditPortlet' ); $tablePortlet.slideUp( 'fast' ); if ( type == 'add' ) { if ( ! $addEditPortlet.hasClass( 'blue' ) ) { $addEditPortlet.removeClass( 'green-meadow' ).addClass( 'blue' ); } $addEditPortlet.find( '.caption-subject' ).html( '新增 ' + Param.pageTitle ); } else if ( type == 'edit' ) { if ( ! $addEditPortlet.hasClass( 'green-meadow' ) ) { $addEditPortlet.removeClass( 'blue' ).addClass( 'green-meadow' ); } $addEditPortlet.find( '.caption-subject' ).html( '编辑 ' + Param.pageTitle ); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); } , //关闭 portlet setPortletHide : function () { $( '#tablePortlet' ).slideDown( 'fast' ); $( '#addEditPortlet' ).slideUp( 'fast' ); } , //初始化各种按钮 initBtn : function () { var self = this; //编辑按钮 $( document ).on( 'click' , '.editBtn' , function ( e ) { e.preventDefault(); self.setPortletShow( 'edit' ); var id = $( this ).data( 'id' ); var row = $( '#dataGrid' ).TableGrid( 'getRow' , id ); self.config.row = row; //var $form = $( '#addEditForm' ); $( '.orderTab a:first' ).tab( 'show' ); $( '.orderDetail' ).FillValue( 'reload' , row ); Param.queryItems[ 'orderId' ] = id; var $itemsGrid = $( '#itemsGrid' ); $itemsGrid.TableGrid( 'setParam' , Param.queryItems ); $itemsGrid.TableGrid( 'reload' ); Param.queryLogs[ 'orderId' ] = id; var $logsGrid = $( '#logsGrid' ); $logsGrid.TableGrid( 'setParam' , Param.queryLogs ); $logsGrid.TableGrid( 'reload' ); } ); //提交添加编辑窗 $( '#submitFormBtn' ).on( 'click' , function ( e ) { e.preventDefault(); var $form = $( '#addEditForm' ); if ( $form.validForm() ) { var data = $form.serializeObject(); $.post( $form.attr( 'action' ) , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code == 1001 ) { //需要登录 tips.error( '请先登录' ); } else if ( res.code != 0 ) { tips.error( res.msg ); } else { tips.success( res.msg ); $( '#dataGrid' ).TableGrid( 'reload' ); self.setPortletHide(); } } ); } } ); //关闭添加编辑窗 $( '.closePortletBtn' ).on( 'click' , function ( e ) { e.preventDefault(); self.setPortletHide(); } ); $( document ).on( 'click' , '.changeStatusBtn' , function ( e ) { e.preventDefault(); var id = $( this ).data( 'id' ); var data = { status : $( this ).data( 'status' ) }; sure.init( '确定修改订单状态吗?' , function () { $.post( Param.uri.changeStatus + id , data ) .fail( function ( res ) { tips.error( res.responseText ); } ) .done( function ( res ) { if ( res.code != 0 ) { tips.error( res.msg ); return false; } $( '#dataGrid' ).TableGrid( 'reload' ); self.config.row.status = data.status; $( '.orderDetail' ).FillValue( 'reload' , self.config.row ); } ); } ); } ); } , //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param( Param.query ); history.replaceState( Param.query , '' , uri ); $( '#dataGrid' ).TableGrid( { uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function ( row ) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function ( rows , settings ) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param( settings.param ); if ( oldUri == uri ) { return false; } var params = $.getUrlParams( window.location.href ); history.pushState( params , '' , oldUri ); history.replaceState( settings.param , '' , uri ); } } ); } , //初始化itemsGrid initItemsGrid : function () { $( '#itemsGrid' ).TableGrid( { uri : Param.uri.read_items , param : Param.queryItems , loadAfterInit : false , pagination : false } ); } , //初始化logsGrid initLogsGrid : function () { $( '#logsGrid' ).TableGrid( { uri : Param.uri.read_logs , param : Param.queryItems , loadAfterInit : false , } ); } , }; //pop state 事件 window.onpopstate = function ( event ) { if ( event && event.state ) { $( '#searchForm' ).reloadForm( event.state ); var $dataGrid = $( '#dataGrid' ); $dataGrid.TableGrid( 'setParam' , event.state ); $dataGrid.TableGrid( 'reload' ); } }; var formatOrderNo = function ( value , row ) { return value + '
    ' + row.created_at + ''; }; var formatUser = function ( value , row ) { return row.nickname + '
    ' + row.phone + '' }; var formatAddress = function ( value , row ) { return row.address_name + '
    ' + '' + row.address_phone + '
    ' + '' + row.address_area_text + row.address + ' '; }; var formatChannel = function ( value ) { return Param.payChannel[ value ]; }; var formatCurrency = function ( value ) { return Param.currency[ value ]; }; var colorStatus = { 0 : 'default' , 10 : FLAT_BG_COLOR.green_jungle , 20 : FLAT_BG_COLOR.blue , 21 : FLAT_BG_COLOR.blue_madison , 22 : FLAT_BG_COLOR.blue_hoki , 29 : FLAT_BG_COLOR.blue_steel , 30 : FLAT_BG_COLOR.red , 31 : FLAT_BG_COLOR.red_thunderbird , 32 : FLAT_BG_COLOR.grey_silver , 39 : FLAT_BG_COLOR.yellow , 99 : "dark" }; var formatStatus = function ( value ) { return '' + Param.status[ value ] + ''; }; var formatRemark = function ( value , row ) { var userRemark = empty( row.user_remark ) ? '' : row.user_remark; var sysRemark = empty( row.sys_remark ) ? '' : row.sys_remark; return '' + userRemark + '
    ' + '' + sysRemark; }; var optDetail = function ( _ , row ) { return '' + ' 详情'; }; var formatChangeStatus = function ( value , row ) { var flowTo = Param.flow[ value ].flow; if ( empty( flowTo ) ) { return ''; } console.log( flowTo ); var html = ''; for ( var index in flowTo ) { if ( ! flowTo.hasOwnProperty( index ) ) { continue; } var statusTo = flowTo[ index ]; var statusText = Param.status[ statusTo ]; var color = colorStatus[ statusTo ]; html += '' + statusText + ' '; } return html; }; ================================================ FILE: resources/assets/static/js/mp/MerUser.js ================================================ /** * MerUser JS * * @author MR.Z * @version 2.0 , 2016-09-16 */ var MerUser = { token : $('input[name=_token]').val(), init : function () { //重新设置菜单 if ( ! empty(Param.uri.menu) ) { Layout.setSidebarMenuActiveLink('set' , 'a[data-uri="' + Param.uri.menu + '"]'); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); } , //初始化查询form initSearchForm : function () { var $searchForm = $('#searchForm'); $searchForm.reloadForm(Param.query); //查询按钮 $('#searchBtn').on('click' , function (e) { e.preventDefault(); var $dataGrid = $('#dataGrid'); var param = $dataGrid.TableGrid('getParam'); param = $.extend({} , param , $('#searchForm').serializeObject()); param.page = 1; $dataGrid.TableGrid('setParam' , param); $dataGrid.TableGrid('reload'); }); } , //显示 portlet setPortletShow : function (type) { var $tablePortlet = $('#tablePortlet'); var $addEditPortlet = $('#addEditPortlet'); $tablePortlet.slideUp('fast'); if ( type == 'add' ) { if ( ! $addEditPortlet.hasClass('blue') ) { $addEditPortlet.removeClass('green-meadow').addClass('blue'); } $addEditPortlet.find('.caption-subject').html('新增 ' + Param.pageTitle); } else if ( type == 'edit' ) { if ( ! $addEditPortlet.hasClass('green-meadow') ) { $addEditPortlet.removeClass('blue').addClass('green-meadow'); } $addEditPortlet.find('.caption-subject').html('编辑 ' + Param.pageTitle); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); } , //关闭 portlet setPortletHide : function () { $('#tablePortlet').slideDown('fast'); $('#addEditPortlet').slideUp('fast'); } , //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $('#addNewBtn').on('click' , function (e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm(Param.defaultRow); setImgPreview.clear('icon'); setImgPreview.clear('icon'); $form.attr('action' , Param.uri.insert); }); //编辑按钮 $(document).on('click' , '.editBtn' , function (e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#dataGrid').TableGrid('getRow' , id); var $form = $('#addEditForm'); $form.reloadForm(row); setImgPreview.set('icon' , row.icon); setImgPreview.set('icon' , row.icon); setImgPreview.set('icon' , row.icon); $form.attr('action' , Param.uri.update + '/'+ row.id); }); //删除一行 $(document).on('click' , '.destroyBtn' , function (e) { e.preventDefault(); var id = $(this).data('id'); self.delData(id); }); $('#destroySelectBtn').on('click' , function (e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if ( empty(ids) ) { tips.error('请选择要删除的记录'); return; } self.delData(ids); }); //提交添加编辑窗 $('#submitFormBtn').on('click' , function (e) { e.preventDefault(); var $form = $('#addEditForm'); if ( $form.validForm() ) { var data = $form.serializeObject(); data._token = self.token; $.post($form.attr('action') , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if ( res.code != 0 ) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); self.setPortletHide(); } }); } }); //关闭添加编辑窗 $('#closePortletBtn').on('click' , function (e) { e.preventDefault(); self.setPortletHide(); }); //上传按钮 $('#iconUploadBtn').Uploader({ uri : Param.uri.upload , //上传文件 param : Param.uploadParam , album : true , albumUri : Param.uri.album , albumCatalogUri : Param.uri.albumCatalog , albumParam : Param.albumParam , onSuccess : function (ret) { tips.success(ret.msg); if ( ret.code == 0 ) { setImgPreview.set('icon' , ret.data.uri); } } , onChooseAlbum : function (uri) { setImgPreview.set('icon' , uri); } }); $(document).on('click' , '.resetPwdBtn' , function(e){ e.preventDefault(); var id = $(this).data('id'); sure.init('重置密码为' + Param.resetPwd , function () { $.get( Param.uri.resetPwd + '/'+ id ) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code != 0 ) { tips.error( res.msg ); } tips.success( res.msg ); }); }) }) } , delData : function (ids) { var self = this; var data = { ids : ids, _token : this.token }; sure.init('是否删除?' , function () { $.post(Param.uri.destroy , data) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if ( res.code != 0 ) { tips.error(res.msg); } else { tips.success(res.msg); $('#dataGrid').TableGrid('reload'); } }); }); } , //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query , '' , uri); $('#dataGrid').TableGrid({ uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function (row) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function (rows , settings) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if ( oldUri == uri ) { return false; } var params = $.getUrlParams(window.location.href); history.pushState(params , '' , oldUri); history.replaceState(settings.param , '' , uri); } }); } }; //pop state 事件 window.onpopstate = function (event) { if ( event && event.state ) { $('#searchForm').reloadForm(event.state); var $dataGrid = $('#dataGrid'); $dataGrid.TableGrid('setParam' , event.state); $dataGrid.TableGrid('reload'); } }; var optResetPwd = function (value , row ) { return ''; }; var formatName = function( value , row ){ var gender = ' '; if ( row.sex == 1 ) { gender += ''; } if ( row.sex == 2 ) { gender += ''; } return row.nickname + gender +'
    ' + row.phone + ''; }; var formatRegFrom = function (value) { return Param.regFrom[ value ]; }; ================================================ FILE: resources/assets/static/plugins/dmg-ui/AreaSelection.js ================================================ /** * 区域选择 * * @author Zix * @version 1.0 2016-05-18 */ ;(function ($) { var areaSelectionTmp = '' + '' + '' + ''; var areaSelectionModal = '
    ' + '' + '
    ' + '
    ' + '
    ' + '
      ' + '
    ' + '
    ' + '
      ' + '
      ' + '
        '; var areaItemTmp = '
      • {text}
      • '; //初始化页面 var _initAreaSelection = function ($this , index) { var settings = $this.data('areaSelection'); settings.area = [0 , 0 , 0]; $this.data('areaSelection' , settings); //添加选择按钮 $this.wrap('
        '); $this.after(areaSelectionTmp.replace(/\{index}/g , index)); $('#areaName' + index).val(settings.fullAreaName); //添加选择弹窗 var $areaSelection = $('.area-selection'); if ( $areaSelection.length == 0 ) { $('body').append(areaSelectionModal.replace(/\{index}/g , index)); } $areaSelection = $('#areaSelection' + index); //选择按钮事件 var $areaSelectionBtn = $('#areaSelectionBtn' + index); $areaSelectionBtn.on('click' , function (e) { e.preventDefault(); $('#areaSelection' + index).show(); //定位 var pos = $(this).offset(); var width = $areaSelection.width(); $areaSelection.css({ top : (pos.top + $(this).height() + 15) + 'px' , left : (pos.left - width + 60) + 'px' , }); }); //关闭按钮事件 $('.area-close-btn').on('click' , function (e) { e.preventDefault(); $(this).parents('.area-selection').hide(); }); $(document).on('click' , '.area_item' , function (e) { e.preventDefault(); var level = $(this).data('level'); var id = $(this).data('id'); var text = $(this).html(); var $areaTab1 = $('#areaTab1' + index); var $areaTab2 = $('#areaTab2' + index); var $areaTab3 = $('#areaTab3' + index); if ( level == 1 ) { $areaTab1.html(text); $areaTab2.trigger('click'); setContent2($this , index , id); } if ( level == 2 ) { $areaTab2.html(text); $areaTab3.tab('show'); setContent3($this , index , id); } if ( level == 3 ) { settings.area[2] = id; $areaTab3.html(text); $(this).val(id); $('.area-close-btn').trigger('click'); var name = $areaTab1.html() + $areaTab2.html() + $areaTab3.html(); $('#areaName' + index).val(name); $this.val(id); } }); var $areaTab = $('#areaTab' + index); $areaTab.find('a').on('click' , function (e) { e.preventDefault(); var level = $(this).data('level'); settings = $this.data('areaSelection'); if ( level == 1 ) { setContent1($this , index); } else if ( level == 2 ) { setContent2($this , index , settings.area[0]); settings.area[1] = 0; settings.area[2] = 0; } else { setContent3($this , index , settings.area[1]); settings.area[2] = 0; } $this.data('areaSelection' , settings); }); setContent1($this , index); }; var setContent1 = function ($this , index) { var settings = $this.data('areaSelection'); var $areaContent1 = $('#areaContent1' + index); var $areaContent2 = $('#areaContent2' + index); var $areaContent3 = $('#areaContent3' + index); var $areaTab1 = $('#areaTab1' + index); var $areaTab2 = $('#areaTab2' + index); var $areaTab3 = $('#areaTab3' + index); var id = settings.area[0]; if ( $areaContent1.find('ul').html() == '' ) { //初始化数据 $.get(settings.uri + 0) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { var html = []; var defaultRow = {}; $.each(res.data , function (i , row) { if ( id > 0 && row.id == id ) { defaultRow = row; } else if ( i == 0 ) { defaultRow = row; } html.push(areaItemTmp.replace(/\{id}/g , row.id) .replace(/\{text}/g , row.text) .replace(/\{level}/g , row.level)); }); settings.area[0] = defaultRow.id; $this.data('areaSelection' , settings); $areaTab1.html(defaultRow.text); $areaTab2.html('请选择'); $areaTab3.html(''); $areaContent1.find('ul').html(html.join('')); $areaContent2.find('ul').html(''); $areaContent3.find('ul').html(''); setContent2($this , index , defaultRow.id); }); } else { $areaTab2.html('请选择'); $areaTab3.html(''); $areaContent2.find('ul').html(''); $areaContent3.find('ul').html(''); } }; var setContent2 = function ($this , index , pid) { var settings = $this.data('areaSelection'); var $areaContent2 = $('#areaContent2' + index); var $areaContent3 = $('#areaContent3' + index); var $areaTab2 = $('#areaTab2' + index); var $areaTab3 = $('#areaTab3' + index); var id = settings.area[0]; if ( $areaContent2.find('ul').html() == '' || id != pid ) { //初始化数据 $.get(settings.uri + pid) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { var html = []; $.each(res.data , function (i , row) { html.push(areaItemTmp.replace(/\{id}/g , row.id) .replace(/\{text}/g , row.text) .replace(/\{level}/g , row.level)); }); $areaTab2.html('请选择'); $areaTab3.html(''); $areaContent2.find('ul').html(html.join('')); $areaContent3.find('ul').html(''); }); } }; var setContent3 = function ($this , index , pid) { var settings = $this.data('areaSelection'); var $areaContent3 = $('#areaContent3' + index); var $areaTab3 = $('#areaTab3' + index); var id = settings.area[1]; if ( $areaContent3.find('ul').html() == '' || id != pid ) { $.get(settings.uri + pid) .fail(function (res) { tips.error(res.responseText); }) .done(function (res) { var html = []; $.each(res.data , function (i , row) { html.push(areaItemTmp.replace(/\{id}/g , row.id) .replace(/\{text}/g , row.text) .replace(/\{level}/g , row.level)); }); $areaTab3.html('请选择'); $areaContent3.find('ul').html(html.join('')); }); } }; //插件的方法 var methods = { //初始化 init : function (options) { return this.each(function (index) { var $this = $(this); var settings = $this.data('areaSelection'); if ( typeof(settings) == 'undefined' ) { //默认值 var defaults = { uri : '' , fullAreaName : '' , area : [0 , 0 , 0] , onError : function (error) { tips.error(error); } , onProgress : function (e) { } , onSuccess : function () { } }; settings = $.extend({} , defaults , options); $this.data('areaSelection' , settings); } else { settings = $.extend({} , settings , options); } //初始化area_selection _initAreaSelection($this , index); }); } , setAreaName : function (fullAreaName) { $(this).next().val(fullAreaName); } }; //插件入口 $.fn.AreaSelection = function () { var method = arguments[0]; if ( methods[method] ) { method = methods[method]; arguments = Array.prototype.slice.call(arguments , 1); } else if ( typeof(method) == 'object' || ! method ) { method = methods.init; } else { return this; } return method.apply(this , arguments); } })(jQuery); ================================================ FILE: resources/assets/static/plugins/dmg-ui/TableGrid.js ================================================ /** * FIT Table Grid * * @author Zix * @version 2.0 , 2016-05-03 */ ;(function ( $ ) { //保存数据 //var fit_grid = []; //构建页面数据 var _initGrid = function ( $this ) { var settings = $this.data( 'table_grid' ); //是否有全选 if ( settings.selectAll ) { var checker_html = ''; $this.find( 'tr' ).prepend( checker_html ); } //重新渲染表头 var org_html = "" + $this.find( 'tr' ).html() + ""; $this.html( org_html ); //检查是否可排序 $this.find( 'th' ).each( function () { if ( ! empty( $( this ).data( 'sorting' ) ) ) { $( this ).addClass( 'sorting' ); } } ); //排序事件 $( document ).on( 'click' , '.sorting , .sort_asc , .sort_desc' , function () { settings.param.sort = $( this ).data( 'field' ); if ( $( this ).hasClass( 'sorting' ) ) { settings.param.order = 'asc'; } else if ( $( this ).hasClass( 'sort_asc' ) ) { settings.param.order = 'desc'; } else if ( $( this ).hasClass( 'sort_desc' ) ) { settings.param.order = ''; } $this.data( 'table_grid' , settings ); loadData( $this ); } ); //检查是否有全选 $( '#selectAllChecker' ).on( 'click' , function () { $( '.checker' ).prop( 'checked' , $( this ).prop( 'checked' ) ); } ); //是否有分页 if ( settings.pagination ) { pagination( $this ); } //加载数据 if ( settings.loadAfterInit ) { loadData( $this ); } }; //加载并渲染 function loadData( $this ) { var settings = $this.data( 'table_grid' ); //取数据 $.ajax( { url : settings.uri , data : settings.param , type : "GET" , dataType : 'JSON' , error : function ( XHR ) { tips.error( XHR.status + ' ' + XHR.statusText ); } , success : function ( ret ) { if ( ret.code == 0 ) { //渲染到页面 render( $this , ret ); } else if ( ret.code == 401 ) { tips.error( '请先登录' ); var col_span = $this.find( 'th' ).length; $this.find( 'tbody' ).html( '请先登录 Orz' ); } else { tips.error( ret.msg ); } } } ); } function render( $this , ret ) { var settings = $this.data( 'table_grid' ); var body_html = []; var col_span = $this.find( 'th' ).length; //保存值 $this.data( 'rows' , ret.data.rows ); //fit_grid[index].data = ret.data.rows; settings.total = ret.data.total; settings.totalPage = Math.ceil( ret.data.total / settings.param.pageSize ); $this.data( 'table_grid' , settings ); if ( settings.pagination == true ) { set_pagination_info( $this ); //设置分页 } var has_sort = false; //生成显示的数据 if ( ret.data.rows.length == 0 ) { body_html.push( '暂无数据 @_@' ); } else { for ( var i in ret.data.rows ) { if ( ! ret.data.rows.hasOwnProperty( i ) ) { continue; } var row = ret.data.rows[ i ]; //行样式 var rowStyle = settings.rowStyle( row , i ); rowStyle = empty( rowStyle ) ? '' : rowStyle; body_html.push( '' ); //每格数据及样式 $this.find( 'th' ).each( function () { var self = $( this ); var val = ''; if ( self.hasClass( 'checker_handle' ) ) { //是否有选中 val = ''; } else { var field = self.data( 'field' ); var formatter = self.data( 'formatter' ); //判断是否有排序 if ( isset( self.data( 'sort' ) ) ) { has_sort = true; } val = isset( row[ field ] ) ? row[ field ] : ''; //是否有格式化方法 if ( ! empty( formatter ) ) { val = eval( formatter )( val , row , i ); } } body_html.push( '' + val + '' ); } ); body_html.push( '' ); } } //设置排序 if ( has_sort ) { setSort( $this ); } $this.find( 'tbody' ).html( body_html.join( '' ) ); //加载完成后的操作 settings.loadSuccess( ret.data.rows , settings ); } //分页 function pagination( $this ) { var settings = $this.data( 'table_grid' ); var range = []; for ( var i in settings.pageSizeRange ) { if ( ! settings.pageSizeRange.hasOwnProperty( i ) ) { continue; } var item = settings.pageSizeRange[ i ]; var checked = i == 0 ? 'checked' : ''; range.push( '' ); } var html_tmp = '' + '
        ' + '
        第 ' + '' + '' + '' + ' 页 , 共 {totalPage}
        ' + '
        显示 ' + '' + ' 行 , 共 {total}
        '; //渲染到页面 $this.parent().after( html_tmp.replace( /\{page}/g , settings.param.page ) .replace( /\{totalPage}/g , settings.totalPage ) .replace( /\{total}/g , settings.total ) .replace( /\{pageSize}/g , range.join( '' ) ) ); var $pagination = $this.parent().next( '.row' ); var $pagination_page = $pagination.find( '.pagination_page' ); var $pagination_page_size = $pagination.find( '.pagination_page_size' ); var $pagination_prev = $pagination.find( '.pagination_prev' ); var $pagination_next = $pagination.find( '.pagination_next' ); //页面 $pagination_page.on( 'keyup blur' , function ( e ) { var page = $.trim( $( this ).val() ); var event_type = e.type; //检查是否填入的数组 if ( ! $.isNumeric( page ) || page < 1 || page == settings.param.page || page > settings.total_page ) { e.preventDefault(); return; } //检查回车和失去焦点事件 if ( ( event_type == 'keyup' && e.keyCode == 13) || event_type == 'blur' ) { settings.param.page = page; loadData( $this ); } e.preventDefault(); } ); //向后按钮 $pagination_prev.on( 'click' , function ( e ) { e.preventDefault(); settings.param.page --; $pagination_page.val( settings.param.page ); loadData( $this ); } ); //向前按钮 $pagination_next.on( 'click' , function ( e ) { e.preventDefault(); settings.param.page ++; $pagination_page.val( settings.param.page ); loadData( $this ); } ); //页数输入 $pagination_page_size.on( 'change' , function () { settings.param.page = 1; settings.param.pageSize = $( this ).val(); loadData( $this ); } ); $pagination_page_size.val( settings.param.pageSize ); $pagination_page.val( settings.param.page ); } //设置分页按钮状态 function set_pagination_info( $this ) { var settings = $this.data( 'table_grid' ); var $pagination = $this.parent().next( '.row' ); $pagination.find( '.pagination_page' ).val( settings.param.page ); $pagination.find( '.pagination_page_size' ).val( settings.param.pageSize ); $pagination.find( '.pagination_total' ).html( settings.total ); $pagination.find( '.pagination_total_page' ).html( settings.totalPage ); var $pagination_prev = $pagination.find( '.pagination_prev' ); var $pagination_next = $pagination.find( '.pagination_next' ); $pagination_prev.attr( 'disabled' , false ); $pagination_next.attr( 'disabled' , false ); if ( settings.totalPage == 1 ) { $pagination_prev.attr( 'disabled' , true ); $pagination_next.attr( 'disabled' , true ); return; } if ( settings.param.page == 1 ) { $pagination_prev.attr( 'disabled' , true ); return; } if ( settings.param.page == settings.totalPage ) { $pagination_next.attr( 'disabled' , true ); } } function getSortClass( order ) { switch ( order ) { case '' : return 'sorting'; case 'asc' : return 'sort_asc'; case 'desc' : return 'sort_desc'; default: return 'sorting'; } } //设置排序标示 function setSort( $this ) { var settings = $this.data( 'table_grid' ); var field = empty( settings.param.sort ) ? 'id' : settings.param.sort; var order = empty( settings.param.order ) ? '' : settings.param.order.toLocaleLowerCase(); $this.find( 'th[data-sort]' ).each( function ( index ) { var f = $( this ).data( 'field' ); var orderClass = (f == field) ? getSortClass( order ) : 'sorting'; $( this ).removeClass( 'sorting sort_asc sort_desc' ).addClass( orderClass ); } ); } //插件的方法 var methods = { //初始化 init : function ( options ) { return this.each( function () { var $this = $( this ); var settings = $this.data( 'table_grid' ); if ( typeof(settings) == 'undefined' ) { //默认值 var defaults = { uri : '' , selectAll : false , param : { page : 1 , pageSize : 10 , keyword : '' } , total : 0 , totalPage : 0 , loadAfterInit : true , pagination : true , pageSizeRange : [ 10 , 20 , 50 , 100 ] , rowStyle : function () { return ''; } , loadSuccess : function () {} }; settings = $.extend( {} , defaults , options ); $this.data( 'table_grid' , settings ); } else { settings = $.extend( {} , settings , options ); } //初始化grid _initGrid( $this ); } ); } , //重新加载 reload : function () { loadData( $( this ) ); } , getParam : function () { return $( this ).data( 'table_grid' ).param; } , setParam : function ( param ) { var settings = $( this ).data( 'table_grid' ); settings[ 'param' ] = param; $( this ).data( 'table_grid' , settings ); } , settings : function ( settings ) { var oldSettings = $( this ).data( 'table_grid' ); var newSettings = $.extend( {} , settings , oldSettings ); $( this ).data( 'table_grid' , newSettings ); } , //取单行数据 getRow : function ( id ) { var rows = $( this ).data( 'rows' ); for ( var i = 0 ; i < rows.length ; i ++ ) { var row = rows[ i ]; if ( row.id == id ) { return row; } } } , //取多行数据 getRows : function () { return $( this ).data( 'rows' ); } }; //插件入口 $.fn.TableGrid = function () { var method = arguments[ 0 ]; if ( methods[ method ] ) { method = methods[ method ]; arguments = Array.prototype.slice.call( arguments , 1 ); } else if ( typeof(method) == 'object' || ! method ) { method = methods.init; } else { return this; } return method.apply( this , arguments ); } })( jQuery ); ================================================ FILE: resources/assets/static/plugins/dmg-ui/TreeGrid.js ================================================ /** * FIT Tree Grid * * @author Zix * @version 2.0 , 2016-05-06 */ ; (function($) { //保存数据 //var fit_tree_grid = []; //构建页面数据 var _initTreeGrid = function($this) { var settings = $this.data('tree_grid'); //重新渲染表头 var org_html = "" + $this.find('tr').html() + ""; $this.html(org_html); $(document).on('click', '.level-fa', function(e) { e.preventDefault(); var old_class = 'fa-chevron-down'; var new_class = 'fa-chevron-right'; var expand = false; if ($(this).hasClass('fa-chevron-right')) { old_class = 'fa-chevron-right'; new_class = 'fa-chevron-down'; expand = true; } $(this).removeClass(old_class).addClass(new_class); var $tr = $(this).parents('tr'); var $tbody = $(this).parents('tbody'); var id = $tr.data('id'); if (expand) { expandTr($tbody, id); } else { closeTr($tbody, id); } }); //是否有分页 if (settings.pagination) { pagination($this); } //加载数据 loadData($this); }; function expandTr(tbody, pid) { if (tbody.find('tr[data-pid="' + pid + '"]').length > 0) { tbody.find('tr[data-pid="' + pid + '"]').each(function() { $(this).removeClass('hide') .find('.fa-chevron-right') .removeClass('fa-chevron-right') .addClass('fa-chevron-down'); expandTr(tbody, $(this).data('id')); }); } } function closeTr(tbody, pid) { if (tbody.find('tr[data-pid="' + pid + '"]').length > 0) { tbody.find('tr[data-pid="' + pid + '"]').each(function() { $(this).addClass('hide') .find('.fa-chevron-down') .removeClass('fa-chevron-down') .addClass('fa-chevron-right'); closeTr(tbody, $(this).data('id')); }); } } //加载并渲染 function loadData($this) { var settings = $this.data('tree_grid'); //取数据 $.ajax({ url: settings.uri, data: settings.param, type: "GET", dataType: 'JSON', error: function(XHR) { tips.error(XHR.status + ' ' + XHR.statusText); }, success: function(ret) { var bodyHtml = []; var col_span = $this.find('th').length; if (ret.code == 401) { tips.error('请先登录'); bodyHtml.push('请先登录 Orz'); } if (ret.code == 0) { //保存值 $this.data('rows', ret.data.rows); //生成显示的数据 if (ret.data.rows.length == 0) { bodyHtml.push('暂无数据 @_@'); } else { _makeBody($this, bodyHtml, ret.data.rows, settings); } //加载完成后的操作 settings.loadSuccess(ret.data.rows, settings); //fit_grid[index].data = ret.data.rows; settings.total = ret.data.total; settings.totalPage = Math.ceil(ret.data.total / settings.param.pageSize); $this.data('table_grid', settings); if (settings.pagination == true) { set_pagination_info($this); //设置分页 } } //渲染到页面 $this.find('tbody').html(bodyHtml.join('')); } }); } //分页 function pagination($this) { var settings = $this.data('tree_grid'); var range = []; for (var i in settings.pageSizeRange) { if (!settings.pageSizeRange.hasOwnProperty(i)) { continue; } var item = settings.pageSizeRange[i]; var checked = i == 0 ? 'checked' : ''; range.push(''); } var html_tmp = '' + '
        ' + '
        第 ' + '' + '' + '' + ' 页 , 共 {totalPage}
        ' + '
        显示 ' + '' + ' 行 , 共 {total}
        '; //渲染到页面 $this.parent().after(html_tmp.replace(/\{page}/g, settings.param.page) .replace(/\{totalPage}/g, settings.totalPage) .replace(/\{total}/g, settings.total) .replace(/\{pageSize}/g, range.join(''))); var $pagination = $this.parent().next('.row'); var $pagination_page = $pagination.find('.pagination_page'); var $pagination_page_size = $pagination.find('.pagination_page_size'); var $pagination_prev = $pagination.find('.pagination_prev'); var $pagination_next = $pagination.find('.pagination_next'); //页面 $pagination_page.on('keyup blur', function(e) { var page = $.trim($(this).val()); var event_type = e.type; //检查是否填入的数组 if (!$.isNumeric(page) || page < 1 || page == settings.param.page || page > settings.total_page) { e.preventDefault(); return; } //检查回车和失去焦点事件 if ((event_type == 'keyup' && e.keyCode == 13) || event_type == 'blur') { settings.param.page = page; loadData($this); } e.preventDefault(); }); //向后按钮 $pagination_prev.on('click', function(e) { e.preventDefault(); settings.param.page--; $pagination_page.val(settings.param.page); loadData($this); }); //向前按钮 $pagination_next.on('click', function(e) { e.preventDefault(); settings.param.page++; $pagination_page.val(settings.param.page); loadData($this); }); //页数输入 $pagination_page_size.on('change', function() { settings.param.page = 1; settings.param.pageSize = $(this).val(); loadData($this); }); $pagination_page_size.val(settings.param.pageSize); $pagination_page.val(settings.param.page); } //设置分页按钮状态 function set_pagination_info($this) { var settings = $this.data('tree_grid'); var $pagination = $this.parent().next('.row'); $pagination.find('.pagination_page').val(settings.param.page); $pagination.find('.pagination_page_size').val(settings.param.pageSize); $pagination.find('.pagination_total').html(settings.total); $pagination.find('.pagination_total_page').html(settings.totalPage); var $pagination_prev = $pagination.find('.pagination_prev'); var $pagination_next = $pagination.find('.pagination_next'); $pagination_prev.attr('disabled', false); $pagination_next.attr('disabled', false); if (settings.totalPage == 1) { $pagination_prev.attr('disabled', true); $pagination_next.attr('disabled', true); return; } if (settings.param.page == 1) { $pagination_prev.attr('disabled', true); return; } if (settings.param.page == settings.totalPage) { $pagination_next.attr('disabled', true); } } function _makeBody($this, bodyHtml, rows, settings) { var nodeField = settings['nodeField']; var expandAll = settings.expandAll; for (var i in rows) { if (!rows.hasOwnProperty(i)) { continue; } var row = rows[i]; //行样式 var rowStyle = settings.rowStyle(row, i); rowStyle = empty(rowStyle) ? '' : rowStyle; //是否隐藏 var is_hide = ''; if (row.level > 1 && !settings.expandAll) { is_hide = 'hide'; } bodyHtml.push(''); //每格数据及样式 $this.find('th').each(function() { var self = $(this); var val = ''; var td_class = ''; var field = self.data('field'); var formatter = self.data('formatter'); var sort = self.data('sort'); val = isset(row[field]) ? row[field] : ' '; //是否有格式化方法 if (!empty(formatter)) { val = eval(formatter)(val, row, i); } if (settings.field == field) { td_class = 'level-' + row.level; if (isset(row[nodeField])) { var icon = settings.expandAll ? settings.expandIcon : settings.collapseIcon; val = '' + val; } else { val = '     ' + val; } } bodyHtml.push('' + val + ''); }); bodyHtml.push(''); if (isset(row.children)) { _makeBody($this, bodyHtml, row[nodeField], settings) } } } //插件的方法 var methods = { //初始化 init: function(options) { return this.each(function() { var $this = $(this); var settings = $this.data('tree_grid'); if (typeof(settings) == 'undefined') { //默认值 var defaults = { uri: '', field: 'name', //缩进的字段名 nodeField: 'children', //下级的字段名 expandAll: false, //初始化时是否展开 collapseIcon: 'fa fa-chevron-right', //折叠的图标 expandIcon: 'fa fa-chevron-down', //展开的图标 param: { keyword: '', status: '', page: 1, pageSize: 10, }, total: 0, totalPage: 0, loadAfterInit: true, pagination: true, pageSizeRange: [10, 20, 50, 100], rowStyle: function() { return ''; }, loadSuccess: function() {} }; settings = $.extend({}, defaults, options); } else { settings = $.extend({}, settings, options); } $this.data('tree_grid', settings); //初始化tree grid _initTreeGrid($this); }); }, //重新加载 reload: function() { loadData($(this)); }, getParam: function() { var settings = $(this).data('tree_grid'); return settings['param']; }, setParam: function(param) { var settings = $(this).data('tree_grid'); settings['param'] = param; $(this).data('tree_grid', settings); }, //取单行数据 getRow: function(id) { var rows = $(this).data('rows'); var settings = $(this).data('tree_grid'); return getRowById(id, rows, settings); }, //取多行数据 getRows: function() { return $(this).data('rows'); } }; function getRowById(id, rows, settings) { for (var i = 0; i < rows.length; i++) { var row = rows[i]; if (row.id == id) { return row; } if (isset(row[settings.nodeField])) { var result = getRowById(id, row[settings.nodeField], settings); if (!empty(result)) { return result; } } } } //插件入口 $.fn.TreeGrid = function() { var method = arguments[0]; if (methods[method]) { method = methods[method]; arguments = Array.prototype.slice.call(arguments, 1); } else if (typeof(method) == 'object' || !method) { method = methods.init; } else { return this; } return method.apply(this, arguments); } })(jQuery); ================================================ FILE: resources/assets/static/plugins/dmg-ui/Uploader.js ================================================ /** * */ ;(function ( $ ) { var token = $('input[name=_token]').val(); //var settings = {}; var thisUploadObj = null; //初始化页面 var _initUpload = function ( $this ) { var settings = $this.data( 'uploader' ); //设置上传按钮样式和文本 $this.addClass( settings.btnStyle ).html( settings.btnText ); //模态框的模板 var modalTmp = ''; var previewImageTmp = '图片预览'; var preview_file_tmp = '

        {filename}

        '; /* //上传内容模板 var image_tmp = '图片预览' + '
        ' + '
        ' + '' + '
        ' + '
        '; */ //添加模态框到页面 var $modal = $( '#uploaderModal' ); var $uploaderPreview = $( '#uploaderPreview' ); var $uploaderPreviewImg = null; var $uploaderFile = $( '#uploaderFile' ); if ( $modal.length == 0 ) { $( 'body' ).append( modalTmp ); $modal = $( '#uploaderModal' ); $uploaderPreview = $( '#uploaderPreview' ); $uploaderPreviewImg = null; $uploaderFile = $( '#uploaderFile' ); //选择文件按钮事件 $( '#uploaderPickerBtn' ).on( 'click' , function ( e ) { e.preventDefault(); if ( settings.cropApi ) { settings.cropApi.destroy(); settings.cropApi = null; } $uploaderPreview.empty(); $uploaderFile.trigger( 'click' ); } ); //如果选中的文件 则预览 $uploaderFile.on( 'change' , function ( e ) { var settings = thisUploadObj.data( 'uploader' ); //检查是否支持HTML5上传 if ( ! window.FileReader ) { tips.error( '浏览器不支持HTML5' ); return; } //检查是否是图片 var file = e.target.files[ 0 ]; if ( ! file.type.match( 'image.*' ) ) { //如果是文件 //$uploader_holder.html(file_tmp.replace( /\{filename}/g , file.name)); } else { //如果是图片开始预览 $uploaderPreview.html( previewImageTmp ); $uploaderPreviewImg = $( '#uploaderPreviewImg' ); var reader = new FileReader(); reader.onload = (function ( theFile ) { return function ( ev ) { //获取显示尺寸 $uploaderPreviewImg.show(); $uploaderPreviewImg[ 0 ].src = ev.target.result; $uploaderPreviewImg[ 0 ].onload = function () { var cur_width = $modal.find( '.modal-body' ).width(); var org_width = $uploaderPreviewImg[ 0 ].width; var org_height = $uploaderPreviewImg[ 0 ].height; if ( cur_width > org_width ) { $uploaderPreviewImg.width( org_width ); cur_width = org_width; } else { $uploaderPreviewImg.width( cur_width ); } //检查是否限制了宽和高 //console.log( settings.param ); if ( settings.param.width > 0 && settings.param.height > 0 ) { //检查图片尺寸 if ( org_width < settings.param.width ) { uploaderError( $this , '宽度小于' + settings.param.width ); return; } if ( org_height < settings.param.height ) { uploaderError( $this , '高度小于' + settings.param.height ); return; } //启用 jcrop settings.ratio = cur_width / org_width; var w = parseInt( settings.param.width * settings.ratio ); var h = parseInt( settings.param.height * settings.ratio ); $uploaderPreviewImg.Jcrop( { setSelect : [ 0 , 0 , w , h ] , minSize : [ w , h ] , aspectRatio : settings.param.width / settings.param.height , onChange : setCrop , onSelect : setCrop , onRelease : resetCrop } , function () { settings.cropApi = this; } ); } }; function setCrop( c ) { settings.crop = []; settings.crop.push( c.x ); settings.crop.push( c.y ); settings.crop.push( c.w ); settings.crop.push( c.h ); } function resetCrop() { settings.crop = []; } }; })( file ); reader.readAsDataURL( file ); } } ); //上传按钮 $( '#uploaderUploadBtn' ).on( 'click' , function ( e ) { var settings = thisUploadObj.data( 'uploader' ); e.preventDefault(); var file = $uploaderFile[ 0 ].files[ 0 ]; if ( ! file ) { uploaderError( $this , '请选择上传文件' ); return; } if ( file.size > settings.fileSizeLimit * 1024 ) { uploaderError( $this , '文件超过' + settings.fileSizeLimit + 'KB' ); return; } var fd = new FormData(); fd.append( settings.fileObjName , file ); for ( var key in settings.param ) { if ( ! settings.param.hasOwnProperty( key ) ) { continue; } fd.append( key , settings.param[ key ] ); } fd.append('_token' ,token); //如果是图片 if ( file.type.match( 'image.*' ) ) { //如果是图片,则计算裁剪 if ( settings.param.width > 0 && settings.param.height > 0 ) { if ( settings.crop.length == 0 ) { settings.onError( '请选择裁剪图片' ); return false; } //计算缩放比 var crop = []; var w = parseInt( settings.crop[ 2 ] / settings.ratio ); w = w < settings.param.width ? settings.param.width : w; var h = parseInt( settings.crop[ 3 ] / settings.ratio ); h = h < settings.param.height ? settings.param.height : h; crop.push( parseInt( settings.crop[ 0 ] / settings.ratio ) ); crop.push( parseInt( settings.crop[ 1 ] / settings.ratio ) ); crop.push( w ); crop.push( h ); fd.append( 'crop' , crop.join( ',' ) ); } } var xhr = new XMLHttpRequest(); xhr.open( 'POST' , settings.uri , true ); xhr.upload.addEventListener( "progress" , function ( e ) { loading.start(); settings.onProgress( e ); } ); xhr.addEventListener( "load" , function ( e ) { loading.end(); $( '#uploaderModal' ).modal( 'hide' ); if ( settings.album ) { loadAlbum( thisUploadObj ); } settings.onSuccess( $.parseJSON( e.target.responseText ) ); } ); xhr.addEventListener( "error" , function ( e ) { loading.end(); settings.onError( e.message ); } ); xhr.addEventListener( "abort" , function ( e ) { loading.end(); settings.onError( e.message ); } ); xhr.send( fd ); } ); if ( settings.album ) { initAlbum( $this ); } } //显示模态框 $this.on( 'click' , function ( e ) { $uploaderFile.val('') settings = $( this ).data( 'uploader' ); thisUploadObj = $this; e.preventDefault(); if ( settings.cropApi ) { //如果有裁剪对象 就先销毁 settings.cropApi.destroy(); settings.cropApi = null; } $uploaderPreview.empty(); $modal.modal( 'show' ); } ); }; //初始化相册 var initAlbum = function ( $this ) { var settings = $this.data( 'uploader' ); $this.after( '' ); var $openAlbumBtn = $this.next( 'button' ); var albumModal = ''; var albumTab = '
      • {tag}
      • '; var albumTabContent = '
        ' + '
        ' + '
        ' + '
        '; var $albumModal = $( '#album_modal' ); if ( $albumModal.length == 0 ) { $.get( settings.albumCatalogUri , function ( ret ) { var tab = ''; var content = ''; for ( var i = 0 ; i < ret.length ; i ++ ) { var tabContentId = 'album_tab_content_' + ret[ i ][ 'id' ]; var albumPagId = 'album_pag_' + ret[ i ][ 'id' ]; tab += albumTab.replace( /\{tabContentId}/g , tabContentId ) .replace( /\{catalog}/g , ret[ i ][ 'id' ] ) .replace( /\{tag}/g , ret[ i ][ 'tag' ] ); content += albumTabContent.replace( /\{tabContentId}/g , tabContentId ) .replace( /\{catalog}/g , ret[ i ][ 'id' ] ) .replace( /\{albumPagId}/g , albumPagId ) .replace( /\{tag}/g , ret[ i ][ 'tag' ] ); } var html = albumModal.replace( /\{tab}/g , tab ) .replace( /\{tabContent}/g , content ); $( 'body' ).append( html ); $albumModal = $( '#album_modal' ); //打开album选择 modal $openAlbumBtn.on( 'click' , function ( e ) { e.preventDefault(); $albumModal.modal( 'show' ); } ); //切换tab $albumModal.find( 'a[data-toggle="tab"]' ).on( 'shown.bs.tab' , function ( e ) { settings.albumParam.cur_tab = e.target; $this.data( 'uploader' , settings ); var $target = $( e.target ); var page = $target.data( 'page' ); if ( empty( page ) ) { loadAlbum( $this , $target ); } } ); //设置默认的tab //console.log(settings.param.default_tag); var len = $albumModal.find( 'a[data-toggle="tab"][data-tag="' + settings.albumParam.defaultTag + '"]' ).length; if ( len == 0 ) { $albumModal.find( 'a[data-toggle="tab"]' ).eq( 0 ).tab( 'show' ); } else { $albumModal.find( 'a[data-toggle="tab"][data-tag="' + settings.albumParam.defaultTag + '"]' ) .tab( 'show' ); } } ); } $( document ).on( 'click' , '.album_item img' , function ( e ) { var img_src = $( this ).data( 'src' ); sure.init( '确认选择吗?' , function () { $albumModal.modal( 'hide' ); settings.onChooseAlbum( img_src ); } ); } ); }; //加载相册 function loadAlbum( $this , $target ) { var settings = $this.data( 'uploader' ); if ( ! settings.album ) { return false; } if ( empty( $target ) ) { $target = $( settings.albumParam.cur_tab ); } var page = $target.data( 'page' ); page = empty( page ) ? 1 : page; var catalog = $target.data( 'catalog' ); var albumPagId = 'album_pag_' + $target.data( 'catalog' ); var $albumPag = $( '#' + albumPagId ); var data = { page : page , page_size : settings.albumParam.page_size , catalog : catalog }; loading.start(); $.get( settings.albumUri , data , function ( ret ) { loading.end(); $target.data( 'rows' , ret.rows ); $target.data( 'total' , ret.total ); $target.data( 'page' , page ); //tab_content_id renderImg( $target , ret.rows ); if ( $albumPag.html() == '' ) { var totalPage = Math.ceil( ret.total / settings.albumParam.pageSize ); //console.log( total_page ); $albumPag.bootpag( { total : totalPage , // total pages page : 1 , // default page maxVisible : 5 , // visible pagination leaps : true // next/prev leaps through maxVisible } ).on( "page" , function ( event , num ) { $target.data( 'page' , num ); loadAlbum( $this , $target ); } ); } } ); } //渲染相册 function renderImg( $target , rows ) { var albumImg = '
        ' + '' + '
        {imgSize}
        ' + '
        '; var imgHtml = ''; for ( var i = 0 ; i < rows.length ; i ++ ) { imgHtml += albumImg.replace( /\{icon}/g , Param.uri.img + rows[ i ][ 'uri' ] ) .replace( /\{savePath}/g , rows[ i ][ 'uri' ] ) .replace( /\{imgSize}/g , rows[ i ][ 'img_size' ] ); } var tabContentId = $target.attr( 'href' ); $( tabContentId ).find( '.img_content' ).html( imgHtml ); } var uploaderError = function ( $this , error ) { var settings = $this.data( 'uploader' ); $( '#uploaderForm' )[ 0 ].reset(); settings.onError( error ); }; //插件的方法 var methods = { //初始化 init : function ( options ) { return this.each( function () { var $this = $( this ); var settings = $this.data( 'uploader' ); if ( typeof(settings) == 'undefined' ) { //默认值 var defaults = { uri : '' , btnStyle : 'btn btn-primary btn-sm' , btnText : ' 上传' , fileObjName : 'imgFile' , fileSizeLimit : 2048 , ratio : 1 , crop : [] , param : { width : 0 , height : 0 } , saveAlbum : false , album : false , albumUri : '' , albumCatalogUri : '' , albumParam : { defaultTag : '' , pageSize : 12 } , onChooseAlbum : function () { } , onError : function ( error ) { tips.error( error ); } , onProgress : function ( e ) { } , onSuccess : function () { } }; settings = $.extend( {} , defaults , options ); $this.data( 'uploader' , settings ); } else { settings = $.extend( {} , settings , options ); } //console.log( settings ); //初始化插件 _initUpload( $this ); } ); } , getParam : function () { return $( this ).data( 'uploader' ).param; } , setParam : function ( param ) { var settings = $( this ).data( 'uploader' ); settings[ 'param' ] = param; $( this ).data( 'uploader' , settings ); } }; //插件入口 $.fn.Uploader = function () { var method = arguments[ 0 ]; if ( methods[ method ] ) { method = methods[ method ]; arguments = Array.prototype.slice.call( arguments , 1 ); } else if ( typeof(method) == 'object' || ! method ) { method = methods.init; } else { return this; } return method.apply( this , arguments ); } })( jQuery ); ================================================ FILE: resources/assets/static/plugins/dmg-ui/album.js ================================================ /** * */ ;(function ($) { var settings = {}; //初始化页面 var _init_album = function ($this) { settings = $this.data('album'); var album_btn = ''; $this.after(album_btn); var $open_album_btn = $this.next('button'); var album_modal = ''; var album_tab = '
      • {tag}
      • '; var album_tab_content = '
        ' + '
        ' + '
        ' + '
        '; var $album_modal = $('#album_modal'); if ( $album_modal.length == 0 ) { $.get(settings.album_catalog_uri , function (ret) { var tab = ''; var content = ''; for ( var i = 0 ; i < ret.length ; i ++ ) { var tab_content_id = 'album_tab_content_' + ret[i]['id']; var album_pag_id = 'album_pag_' + ret[i]['id']; tab += album_tab.replace(/\{tab_content_id}/g , tab_content_id) .replace(/\{catalog}/g , ret[i]['id']) .replace(/\{tag}/g , ret[i]['tag']); content += album_tab_content.replace(/\{tab_content_id}/g , tab_content_id) .replace(/\{catalog}/g , ret[i]['id']) .replace(/\{album_pag_id}/g , album_pag_id) .replace(/\{tag}/g , ret[i]['tag']); } var html = album_modal.replace(/\{tab}/g , tab) .replace(/\{tab_content}/g , content); $('body').append( html ); $album_modal = $('#album_modal'); //打开album选择 modal $open_album_btn.on('click' , function(e){ e.preventDefault(); //$album_modal.find('[data-toggle="tab"][data-tag="'+ settings.param.default_album +'"]').tab('show'); $album_modal.modal('show'); }); //切换tab $album_modal.find('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { //e.relatedTarget // previous active tab //e.target // newly activated tab //console.log( e.target ); //console.log( $(e.target).data('catalog') ); settings.param.cur_tab = e.target ; $this.data('album' , settings ); var $target = $(e.target); var page = $target.data('page'); if ( empty(page) ) { load_album( $this , $target ); } }); //设置默认的tab //console.log(settings.param.default_tag); var len = $album_modal.find('a[data-toggle="tab"][data-tag="'+ settings.param.default_tag +'"]').length ; if ( len == 0 ) { $album_modal.find('a[data-toggle="tab"]').eq(0).tab('show'); } else { $album_modal.find('a[data-toggle="tab"][data-tag="'+ settings.param.default_tag +'"]') .tab('show'); } }); } $(document).on('click' , '.album_item img' , function (e) { var img_src = $(this).attr('src') ; sure.init('确认选择吗?' , function(){ $album_modal.modal('hide'); settings.onChoose( img_src ); }); }); }; function load_album( $this , $target ) { settings = $this.data('album'); if ( empty($target) ) { $target = $(settings.param.cur_tab); } var page = $target.data('page'); page = empty(page) ? 1 : page ; var catalog = $target.data('catalog'); var album_pag_id = 'album_pag_' + $target.data('catalog'); var $album_pag = $('#' + album_pag_id ); var data = { page : page , page_size : settings.param.page_size , catalog : catalog }; loading.start(); $.get( settings.album_uri , data , function(ret){ loading.end(); $target.data('rows' , ret.rows ); $target.data('total' , ret.total ); $target.data('page' , page ); //tab_content_id render_img( $target , ret.rows ); if ( $album_pag.html() == '' ) { var total_page = Math.ceil( ret.total / settings.param.page_size ); $album_pag.bootpag({ total: total_page , // total pages page: 1, // default page maxVisible: 5, // visible pagination leaps: true // next/prev leaps through maxVisible }).on("page", function(event, num){ $target.data('page' , num); load_album( $this , $target ); //$("#content").html("Page " + num); // or some ajax content loading... // ... after content load -> change total to 10 //$(this).bootpag({total: 10, maxVisible: 10}); }); } }); } function render_img( $target , rows ) { var album_img = '
        ' + '' + '
        {img_size}
        ' + '
        '; var img_html = ''; for( var i = 0 ; i < rows.length ; i++ ) { img_html += album_img.replace(/\{icon}/g , rows[i]['uri']) .replace(/\{img_size}/g , rows[i]['img_size']); } var tab_content_id = $target.attr('href'); $(tab_content_id).find('.img_content').html(img_html); } //插件的方法 var methods = { //初始化 init : function (options) { return this.each(function () { var $this = $(this); var settings = $this.data('album'); if ( typeof(settings) == 'undefined' ) { //默认值 var defaults = { uri : '' , btnStyle : 'btn btn-info' , btnText : ' 相册选取' , album_uri : '' , album_catalog_uri : '' , param : { default_tag : '' } , onChoose : function () {} }; settings = $.extend({} , defaults , options); $this.data('album' , settings); } else { settings = $.extend({} , settings , options); } //console.log( settings ); //初始化grid _init_album($this); }); } , reload : function () { }, get_param : function () { return $(this).data('album').param; } , set_param : function (param) { var settings = $(this).data('album'); settings['param'] = param; $(this).data('album' , settings); } }; //插件入口 $.fn.Album = function () { var method = arguments[0]; if ( methods[method] ) { method = methods[method]; arguments = Array.prototype.slice.call(arguments , 1); } else if ( typeof(method) == 'object' || ! method ) { method = methods.init; } else { return this; } return method.apply(this , arguments); } })(jQuery); ================================================ FILE: resources/assets/static/plugins/dmg-ui/auto_fill.js ================================================ (function($) { var doFill = function( $this , data ) { //查询 下级全部含有 data-field 的 dom $this.find('div[data-field],textarea[data-field],input[data-field]').each(function(){ var field = $(this).data('field'); var formatter = $(this).data('formatter'); var value = '' ; //如果有值 if ( isset( data[field] ) ) { value = data[field] ; } //如果有格式化函数 if ( !empty( formatter ) ) { value = eval(formatter)( value , data ); } if( $(this)[0].type == 'text' || $(this)[0].type == 'textarea' ) { $(this).val( value ); } else { $(this).html( value ); } }); }; var methods = { init: function(options) { return this.each(function() { var $this = $(this); var settings = $this.data('AutoFill'); if(typeof(settings) == 'undefined') { var defaults = { data: 'value', onSomeEvent: function() {} }; settings = $.extend({}, defaults, options); } else { settings = $.extend({}, settings, options); } $this.data('AutoFill', settings); // 代码在这里运行 doFill( $this , settings.data ); }); }, reload: function( data ) { doFill( $(this) , data ); }, reset : function() { //清除 $(this).find('div[data-field],textarea[data-field],input[data-field]').each(function(){ if( $(this)[0].type == 'text' || $(this)[0].type == 'textarea') { $(this).val( '' ); } else { $(this).html( '' ); } }); } }; $.fn.AutoFill = function() { var method = arguments[0]; if(methods[method]) { method = methods[method]; arguments = Array.prototype.slice.call(arguments, 1); } else if( typeof(method) == 'object' || !method ) { method = methods.init; } else { $.error( 'Method ' + method + ' does not exist on jQuery.pluginName' ); return this; } return method.apply(this, arguments); } })(jQuery); ================================================ FILE: resources/assets/static/plugins/dmg-ui/tiles.js ================================================ /** * JQuery Tiles */ ;(function ($) { //初始化页面 var _init_tiles = function ($this) { var settings = $this.data('tiles'); load_data($this); }; var load_data = function ($this) { var settings = $this.data('tiles'); //console.log( settings ); //取数据 $.ajax({ url : settings.uri , data : settings.param , type : "GET" , dataType : 'JSON' , error : function (XHR) { tips.error(XHR.status + ' ' + XHR.statusText); } , success : function (ret) { if ( ret.code == 0 ) { $this.data('rows' , ret.data.rows); render($this , ret.data.rows); settings.onSuccess( ret.data.rows , settings.param ); } else if ( ret.code = 401 ) { tips.error('请先登录'); body_html.push('请先登录 Orz'); } else { tips.error(ret.msg); } } }); }; var render = function ($this , data) { var settings = $this.data('tiles'); var tiles_container = '
        {tile}
        '; var tile_tmp = '
        ' + '
        {icon}
        ' + '
        ' + '
        {name}
        ' + '
        {action}
        ' + '
        '; var html = []; for ( var i = 0 ; i < data.length ; i ++ ) { var row = data[i]; var tmp_html = tile_tmp; tmp_html = tmp_html.replace('{is_image}' , settings.is_image( row ) ? 'image selected' : ''); tmp_html = tmp_html.replace('{color}' , settings.color); tmp_html = tmp_html.replace('{icon}' , eval(settings.icon)(row , i)); tmp_html = tmp_html.replace('{name}' , eval(settings.name)(row , i)); var link = eval(settings.link)(row , i); if ( empty(link) ) { link = 'javascript:;'; } tmp_html = tmp_html.replace('{link}' , link); var action = ''; for ( var j = 0 ; j < settings.action.length ; j ++ ) { action += eval(settings.action[j])(row , i); } tmp_html = tmp_html.replace('{action}' , action); //填充 html.push(tmp_html); } $this.html( tiles_container.replace( '{tile}' , html.join('') )); }; //插件的方法 var methods = { //初始化 init : function (options) { return this.each(function () { var $this = $(this); var settings = $this.data('tiles'); if ( typeof(settings) == 'undefined' ) { //默认值 var defaults = { uri : '' , param : {} , is_image : '' , color : '' , icon : function () { } , name : function () { } , link : function () { } , action : [] , onError : function (error) { tips.error(error); } , onSuccess : function () { } }; settings = $.extend({} , defaults , options); $this.data('tiles' , settings); } else { settings = $.extend({} , settings , options); } //初始化grid _init_tiles($this); }); } , //重新加载 reload : function () { load_data($(this)); } , get_param : function () { return $(this).data('tiles').param; } , set_param : function (param) { var settings = $(this).data('tiles'); settings['param'] = param; $(this).data('tiles' , settings); } , //取单行数据 get_row : function (id) { var rows = $(this).data('rows'); for ( var i = 0 ; i < rows.length ; i ++ ) { var row = rows[i]; if ( row.id == id ) { return row; } } } , //取多行数据 get_rows : function () { return $(this).data('rows'); } }; //插件入口 $.fn.Tiles = function () { var method = arguments[0]; if ( methods[method] ) { method = methods[method]; arguments = Array.prototype.slice.call(arguments , 1); } else if ( typeof(method) == 'object' || ! method ) { method = methods.init; } else { return this; } return method.apply(this , arguments); } })(jQuery); ================================================ FILE: resources/assets/static/plugins/jquery-md5/jQuery.md5.js ================================================ /** * jQuery MD5 hash algorithm function * * * Calculate the md5 hash of a String * String $.md5 ( String str ) * * * Calculates the MD5 hash of str using the » RSA Data Security, Inc. MD5 Message-Digest Algorithm, and returns that hash. * MD5 (Message-Digest algorithm 5) is a widely-used cryptographic hash function with a 128-bit hash value. MD5 has been employed in a wide variety of security applications, and is also commonly used to check the integrity of data. The generated hash is also non-reversable. Data cannot be retrieved from the message digest, the digest uniquely identifies the data. * MD5 was developed by Professor Ronald L. Rivest in 1994. Its 128 bit (16 byte) message digest makes it a faster implementation than SHA-1. * This script is used to process a variable length message into a fixed-length output of 128 bits using the MD5 algorithm. It is fully compatible with UTF-8 encoding. It is very useful when u want to transfer encrypted passwords over the internet. If you plan using UTF-8 encoding in your project don't forget to set the page encoding to UTF-8 (Content-Type meta tag). * This function orginally get from the WebToolkit and rewrite for using as the jQuery plugin. * * Example * Code * * $.md5("I'm Persian."); * * Result * * "b8c901d0f02223f9761016cfff9d68df" * * * @alias Muhammad Hussein Fattahizadeh < muhammad [AT] semnanweb [DOT] com > * @link http://www.semnanweb.com/jquery-plugin/md5.html * @see http://www.webtoolkit.info/ * @license http://www.gnu.org/licenses/gpl.html [GNU General Public License] * @param {jQuery} {md5:function(string)) * @return string */ (function($){ var rotateLeft = function(lValue, iShiftBits) { return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits)); } var addUnsigned = function(lX, lY) { var lX4, lY4, lX8, lY8, lResult; lX8 = (lX & 0x80000000); lY8 = (lY & 0x80000000); lX4 = (lX & 0x40000000); lY4 = (lY & 0x40000000); lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); if (lX4 & lY4) return (lResult ^ 0x80000000 ^ lX8 ^ lY8); if (lX4 | lY4) { if (lResult & 0x40000000) return (lResult ^ 0xC0000000 ^ lX8 ^ lY8); else return (lResult ^ 0x40000000 ^ lX8 ^ lY8); } else { return (lResult ^ lX8 ^ lY8); } } var F = function(x, y, z) { return (x & y) | ((~ x) & z); } var G = function(x, y, z) { return (x & z) | (y & (~ z)); } var H = function(x, y, z) { return (x ^ y ^ z); } var I = function(x, y, z) { return (y ^ (x | (~ z))); } var FF = function(a, b, c, d, x, s, ac) { a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac)); return addUnsigned(rotateLeft(a, s), b); }; var GG = function(a, b, c, d, x, s, ac) { a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac)); return addUnsigned(rotateLeft(a, s), b); }; var HH = function(a, b, c, d, x, s, ac) { a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac)); return addUnsigned(rotateLeft(a, s), b); }; var II = function(a, b, c, d, x, s, ac) { a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac)); return addUnsigned(rotateLeft(a, s), b); }; var convertToWordArray = function(string) { var lWordCount; var lMessageLength = string.length; var lNumberOfWordsTempOne = lMessageLength + 8; var lNumberOfWordsTempTwo = (lNumberOfWordsTempOne - (lNumberOfWordsTempOne % 64)) / 64; var lNumberOfWords = (lNumberOfWordsTempTwo + 1) * 16; var lWordArray = Array(lNumberOfWords - 1); var lBytePosition = 0; var lByteCount = 0; while (lByteCount < lMessageLength) { lWordCount = (lByteCount - (lByteCount % 4)) / 4; lBytePosition = (lByteCount % 4) * 8; lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition)); lByteCount++; } lWordCount = (lByteCount - (lByteCount % 4)) / 4; lBytePosition = (lByteCount % 4) * 8; lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition); lWordArray[lNumberOfWords - 2] = lMessageLength << 3; lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; return lWordArray; }; var wordToHex = function(lValue) { var WordToHexValue = "", WordToHexValueTemp = "", lByte, lCount; for (lCount = 0; lCount <= 3; lCount++) { lByte = (lValue >>> (lCount * 8)) & 255; WordToHexValueTemp = "0" + lByte.toString(16); WordToHexValue = WordToHexValue + WordToHexValueTemp.substr(WordToHexValueTemp.length - 2, 2); } return WordToHexValue; }; var uTF8Encode = function(string) { string = string.replace(/\x0d\x0a/g, "\x0a"); var output = ""; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { output += String.fromCharCode(c); } else if ((c > 127) && (c < 2048)) { output += String.fromCharCode((c >> 6) | 192); output += String.fromCharCode((c & 63) | 128); } else { output += String.fromCharCode((c >> 12) | 224); output += String.fromCharCode(((c >> 6) & 63) | 128); output += String.fromCharCode((c & 63) | 128); } } return output; }; $.extend({ md5: function(string) { var x = Array(); var k, AA, BB, CC, DD, a, b, c, d; var S11=7, S12=12, S13=17, S14=22; var S21=5, S22=9 , S23=14, S24=20; var S31=4, S32=11, S33=16, S34=23; var S41=6, S42=10, S43=15, S44=21; string = uTF8Encode(string); x = convertToWordArray(string); a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476; for (k = 0; k < x.length; k += 16) { AA = a; BB = b; CC = c; DD = d; a = FF(a, b, c, d, x[k+0], S11, 0xD76AA478); d = FF(d, a, b, c, x[k+1], S12, 0xE8C7B756); c = FF(c, d, a, b, x[k+2], S13, 0x242070DB); b = FF(b, c, d, a, x[k+3], S14, 0xC1BDCEEE); a = FF(a, b, c, d, x[k+4], S11, 0xF57C0FAF); d = FF(d, a, b, c, x[k+5], S12, 0x4787C62A); c = FF(c, d, a, b, x[k+6], S13, 0xA8304613); b = FF(b, c, d, a, x[k+7], S14, 0xFD469501); a = FF(a, b, c, d, x[k+8], S11, 0x698098D8); d = FF(d, a, b, c, x[k+9], S12, 0x8B44F7AF); c = FF(c, d, a, b, x[k+10], S13, 0xFFFF5BB1); b = FF(b, c, d, a, x[k+11], S14, 0x895CD7BE); a = FF(a, b, c, d, x[k+12], S11, 0x6B901122); d = FF(d, a, b, c, x[k+13], S12, 0xFD987193); c = FF(c, d, a, b, x[k+14], S13, 0xA679438E); b = FF(b, c, d, a, x[k+15], S14, 0x49B40821); a = GG(a, b, c, d, x[k+1], S21, 0xF61E2562); d = GG(d, a, b, c, x[k+6], S22, 0xC040B340); c = GG(c, d, a, b, x[k+11], S23, 0x265E5A51); b = GG(b, c, d, a, x[k+0], S24, 0xE9B6C7AA); a = GG(a, b, c, d, x[k+5], S21, 0xD62F105D); d = GG(d, a, b, c, x[k+10], S22, 0x2441453); c = GG(c, d, a, b, x[k+15], S23, 0xD8A1E681); b = GG(b, c, d, a, x[k+4], S24, 0xE7D3FBC8); a = GG(a, b, c, d, x[k+9], S21, 0x21E1CDE6); d = GG(d, a, b, c, x[k+14], S22, 0xC33707D6); c = GG(c, d, a, b, x[k+3], S23, 0xF4D50D87); b = GG(b, c, d, a, x[k+8], S24, 0x455A14ED); a = GG(a, b, c, d, x[k+13], S21, 0xA9E3E905); d = GG(d, a, b, c, x[k+2], S22, 0xFCEFA3F8); c = GG(c, d, a, b, x[k+7], S23, 0x676F02D9); b = GG(b, c, d, a, x[k+12], S24, 0x8D2A4C8A); a = HH(a, b, c, d, x[k+5], S31, 0xFFFA3942); d = HH(d, a, b, c, x[k+8], S32, 0x8771F681); c = HH(c, d, a, b, x[k+11], S33, 0x6D9D6122); b = HH(b, c, d, a, x[k+14], S34, 0xFDE5380C); a = HH(a, b, c, d, x[k+1], S31, 0xA4BEEA44); d = HH(d, a, b, c, x[k+4], S32, 0x4BDECFA9); c = HH(c, d, a, b, x[k+7], S33, 0xF6BB4B60); b = HH(b, c, d, a, x[k+10], S34, 0xBEBFBC70); a = HH(a, b, c, d, x[k+13], S31, 0x289B7EC6); d = HH(d, a, b, c, x[k+0], S32, 0xEAA127FA); c = HH(c, d, a, b, x[k+3], S33, 0xD4EF3085); b = HH(b, c, d, a, x[k+6], S34, 0x4881D05); a = HH(a, b, c, d, x[k+9], S31, 0xD9D4D039); d = HH(d, a, b, c, x[k+12], S32, 0xE6DB99E5); c = HH(c, d, a, b, x[k+15], S33, 0x1FA27CF8); b = HH(b, c, d, a, x[k+2], S34, 0xC4AC5665); a = II(a, b, c, d, x[k+0], S41, 0xF4292244); d = II(d, a, b, c, x[k+7], S42, 0x432AFF97); c = II(c, d, a, b, x[k+14], S43, 0xAB9423A7); b = II(b, c, d, a, x[k+5], S44, 0xFC93A039); a = II(a, b, c, d, x[k+12], S41, 0x655B59C3); d = II(d, a, b, c, x[k+3], S42, 0x8F0CCC92); c = II(c, d, a, b, x[k+10], S43, 0xFFEFF47D); b = II(b, c, d, a, x[k+1], S44, 0x85845DD1); a = II(a, b, c, d, x[k+8], S41, 0x6FA87E4F); d = II(d, a, b, c, x[k+15], S42, 0xFE2CE6E0); c = II(c, d, a, b, x[k+6], S43, 0xA3014314); b = II(b, c, d, a, x[k+13], S44, 0x4E0811A1); a = II(a, b, c, d, x[k+4], S41, 0xF7537E82); d = II(d, a, b, c, x[k+11], S42, 0xBD3AF235); c = II(c, d, a, b, x[k+2], S43, 0x2AD7D2BB); b = II(b, c, d, a, x[k+9], S44, 0xEB86D391); a = addUnsigned(a, AA); b = addUnsigned(b, BB); c = addUnsigned(c, CC); d = addUnsigned(d, DD); } var tempValue = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d); return tempValue.toLowerCase(); } }); })(jQuery); ================================================ FILE: resources/assets/static/src/js/global/app.js ================================================ /** Core script to handle the entire theme and core functions **/ var App = function () { // IE mode var isRTL = false; var isIE8 = false; var isIE9 = false; var isIE10 = false; var resizeHandlers = []; var assetsPath = '../assets/'; var globalImgPath = 'static/themes/global/img/'; var globalPluginsPath = 'global/plugins/'; var globalCssPath = 'global/css/'; // theme layout color set var brandColors = { 'blue' : '#89C4F4' , 'red' : '#F3565D' , 'green' : '#1bbc9b' , 'purple' : '#9b59b6' , 'grey' : '#95a5a6' , 'yellow' : '#F8CB00' }; // initializes main settings var handleInit = function () { if ( $('body').css('direction') === 'rtl' ) { isRTL = true; } isIE8 = ! ! navigator.userAgent.match(/MSIE 8.0/); isIE9 = ! ! navigator.userAgent.match(/MSIE 9.0/); isIE10 = ! ! navigator.userAgent.match(/MSIE 10.0/); if ( isIE10 ) { $('html').addClass('ie10'); // detect IE10 version } if ( isIE10 || isIE9 || isIE8 ) { $('html').addClass('ie'); // detect IE10 version } }; // runs callback functions set by App.addResponsiveHandler(). var _runResizeHandlers = function () { // reinitialize other subscribed elements for ( var i = 0 ; i < resizeHandlers.length ; i ++ ) { var each = resizeHandlers[i]; each.call(); } }; // handle the layout reinitialization on window resize var handleOnResize = function () { var resize; if ( isIE8 ) { var currheight; $(window).resize(function () { if ( currheight == document.documentElement.clientHeight ) { return; //quite event since only body resized not window. } if ( resize ) { clearTimeout(resize); } resize = setTimeout(function () { _runResizeHandlers(); } , 50); // wait 50ms until window resize finishes. currheight = document.documentElement.clientHeight; // store last body client height }); } else { $(window).resize(function () { if ( resize ) { clearTimeout(resize); } resize = setTimeout(function () { _runResizeHandlers(); } , 50); // wait 50ms until window resize finishes. }); } }; // Handles portlet tools & actions var handlePortletTools = function () { // handle portlet remove $('body').on('click' , '.portlet > .portlet-title > .tools > a.remove' , function (e) { e.preventDefault(); var portlet = $(this).closest(".portlet"); if ( $('body').hasClass('page-portlet-fullscreen') ) { $('body').removeClass('page-portlet-fullscreen'); } portlet.find('.portlet-title .fullscreen').tooltip('destroy'); portlet.find('.portlet-title > .tools > .reload').tooltip('destroy'); portlet.find('.portlet-title > .tools > .remove').tooltip('destroy'); portlet.find('.portlet-title > .tools > .config').tooltip('destroy'); portlet.find('.portlet-title > .tools > .collapse, .portlet > .portlet-title > .tools > .expand').tooltip('destroy'); portlet.remove(); }); // handle portlet fullscreen $('body').on('click' , '.portlet > .portlet-title .fullscreen' , function (e) { e.preventDefault(); var portlet = $(this).closest(".portlet"); if ( portlet.hasClass('portlet-fullscreen') ) { $(this).removeClass('on'); portlet.removeClass('portlet-fullscreen'); $('body').removeClass('page-portlet-fullscreen'); portlet.children('.portlet-body').css('height' , 'auto'); } else { var height = App.getViewPort().height - portlet.children('.portlet-title').outerHeight() - parseInt(portlet.children('.portlet-body').css('padding-top')) - parseInt(portlet.children('.portlet-body').css('padding-bottom')); $(this).addClass('on'); portlet.addClass('portlet-fullscreen'); $('body').addClass('page-portlet-fullscreen'); portlet.children('.portlet-body').css('height' , height); } }); $('body').on('click' , '.portlet > .portlet-title > .tools > a.reload' , function (e) { e.preventDefault(); var el = $(this).closest(".portlet").children(".portlet-body"); var url = $(this).attr("data-url"); var error = $(this).attr("data-error-display"); if ( url ) { App.blockUI({ target : el , animate : true , overlayColor : 'none' }); $.ajax({ type : "GET" , cache : false , url : url , dataType : "html" , success : function (res) { App.unblockUI(el); el.html(res); App.initAjax() // reinitialize elements & plugins for newly loaded content } , error : function (xhr , ajaxOptions , thrownError) { App.unblockUI(el); var msg = 'Error on reloading the content. Please check your connection and try again.'; if ( error == "toastr" && toastr ) { toastr.error(msg); } else if ( error == "notific8" && $.notific8 ) { $.notific8('zindex' , 11500); $.notific8(msg , { theme : 'ruby' , life : 3000 }); } else { alert(msg); } } }); } else { // for demo purpose App.blockUI({ target : el , animate : true , overlayColor : 'none' }); window.setTimeout(function () { App.unblockUI(el); } , 1000); } }); // load ajax data on page init $('.portlet .portlet-title a.reload[data-load="true"]').click(); $('body').on('click' , '.portlet > .portlet-title > .tools > .collapse, .portlet .portlet-title > .tools > .expand' , function (e) { e.preventDefault(); var el = $(this).closest(".portlet").children(".portlet-body"); if ( $(this).hasClass("collapse") ) { $(this).removeClass("collapse").addClass("expand"); el.slideUp(200); } else { $(this).removeClass("expand").addClass("collapse"); el.slideDown(200); } }); }; // Handlesmaterial design checkboxes var handleMaterialDesign = function () { // Material design ckeckbox and radio effects $('body').on('click' , '.md-checkbox > label, .md-radio > label' , function () { var the = $(this); // find the first span which is our circle/bubble var el = $(this).children('span:first-child'); // add the bubble class (we do this so it doesnt show on page load) el.addClass('inc'); // clone it var newone = el.clone(true); // add the cloned version before our original el.before(newone); // remove the original so that it is ready to run on next click $("." + el.attr("class") + ":last" , the).remove(); }); if ( $('body').hasClass('page-md') ) { // Material design click effect // credit where credit's due; http://thecodeplayer.com/walkthrough/ripple-click-effect-google-material-design // var element , circle , d , x , y; $('body').on('click' , 'a.btn, button.btn, input.btn, label.btn' , function (e) { element = $(this); if ( element.find(".md-click-circle").length == 0 ) { element.prepend(""); } circle = element.find(".md-click-circle"); circle.removeClass("md-click-animate"); if ( ! circle.height() && ! circle.width() ) { d = Math.max(element.outerWidth() , element.outerHeight()); circle.css({height : d , width : d}); } x = e.pageX - element.offset().left - circle.width() / 2; y = e.pageY - element.offset().top - circle.height() / 2; circle.css({top : y + 'px' , left : x + 'px'}).addClass("md-click-animate"); setTimeout(function () { circle.remove(); } , 1000); }); } // Floating labels var handleInput = function (el) { if ( el.val() != "" ) { el.addClass('edited'); } else { el.removeClass('edited'); } } $('body').on('keydown' , '.form-md-floating-label .form-control' , function (e) { handleInput($(this)); }); $('body').on('blur' , '.form-md-floating-label .form-control' , function (e) { handleInput($(this)); }); $('.form-md-floating-label .form-control').each(function () { if ( $(this).val().length > 0 ) { $(this).addClass('edited'); } }); } // Handles custom checkboxes & radios using jQuery iCheck plugin var handleiCheck = function () { if ( ! $().iCheck ) { return; } $('.icheck').each(function () { var checkboxClass = $(this).attr('data-checkbox') ? $(this).attr('data-checkbox') : 'icheckbox_minimal-grey'; var radioClass = $(this).attr('data-radio') ? $(this).attr('data-radio') : 'iradio_minimal-grey'; if ( checkboxClass.indexOf('_line') > - 1 || radioClass.indexOf('_line') > - 1 ) { $(this).iCheck({ checkboxClass : checkboxClass , radioClass : radioClass , insert : '
        ' + $(this).attr("data-label") }); } else { $(this).iCheck({ checkboxClass : checkboxClass , radioClass : radioClass }); } }); }; // Handles Bootstrap switches var handleBootstrapSwitch = function () { if ( ! $().bootstrapSwitch ) { return; } $('.make-switch').bootstrapSwitch(); }; // Handles Bootstrap confirmations var handleBootstrapConfirmation = function () { if ( ! $().confirmation ) { return; } $('[data-toggle=confirmation]').confirmation({ btnOkClass : 'btn btn-sm btn-success' , btnCancelClass : 'btn btn-sm btn-danger' }); } // Handles Bootstrap Accordions. var handleAccordions = function () { $('body').on('shown.bs.collapse' , '.accordion.scrollable' , function (e) { App.scrollTo($(e.target)); }); }; // Handles Bootstrap Tabs. var handleTabs = function () { //activate tab if tab id provided in the URL if ( location.hash ) { var tabid = encodeURI(location.hash.substr(1)); $('a[href="#' + tabid + '"]').parents('.tab-pane:hidden').each(function () { var tabid = $(this).attr("id"); $('a[href="#' + tabid + '"]').click(); }); $('a[href="#' + tabid + '"]').click(); } if ( $().tabdrop ) { $('.tabbable-tabdrop .nav-pills, .tabbable-tabdrop .nav-tabs').tabdrop({ text : ' ' }); } }; // Handles Bootstrap Modals. var handleModals = function () { // fix stackable modal issue: when 2 or more modals opened, closing one of modal will remove .modal-open class. $('body').on('hide.bs.modal' , function () { if ( $('.modal:visible').length > 1 && $('html').hasClass('modal-open') === false ) { $('html').addClass('modal-open'); } else if ( $('.modal:visible').length <= 1 ) { $('html').removeClass('modal-open'); } }); // fix page scrollbars issue $('body').on('show.bs.modal' , '.modal' , function () { if ( $(this).hasClass("modal-scroll") ) { $('body').addClass("modal-open-noscroll"); } }); // fix page scrollbars issue $('body').on('hidden.bs.modal' , '.modal' , function () { $('body').removeClass("modal-open-noscroll"); }); // remove ajax content and remove cache on modal closed $('body').on('hidden.bs.modal' , '.modal:not(.modal-cached)' , function () { $(this).removeData('bs.modal'); }); }; // Handles Bootstrap Tooltips. var handleTooltips = function () { // global tooltips $('.tooltips').tooltip(); // portlet tooltips $('.portlet > .portlet-title .fullscreen').tooltip({ trigger : 'hover' , container : 'body' , title : 'Fullscreen' }); $('.portlet > .portlet-title > .tools > .reload').tooltip({ trigger : 'hover' , container : 'body' , title : 'Reload' }); $('.portlet > .portlet-title > .tools > .remove').tooltip({ trigger : 'hover' , container : 'body' , title : 'Remove' }); $('.portlet > .portlet-title > .tools > .config').tooltip({ trigger : 'hover' , container : 'body' , title : 'Settings' }); $('.portlet > .portlet-title > .tools > .collapse, .portlet > .portlet-title > .tools > .expand').tooltip({ trigger : 'hover' , container : 'body' , title : 'Collapse/Expand' }); }; // Handles Bootstrap Dropdowns var handleDropdowns = function () { /* Hold dropdown on click */ $('body').on('click' , '.dropdown-menu.hold-on-click' , function (e) { e.stopPropagation(); }); }; var handleAlerts = function () { $('body').on('click' , '[data-close="alert"]' , function (e) { $(this).parent('.alert').hide(); $(this).closest('.note').hide(); e.preventDefault(); }); $('body').on('click' , '[data-close="note"]' , function (e) { $(this).closest('.note').hide(); e.preventDefault(); }); $('body').on('click' , '[data-remove="note"]' , function (e) { $(this).closest('.note').remove(); e.preventDefault(); }); }; // Handle Hower Dropdowns var handleDropdownHover = function () { $('[data-hover="dropdown"]').not('.hover-initialized').each(function () { $(this).dropdownHover(); $(this).addClass('hover-initialized'); }); }; // Handle textarea autosize var handleTextareaAutosize = function () { if ( typeof(autosize) == "function" ) { autosize(document.querySelector('textarea.autosizeme')); } } // Handles Bootstrap Popovers // last popep popover var lastPopedPopover; var handlePopovers = function () { $('.popovers').popover(); // close last displayed popover $(document).on('click.bs.popover.data-api' , function (e) { if ( lastPopedPopover ) { lastPopedPopover.popover('hide'); } }); }; // Handles scrollable contents using jQuery SlimScroll plugin. var handleScrollers = function () { App.initSlimScroll('.scroller'); }; // Handles Image Preview using jQuery Fancybox plugin var handleFancybox = function () { if ( ! jQuery.fancybox ) { return; } if ( $(".fancybox-button").length > 0 ) { $(".fancybox-button").fancybox({ groupAttr : 'data-rel' , prevEffect : 'none' , nextEffect : 'none' , closeBtn : true , helpers : { title : { type : 'inside' } } }); } }; // Handles counterup plugin wrapper var handleCounterup = function () { if ( ! $().counterUp ) { return; } $("[data-counter='counterup']").counterUp({ delay : 10 , time : 1000 }); }; // Fix input placeholder issue for IE8 and IE9 var handleFixInputPlaceholderForIE = function () { //fix html5 placeholder attribute for ie7 & ie8 if ( isIE8 || isIE9 ) { // ie8 & ie9 // this is html5 placeholder fix for inputs, inputs with placeholder-no-fix class will be skipped(e.g: we need // this for password fields) $('input[placeholder]:not(.placeholder-no-fix), textarea[placeholder]:not(.placeholder-no-fix)').each(function () { var input = $(this); if ( input.val() === '' && input.attr("placeholder") !== '' ) { input.addClass("placeholder").val(input.attr('placeholder')); } input.focus(function () { if ( input.val() == input.attr('placeholder') ) { input.val(''); } }); input.blur(function () { if ( input.val() === '' || input.val() == input.attr('placeholder') ) { input.val(input.attr('placeholder')); } }); }); } }; // Handle Select2 Dropdowns var handleSelect2 = function () { }; // handle group element heights var handleHeight = function () { $('[data-auto-height]').each(function () { var parent = $(this); var items = $('[data-height]' , parent); var height = 0; var mode = parent.attr('data-mode'); var offset = parseInt(parent.attr('data-offset') ? parent.attr('data-offset') : 0); items.each(function () { if ( $(this).attr('data-height') == "height" ) { $(this).css('height' , ''); } else { $(this).css('min-height' , ''); } var height_ = (mode == 'base-height' ? $(this).outerHeight() : $(this).outerHeight(true)); if ( height_ > height ) { height = height_; } }); height = height + offset; items.each(function () { if ( $(this).attr('data-height') == "height" ) { $(this).css('height' , height); } else { $(this).css('min-height' , height); } }); if ( parent.attr('data-related') ) { $(parent.attr('data-related')).css('height' , parent.height()); } }); } //* END:CORE HANDLERS *// return { //main function to initiate the theme init : function () { //IMPORTANT!!!: Do not modify the core handlers call order. //Core handlers handleInit(); // initialize core variables handleOnResize(); // set and handle responsive //UI Component handlers handleMaterialDesign(); // handle material design handleiCheck(); // handles custom icheck radio and checkboxes handleBootstrapSwitch(); // handle bootstrap switch plugin handleScrollers(); // handles slim scrolling contents handleFancybox(); // handle fancy box handleSelect2(); // handle custom Select2 dropdowns handlePortletTools(); // handles portlet action bar functionality(refresh, configure, toggle, remove) handleAlerts(); //handle closabled alerts handleDropdowns(); // handle dropdowns handleTabs(); // handle tabs handleTooltips(); // handle bootstrap tooltips handlePopovers(); // handles bootstrap popovers handleAccordions(); //handles accordions handleModals(); // handle modals handleBootstrapConfirmation(); // handle bootstrap confirmations handleTextareaAutosize(); // handle autosize textareas handleCounterup(); // handle counterup instances //Handle group element heights this.addResizeHandler(handleHeight); // handle auto calculating height on window resize // Hacks handleFixInputPlaceholderForIE(); //IE8 & IE9 input placeholder issue fix } , //main function to initiate core javascript after ajax complete initAjax : function () { //handleUniform(); // handles custom radio & checkboxes handleiCheck(); // handles custom icheck radio and checkboxes handleBootstrapSwitch(); // handle bootstrap switch plugin handleDropdownHover(); // handles dropdown hover handleScrollers(); // handles slim scrolling contents handleSelect2(); // handle custom Select2 dropdowns handleFancybox(); // handle fancy box handleDropdowns(); // handle dropdowns handleTooltips(); // handle bootstrap tooltips handlePopovers(); // handles bootstrap popovers handleAccordions(); //handles accordions handleBootstrapConfirmation(); // handle bootstrap confirmations } , //init main components initComponents : function () { this.initAjax(); } , //public function to remember last opened popover that needs to be closed on click setLastPopedPopover : function (el) { lastPopedPopover = el; } , //public function to add callback a function which will be called on window resize addResizeHandler : function (func) { resizeHandlers.push(func); } , //public functon to call _runresizeHandlers runResizeHandlers : function () { _runResizeHandlers(); } , // wrApper function to scroll(focus) to an element scrollTo : function (el , offeset) { var pos = (el && el.length > 0) ? el.offset().top : 0; if ( el ) { if ( $('body').hasClass('page-header-fixed') ) { pos = pos - $('.page-header').height(); } else if ( $('body').hasClass('page-header-top-fixed') ) { pos = pos - $('.page-header-top').height(); } else if ( $('body').hasClass('page-header-menu-fixed') ) { pos = pos - $('.page-header-menu').height(); } pos = pos + (offeset ? offeset : - 1 * el.height()); } $('html,body').animate({ scrollTop : pos } , 'slow'); } , initSlimScroll : function (el) { if ( ! $().slimScroll ) { return; } $(el).each(function () { if ( $(this).attr("data-initialized") ) { return; // exit } var height; if ( $(this).attr("data-height") ) { height = $(this).attr("data-height"); } else { height = $(this).css('height'); } $(this).slimScroll({ allowPageScroll : true , // allow page scroll when the element scroll is ended size : '7px' , color : ($(this).attr("data-handle-color") ? $(this).attr("data-handle-color") : '#bbb') , wrapperClass : ($(this).attr("data-wrapper-class") ? $(this).attr("data-wrapper-class") : 'slimScrollDiv') , railColor : ($(this).attr("data-rail-color") ? $(this).attr("data-rail-color") : '#eaeaea') , position : isRTL ? 'left' : 'right' , height : height , alwaysVisible : ($(this).attr("data-always-visible") == "1" ? true : false) , railVisible : ($(this).attr("data-rail-visible") == "1" ? true : false) , disableFadeOut : true }); $(this).attr("data-initialized" , "1"); }); } , destroySlimScroll : function (el) { if ( ! $().slimScroll ) { return; } $(el).each(function () { if ( $(this).attr("data-initialized") === "1" ) { // destroy existing instance before updating the height $(this).removeAttr("data-initialized"); $(this).removeAttr("style"); var attrList = {}; // store the custom attribures so later we will reassign. if ( $(this).attr("data-handle-color") ) { attrList["data-handle-color"] = $(this).attr("data-handle-color"); } if ( $(this).attr("data-wrapper-class") ) { attrList["data-wrapper-class"] = $(this).attr("data-wrapper-class"); } if ( $(this).attr("data-rail-color") ) { attrList["data-rail-color"] = $(this).attr("data-rail-color"); } if ( $(this).attr("data-always-visible") ) { attrList["data-always-visible"] = $(this).attr("data-always-visible"); } if ( $(this).attr("data-rail-visible") ) { attrList["data-rail-visible"] = $(this).attr("data-rail-visible"); } $(this).slimScroll({ wrapperClass : ($(this).attr("data-wrapper-class") ? $(this).attr("data-wrapper-class") : 'slimScrollDiv') , destroy : true }); var the = $(this); // reassign custom attributes $.each(attrList , function (key , value) { the.attr(key , value); }); } }); } , // function to scroll to the top scrollTop : function () { App.scrollTo(); } , // wrApper function to block element(indicate loading) blockUI : function (options) { options = $.extend(true , {} , options); var html = ''; if ( options.animate ) { html = '
        ' + '
        ' + '
        '; } else if ( options.iconOnly ) { html = '
        '; } else if ( options.textOnly ) { html = '
          ' + (options.message ? options.message : 'LOADING...') + '
        '; } else { html = '
          ' + (options.message ? options.message : 'LOADING...') + '
        '; } if ( options.target ) { // element blocking var el = $(options.target); if ( el.height() <= ($(window).height()) ) { options.cenrerY = true; } el.block({ message : html , baseZ : options.zIndex ? options.zIndex : 1000 , centerY : options.cenrerY !== undefined ? options.cenrerY : false , css : { top : '10%' , border : '0' , padding : '0' , backgroundColor : 'none' } , overlayCSS : { backgroundColor : options.overlayColor ? options.overlayColor : '#555' , opacity : options.boxed ? 0.05 : 0.1 , cursor : 'wait' } }); } else { // page blocking $.blockUI({ message : html , baseZ : options.zIndex ? options.zIndex : 1000 , css : { border : '0' , padding : '0' , backgroundColor : 'none' } , overlayCSS : { backgroundColor : options.overlayColor ? options.overlayColor : '#555' , opacity : options.boxed ? 0.05 : 0.1 , cursor : 'wait' } }); } } , // wrApper function to un-block element(finish loading) unblockUI : function (target) { if ( target ) { $(target).unblock({ onUnblock : function () { $(target).css('position' , ''); $(target).css('zoom' , ''); } }); } else { $.unblockUI(); } } , startPageLoading : function (options) { if ( options && options.animate ) { $('.page-spinner-bar').remove(); $('body').append('
        '); } else { $('.page-loading').remove(); $('body').append('
          ' + (options && options.message ? options.message : 'Loading...') + '
        '); } } , stopPageLoading : function () { $('.page-loading, .page-spinner-bar').remove(); } , alert : function (options) { options = $.extend(true , { container : "" , // alerts parent container(by default placed after the page breadcrumbs) place : "append" , // "append" or "prepend" in container type : 'success' , // alert's type message : "" , // alert's message close : true , // make alert closable reset : true , // close all previouse alerts first focus : true , // auto scroll to the alert after shown closeInSeconds : 0 , // auto close after defined seconds icon : "" // put icon before the message } , options); var id = App.getUniqueID("App_alert"); var html = '
        ' + (options.close ? '' : '') + (options.icon !== "" ? ' ' : '') + options.message + '
        '; if ( options.reset ) { $('.custom-alerts').remove(); } if ( ! options.container ) { if ( $('.page-fixed-main-content').length === 1 ) { $('.page-fixed-main-content').prepend(html); } else if ( ($('body').hasClass("page-container-bg-solid") || $('body').hasClass("page-content-white")) && $('.page-head').length === 0 ) { $('.page-title').after(html); } else { if ( $('.page-bar').length > 0 ) { $('.page-bar').after(html); } else { $('.page-breadcrumb, .breadcrumbs').after(html); } } } else { if ( options.place == "append" ) { $(options.container).append(html); } else { $(options.container).prepend(html); } } if ( options.focus ) { App.scrollTo($('#' + id)); } if ( options.closeInSeconds > 0 ) { setTimeout(function () { $('#' + id).remove(); } , options.closeInSeconds * 1000); } return id; } , //public function to initialize the fancybox plugin initFancybox : function () { handleFancybox(); } , //public helper function to get actual input value(used in IE9 and IE8 due to placeholder attribute not supported) getActualVal : function (el) { el = $(el); if ( el.val() === el.attr("placeholder") ) { return ""; } return el.val(); } , //public function to get a paremeter by name from URL getURLParameter : function (paramName) { var searchString = window.location.search.substring(1) , i , val , params = searchString.split("&"); for ( i = 0 ; i < params.length ; i ++ ) { val = params[i].split("="); if ( val[0] == paramName ) { return unescape(val[1]); } } return null; } , // check for device touch support isTouchDevice : function () { try { document.createEvent("TouchEvent"); return true; } catch ( e ) { return false; } } , // To get the correct viewport width based on // http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/ getViewPort : function () { var e = window , a = 'inner'; if ( ! ('innerWidth' in window) ) { a = 'client'; e = document.documentElement || document.body; } return { width : e[a + 'Width'] , height : e[a + 'Height'] }; } , getUniqueID : function (prefix) { return 'prefix_' + Math.floor(Math.random() * (new Date()).getTime()); } , // check IE8 mode isIE8 : function () { return isIE8; } , // check IE9 mode isIE9 : function () { return isIE9; } , //check RTL mode isRTL : function () { return isRTL; } , // check IE8 mode isAngularJsApp : function () { return (typeof angular == 'undefined') ? false : true; } , getAssetsPath : function () { return assetsPath; } , setAssetsPath : function (path) { assetsPath = path; } , setGlobalImgPath : function (path) { globalImgPath = path; } , getGlobalImgPath : function () { return assetsPath + globalImgPath; } , setGlobalPluginsPath : function (path) { globalPluginsPath = path; } , getGlobalPluginsPath : function () { return assetsPath + globalPluginsPath; } , getGlobalCssPath : function () { return assetsPath + globalCssPath; } , // get layout color code by color name getBrandColor : function (name) { if ( brandColors[name] ) { return brandColors[name]; } else { return ''; } } , getResponsiveBreakpoint : function (size) { // bootstrap responsive breakpoints var sizes = { 'xs' : 480 , // extra small 'sm' : 768 , // small 'md' : 992 , // medium 'lg' : 1200 // large }; return sizes[size] ? sizes[size] : 0; } }; }(); jQuery(document).ready(function () { App.init(); // init metronic core componets }); ================================================ FILE: resources/assets/static/src/js/global/custom.js ================================================ /** * 自定义 JS 全局方法 */ var xhrError = function ( XHR ) { tips.error( XHR.status + ' ' + XHR.statusText ); }; //toastr 的 配置 toastr.options = { "closeButton" : true , "debug" : false , "positionClass" : "toast-top-center" , "onclick" : null , "showDuration" : "500" , "hideDuration" : "500" , "timeOut" : "3000" , "extendedTimeOut" : "1000" , "showEasing" : "swing" , "hideEasing" : "linear" , "showMethod" : "fadeIn" , "hideMethod" : "fadeOut" }; //提示 var tips = { //错误提示 error : function ( msg ) { toastr.error( msg , '@_@' ); } , //成功提示 success : function ( msg , callback ) { toastr.success( msg , '^_^' ); if ( $.isFunction( callback ) ) { setTimeout( callback , 2000 ); } } }; //设置上传文件预览 var setImgPreview = { //设置图片预览 set : function ( tagName , fileSavePath , type ) { var $preview = $( '#' + tagName + 'Preview' ); if ( empty( fileSavePath ) ) { $preview.html( '' ); return; } var abPath = Param.uri.img + fileSavePath; var tmp = ''; if ( empty( type ) || type == 'img' ) { var clearBtn = "setImgPreview.clear('" + tagName + "')"; tmp = 'X '; } else if ( type == 'file' ) { tmp = ' 下载'; } $preview.html( tmp.replace( /\{src}/g , abPath ) ); $( 'input[name="' + tagName + '"]' ).val( fileSavePath ); } , //清楚图片预览 clear : function ( tagName ) { $( '#' + tagName + 'Preview' ).empty(); $( 'input[name="' + tagName + '"]' ).val( '' ); } }; //显示或停止 加载动画 var loading = { //初始化 initAjax : function () { var $fitLoading = this.insert(); $( document ).ajaxStart( function () { $fitLoading.show(); } ).ajaxComplete( function () { $fitLoading.fadeOut( 'fast' ); } ); } , //开始显示 start : function () { var $fitLoading = this.insert(); $fitLoading.show(); } , //结束显示 end : function () { $( '.fit-loading' ).hide(); } , //插入 insert : function () { var $fitLoading = $( '.fit-loading' ); if ( $fitLoading.length == 0 ) { $( 'body' ).append( '
        ' ); $fitLoading = $( '.fit-loading' ); } var top = ( $( window ).height() - $fitLoading.height() ) / 2; var left = ( $( window ).width() - $fitLoading.width() ) / 2; $fitLoading.css( { top : top + 'px' , left : left + 'px' , display : 'none' } ); return $fitLoading; } }; //显示 var sure = { config : {} , //打开 init : function ( msg , ok , cancel ) { var self = this; self.config.ok = ok; self.config.cancel = cancel; if ( $( '.fit-confirm' ).length < 1 ) { var html = []; html.push( '
        ' ); html.push( '
        ' ); html.push( '
        ' ); html.push( '' ); html.push( '' ); html.push( '
        ' ); $( 'body' ).append( html.join( '' ) ); } if ( $( '.fit-modal' ).length < 1 ) { $( 'body' ).append( '
        ' ); } $( '.fit-confirm-body' ).html( msg ); self.show(); } , //ok 按钮 ok : function () { var self = this; if ( $.isFunction( self.config.ok ) ) { self.config.ok(); } self.hide(); } , //取消按钮 cancel : function () { var self = this; if ( $.isFunction( self.config.cancel ) ) { self.config.cancel(); } self.hide(); } , //显示窗口 show : function () { //var self = this; var $fit_confirm = $( '.fit-confirm' ); var height = $( document ).height(); $( '.fit-modal' ).height( height - 1 ).show(); var top = ( $( window ).height() - $fit_confirm.height() ) / 2 - 60; var left = ( $( window ).width() - $fit_confirm.width() ) / 2; $fit_confirm.css( { top : top + 'px' , left : left + 'px' , position : 'fixed' } ).show(); } , //关闭窗口 hide : function () { //var self = this; $( '.fit-modal' ).hide(); $( '.fit-confirm' ).hide(); } }; //变量是否为空 var empty = function ( val ) { if ( val == null || val == 'undefined' || typeof( val) == 'undefined' || val == 0 || val == '' || val.length == 0 ) { return true; } return false }; //变量是否存在 var isset = function ( val ) { if ( typeof( val ) == 'undefined' || val == null ) { return false; } return true }; //字符串重复 var str_repeat = function ( str , num ) { return new Array( num + 1 ).join( str ); }; //取缩略图 var get_thumb = function ( icon , size ) { if ( empty( size ) ) { return icon; } return icon.substr( 0 , icon.lastIndexOf( "." ) + 1 ) + size + icon.substr( icon.lastIndexOf( "." ) ); }; //rows 转 select options(含树形结构) var form_options_rows = function ( rows , settings ) { var html = ''; $.each( rows , function ( index , row ) { var prefix = ''; if ( isset( row[ 'level' ] ) ) { prefix = row[ 'level' ] - 1 > 0 ? str_repeat( '    ' , row[ 'level' ] - 1 ) + '└─ ' : ''; } html += ''; if ( isset( row[ settings.nodeField ] ) ) { html += form_options_rows( row[ settings.nodeField ] , settings ); } } ); return html; }; var KE_OPTIONS = { items : [ 'source' , '|' , 'undo' , 'redo' , '|' , 'preview' , 'cut' , 'copy' , 'paste' , 'plainpaste' , 'wordpaste' , '|' , 'justifyleft' , 'justifycenter' , 'justifyright' , 'justifyfull' , 'insertorderedlist' , 'insertunorderedlist' , 'indent' , 'outdent' , 'subscript' , 'superscript' , 'clearhtml' , 'quickformat' , '|' , 'fullscreen' , '/' , 'formatblock' , 'fontname' , 'fontsize' , '|' , 'forecolor' , 'hilitecolor' , 'bold' , 'italic' , 'underline' , 'strikethrough' , 'lineheight' , 'removeformat' , '|' , 'image' , 'flash' , 'media' , 'table' , 'hr' , 'pagebreak' , 'anchor' , 'link' , 'unlink' ] , uploadJson : '' , allowFileManager : false , urlType : 'domain' , resizeType : 1 , themeType : 'simple' , afterBlur : function () { this.sync(); } }; //获取 url 参数 $.extend( { getUrlParams : function () { var vars = [] , hash; var hashes = window.location.href.slice( window.location.href.indexOf( '?' ) + 1 ).split( '&' ); for ( var i = 0 ; i < hashes.length ; i ++ ) { hash = hashes[ i ].split( '=' ); //vars.push(hash[0]); vars[ hash[ 0 ] ] = hash[ 1 ]; } return vars; } , getUrlParam : function ( name ) { return $.getUrlParams()[ name ]; } } ); var FLAT_BG_COLOR = { blue : 'blue' , blue_hoki : 'blue-hoki' , blue_steel : 'blue-steel' , blue_madison : 'blue-madison' , blue_chambray : 'blue-chambray' , blue_ebonyclay : 'blue-ebonyclay' , green : 'green' , green_meadow : 'green-meadow' , green_seagreen : 'green-seagreen' , green_turquoise : 'green-turquoise' , green_haze : 'green-haze' , green_jungle : 'green-jungle' , red : 'red' , red_pink : 'red-pink' , red_sunglo : 'red-sunglo' , red_intense : 'red-intense' , red_thunderbird : 'red-thunderbird' , red_flamingo : 'red-flamingo' , yellow : 'yellow' , yellow_gold : 'yellow-gold' , yellow_casablanca : 'yellow-casablanca' , yellow_crusta : 'yellow-crusta' , yellow_lemon : 'yellow-lemon' , yellow_saffron : 'yellow-saffron' , purple : 'purple' , purple_plum : 'purple-plum' , purple_medium : 'purple-medium' , purple_studio : 'purple-studio' , purple_wisteria : 'purple-wisteria' , purple_seance : 'purple-seance' , grey : 'grey' , grey_cascade : 'grey-cascade' , grey_silver : 'grey-silver' , grey_steel : 'grey-steel' , grey_cararra : 'grey-cararra' , grey_gallery : 'grey-gallery' }; var DTP_DATE_OPTION = { language : 'zh-CN' , format : 'yyyy-mm-dd' , startView : 2 , minView : 2 , autoclose : 1 , todayBtn : true , todayHighlight : true , pickerPosition : 'bottom-right' }; var DTP_TIME_OPTION = { language : 'zh-CN' , format : 'hh:ii' , startView : 0 , minView : 0 , minuteStep : 15 , autoclose : 1 , // forceParse : false , //pickerPosition: 'bottom-left' }; var DTP_DATETIME_OPTION = { language : 'zh-CN' , format : 'yyyy-mm-dd hh:ii' , autoclose : 1 , todayBtn : true , todayHighlight : true , pickerPosition : 'bottom-right' }; /** * 处理页面图片延时加载 * * 需要延时加载的图片 格式为: * * * 调用: * ImageLazyLoaded.init(); 或者 * * ImageLazyLoaded.init({ * defaultImgUri : '默认图片的uri' * }); */ var ImageLazyLoaded = { config : { defaultImgUri : 'defaultImgUri' } , init : function ( config ) { $.extend( this.config , config ); var self = this; self.imageLoading(); $( document ).on( 'scroll' , function () { self.imageLoading(); } ); } , imageLoading : function () { var defaultImgUri = this.config.defaultImgUri; $( 'img[src="' + defaultImgUri + '"]' ).each( function () { var $this = $( this ); var offset = $this.offset(); if ( $( window ).scrollTop() + window.height + 50 <= offset.top ) { $this.attr( 'src' , $this.data( 'src' ) ); } } ); } }; (function ( $ ) { //填充表单 $.fn.reloadForm = function ( data ) { this[ 0 ].reset(); this.clearFormValid(); this.find( ':input' ).each( function () { var name = $( this ).attr( 'name' ); if ( empty( name ) ) { name = $( this ).attr( 'id' ); } if ( isset( name ) && isset( data ) && isset( data[ name ] ) ) { var val = data[ name ]; switch ( this.type ) { case 'checkbox': case 'radio': $( 'input[name="' + name + '"][value="' + val + '"]' ).prop( 'checked' , true ); break; default: $( this ).val( val ); break; } } } ); }; //扩展 animateCss 方法 $.fn.extend( { animateCss : function ( animationName ) { var animationEnd = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend'; this.addClass( 'animated ' + animationName ).one( animationEnd , function () { $( this ).removeClass( 'animated ' + animationName ); } ); } } ); //验证表单 $.fn.validForm = function () { var ret = true; this.find( ':input' ).each( function () { var val = $.trim( $( this ).val() ); if ( $( this ).data( 'valid' ) ) { switch ( $( this ).data( 'valid' ) ) { case 'required': if ( val == '' || val == 0 || val.length == 0 ) { ret = false; } break; case 'number': if ( ! $.isNumeric( val ) || val < 0 ) { ret = false; } break; case 'positive': if ( ! $.isNumeric( val ) || val <= 0 ) { ret = false; } break; default: break; } if ( ! ret ) { $( this ).focus(); tips.error( $( this ).data( 'tips' ) ); $( this ).parents( '.form-group' ).addClass( 'has-error' ); $( this ).before( '' ); return ret; } else { $( this ).parents( '.form-group' ).removeClass( 'has-error' ); $( this ).prev( 'i' ).remove(); } } } ); return ret; }; //清除验证样式 $.fn.clearFormValid = function () { this.find( '.has-error' ).removeClass( 'has-error' ); this.find( '.valid-icon' ).remove(); }; //序列化表单返回 对象 $.fn.serializeObject = function () { var o = {}; var a = this.serializeArray(); $.each( a , function () { if ( o[ this.name ] !== undefined ) { if ( ! o[ this.name ].push ) { o[ this.name ] = [ o[ this.name ] ]; } o[ this.name ].push( this.value || '' ); } else { o[ this.name ] = this.value || ''; } } ); return o; }; //序列号表单返回 JSON $.fn.serializeJSON = function () { var self = this , json = {} , push_counters = {} , patterns = { "validate" : /^[a-zA-Z][a-zA-Z0-9_]*(?:\[(?:\d*|[a-zA-Z0-9_]+)\])*$/ , "key" : /[a-zA-Z0-9_]+|(?=\[\])/g , "push" : /^$/ , "fixed" : /^\d+$/ , "named" : /^[a-zA-Z0-9_]+$/ }; this.build = function ( base , key , value ) { base[ key ] = value; return base; }; this.push_counter = function ( key ) { if ( push_counters[ key ] === undefined ) { push_counters[ key ] = 0; } return push_counters[ key ] ++; }; $.each( $( this ).serializeArray() , function () { // skip invalid keys if ( ! patterns.validate.test( this.name ) ) { return; } var k , keys = this.name.match( patterns.key ) , merge = this.value , reverse_key = this.name; while ( (k = keys.pop()) !== undefined ) { // adjust reverse_key reverse_key = reverse_key.replace( new RegExp( "\\[" + k + "\\]$" ) , '' ); // push if ( k.match( patterns.push ) ) { merge = self.build( [] , self.push_counter( reverse_key ) , merge ); } // fixed else if ( k.match( patterns.fixed ) ) { merge = self.build( [] , k , merge ); } // named else if ( k.match( patterns.named ) ) { merge = self.build( {} , k , merge ); } } json = $.extend( true , json , merge ); } ); return json; }; })( jQuery ); ================================================ FILE: resources/assets/static/src/js/global/format.js ================================================ //****************************** // data grid format function //****************************** //edit button var optEdit = function ( value , row ) { return '' + ' 编辑'; }; //delete button var optDelete = function ( value , row ) { return '' + ' 删除'; }; var optIncome = function ( value , row ) { return '' + ' 进入'; }; //status var statusColor = [ 'default' , 'primary' , 'success' , 'info' ]; var formatStatus = function ( value ) { return '' + Param.status[ value ] + ''; }; //type var typeColor = [ 'default' , 'primary' , 'success' , 'info' ]; var formatType = function ( value ) { return '' + Param.type[ value ] + ''; }; //catalog var catalogColor = [ 'default' , 'primary' , 'success' , 'info' ]; var formatCatalog = function ( value ) { return '' + Param.catalog[ value ] + ''; }; //icon or img var formatIcon = function ( value ) { var html = ''; //console.log( 'value is ',value ); if ( value && ! empty( value ) ) { var src = Param.uri.img + value; html = ''.replace( /\${src}/g , src ); } return html; }; var formatDatetime = function ( value ) { var html = ''; if ( ! empty( value ) ) { html = value.substr( 0 , 16 ); } return html }; var formatDate = function ( value ) { var html = ''; if ( ! empty( value ) ) { html = value.substr( 0 , 10 ); } return html }; var yesColor = [ 'default' , 'primary' ]; var formatYes = function ( value ) { var data = [ '否' , '是' ]; return '' + data[ value ] + ''; }; var formatTest = function ( value ) { var data = [ '否' , '是' ]; return '' + data[ value ] + ''; }; ================================================ FILE: resources/assets/static/src/js/global/layout.js ================================================ /** Core script to handle the entire theme and core functions **/ var Layout = function () { var layoutImgPath = 'static/themes/global/img/'; var layoutCssPath = 'static/themes/global/'; var resBreakpointMd = App.getResponsiveBreakpoint('md'); //* BEGIN:CORE HANDLERS *// // this function handles responsive layout on screen size resize or mobile device rotate. // Set proper height for sidebar and content. The content and sidebar height must be synced always. var handleSidebarAndContentHeight = function () { var content = $('.page-content'); var sidebar = $('.page-sidebar'); var body = $('body'); var height; if ( body.hasClass("page-footer-fixed") === true && body.hasClass("page-sidebar-fixed") === false ) { var available_height = App.getViewPort().height - $('.page-footer').outerHeight() - $('.page-header').outerHeight(); if ( content.height() < available_height ) { content.attr('style' , 'min-height:' + available_height + 'px'); } } else { if ( body.hasClass('page-sidebar-fixed') ) { height = _calculateFixedSidebarViewportHeight(); if ( body.hasClass('page-footer-fixed') === false ) { height = height - $('.page-footer').outerHeight(); } } else { var headerHeight = $('.page-header').outerHeight(); var footerHeight = $('.page-footer').outerHeight(); if ( App.getViewPort().width < resBreakpointMd ) { height = App.getViewPort().height - headerHeight - footerHeight; } else { height = sidebar.height() + 20; } if ( (height + headerHeight + footerHeight) <= App.getViewPort().height ) { height = App.getViewPort().height - headerHeight - footerHeight; } } content.attr('style' , 'min-height:' + height + 'px'); } }; // Handle sidebar menu links var handleSidebarMenuActiveLink = function (mode , el) { //var url = location.hash.toLowerCase(); var url = location.pathname.toLocaleLowerCase(); //console.log( 'mode' , mode ); //console.log( 'el' , el ); var menu = $('.page-sidebar-menu'); if ( mode === 'click' || mode === 'set' ) { el = $(el); } else if ( mode === 'match' ) { menu.find("li > a").each(function () { var path = $(this).attr("href").toLowerCase(); // url match condition if ( path.length > 1 && url.substr(1 , path.length - 1) == path.substr(1) ) { el = $(this); return; } }); } if ( ! el || el.length == 0 ) { return; } if ( el.attr('href').toLowerCase() === 'javascript:;' || el.attr('href').toLowerCase() === '#' ) { return; } var slideSpeed = parseInt(menu.data("slide-speed")); var keepExpand = menu.data("keep-expanded"); // begin: handle active state if ( menu.hasClass('page-sidebar-menu-hover-submenu') === false ) { menu.find('li.nav-item.open').each(function () { var match = false; $(this).find('li').each(function () { if ( $(this).find(' > a').attr('href') === el.attr('href') ) { match = true; return; } }); if ( match === true ) { return; } $(this).removeClass('open'); $(this).find('> a > .arrow.open').removeClass('open'); $(this).find('> .sub-menu').slideUp(); }); } else { menu.find('li.open').removeClass('open'); } menu.find('li.active').removeClass('active'); menu.find('li > a > .selected').remove(); // end: handle active state el.parents('li').each(function () { $(this).addClass('active'); $(this).find('> a > span.arrow').addClass('open'); if ( $(this).parent('ul.page-sidebar-menu').length === 1 ) { $(this).find('> a').append(''); } if ( $(this).children('ul.sub-menu').length === 1 ) { $(this).addClass('open'); } }); if ( mode === 'click' ) { if ( App.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass("in") ) { // close the menu on mobile view while laoding a page $('.page-header .responsive-toggler').click(); } } }; // Handle sidebar menu var handleSidebarMenu = function () { // handle sidebar link click $('.page-sidebar-menu').on('click' , 'li > a.nav-toggle, li > a > span.nav-toggle' , function (e) { var that = $(this).closest('.nav-item').children('.nav-link'); if ( App.getViewPort().width >= resBreakpointMd && ! $('.page-sidebar-menu').attr("data-initialized") && $('body').hasClass('page-sidebar-closed') && that.parent('li').parent('.page-sidebar-menu').length === 1 ) { return; } var hasSubMenu = that.next().hasClass('sub-menu'); if ( App.getViewPort().width >= resBreakpointMd && that.parents('.page-sidebar-menu-hover-submenu').length === 1 ) { // exit of hover sidebar menu return; } if ( hasSubMenu === false ) { if ( App.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass("in") ) { // close the menu on mobile view while laoding a page $('.page-header .responsive-toggler').click(); } return; } var parent = that.parent().parent(); var the = that; var menu = $('.page-sidebar-menu'); var sub = that.next(); var autoScroll = menu.data("auto-scroll"); var slideSpeed = parseInt(menu.data("slide-speed")); var keepExpand = menu.data("keep-expanded"); if ( ! keepExpand ) { parent.children('li.open').children('a').children('.arrow').removeClass('open'); parent.children('li.open').children('.sub-menu:not(.always-open)').slideUp(slideSpeed); parent.children('li.open').removeClass('open'); } var slideOffeset = - 200; open if ( sub.is(":visible") ) { $('.arrow' , the).removeClass("open"); the.parent().removeClass("open"); sub.slideUp(slideSpeed , function () { if ( autoScroll === true && $('body').hasClass('page-sidebar-closed') === false ) { if ( $('body').hasClass('page-sidebar-fixed') ) { menu.slimScroll({ 'scrollTo' : (the.position()).top }); } else { App.scrollTo(the , slideOffeset); } } handleSidebarAndContentHeight(); }); } else if ( hasSubMenu ) { $('.arrow' , the).addClass("open"); the.parent().addClass("open"); sub.slideDown(slideSpeed , function () { if ( autoScroll === true && $('body').hasClass('page-sidebar-closed') === false ) { if ( $('body').hasClass('page-sidebar-fixed') ) { menu.slimScroll({ 'scrollTo' : (the.position()).top }); } else { App.scrollTo(the , slideOffeset); } } handleSidebarAndContentHeight(); }); } e.preventDefault(); }); // handle ajax links within sidebar menu //$('.page-sidebar').on('click' , ' li > a.ajaxify' , function (e) { // e.preventDefault(); // console.log('here'); // App.scrollTop(); // // var url = $(this).attr("href"); // var menuContainer = $('.page-sidebar ul'); // var pageContent = $('.page-content'); // var pageContentBody = $('.page-content .page-content-body'); // // menuContainer.children('li.active').removeClass('active'); // menuContainer.children('arrow.open').removeClass('open'); // // $(this).parents('li').each(function () { // $(this).addClass('active'); // $(this).children('a > span.arrow').addClass('open'); // }); // $(this).parents('li').addClass('active'); // // if ( App.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass("in") ) { // close the menu on // mobile view while laoding a page $('.page-header .responsive-toggler').click(); } App.startPageLoading(); var // the = $(this); $.ajax({ type : "GET" , cache : false , url : url , dataType : "html" , success : function (res) // { if ( the.parents('li.open').length === 0 ) { $('.page-sidebar-menu > li.open > a').click(); } // App.stopPageLoading(); pageContentBody.html(res); Layout.fixContentHeight(); // fix content height // App.initAjax(); // initialize core stuff } , error : function (xhr , ajaxOptions , thrownError) { // App.stopPageLoading(); pageContentBody.html('

        Could not load the requested content.

        '); } }); }); // handle ajax link within main content //$('.page-content').on('click' , '.ajaxify' , function (e) { // e.preventDefault(); // App.scrollTop(); // // var url = $(this).attr("href"); // var pageContent = $('.page-content'); // var pageContentBody = $('.page-content .page-content-body'); // // App.startPageLoading(); // // if ( App.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass("in") ) { // close the menu on // mobile view while laoding a page $('.page-header .responsive-toggler').click(); } $.ajax({ type : "GET" , cache // : false , url : url , dataType : "html" , success : function (res) { App.stopPageLoading(); // pageContentBody.html(res); Layout.fixContentHeight(); // fix content height App.initAjax(); // initialize core // stuff } , error : function (xhr , ajaxOptions , thrownError) { pageContentBody.html('

        Could not load the // requested content.

        '); App.stopPageLoading(); } }); }); // handle scrolling to top on responsive menu toggler click when header is fixed for mobile view $(document).on('click' , '.page-header-fixed-mobile .page-header .responsive-toggler' , function () { App.scrollTop(); }); // handle sidebar hover effect handleFixedSidebarHoverEffect(); // handle the search bar close $('.page-sidebar').on('click' , '.sidebar-search .remove' , function (e) { e.preventDefault(); $('.sidebar-search').removeClass("open"); }); // handle the search query submit on enter press $('.page-sidebar .sidebar-search').on('keypress' , 'input.form-control' , function (e) { if ( e.which == 13 ) { $('.sidebar-search').submit(); return false; //<---- Add this line } }); // handle the search submit(for sidebar search and responsive mode of the header search) $('.sidebar-search .submit').on('click' , function (e) { e.preventDefault(); if ( $('body').hasClass("page-sidebar-closed") ) { if ( $('.sidebar-search').hasClass('open') === false ) { if ( $('.page-sidebar-fixed').length === 1 ) { $('.page-sidebar .sidebar-toggler').click(); //trigger sidebar toggle button } $('.sidebar-search').addClass("open"); } else { $('.sidebar-search').submit(); } } else { $('.sidebar-search').submit(); } }); // handle close on body click if ( $('.sidebar-search').length !== 0 ) { $('.sidebar-search .input-group').on('click' , function (e) { e.stopPropagation(); }); $('body').on('click' , function () { if ( $('.sidebar-search').hasClass('open') ) { $('.sidebar-search').removeClass("open"); } }); } }; // Helper function to calculate sidebar height for fixed sidebar layout. var _calculateFixedSidebarViewportHeight = function () { var sidebarHeight = App.getViewPort().height - $('.page-header').outerHeight(true); if ( $('body').hasClass("page-footer-fixed") ) { sidebarHeight = sidebarHeight - $('.page-footer').outerHeight(); } return sidebarHeight; }; // Handles fixed sidebar var handleFixedSidebar = function () { var menu = $('.page-sidebar-menu'); App.destroySlimScroll(menu); if ( $('.page-sidebar-fixed').length === 0 ) { handleSidebarAndContentHeight(); return; } if ( App.getViewPort().width >= resBreakpointMd ) { menu.attr("data-height" , _calculateFixedSidebarViewportHeight()); App.initSlimScroll(menu); handleSidebarAndContentHeight(); } }; // Handles sidebar toggler to close/hide the sidebar. var handleFixedSidebarHoverEffect = function () { var body = $('body'); if ( body.hasClass('page-sidebar-fixed') ) { $('.page-sidebar').on('mouseenter' , function () { if ( body.hasClass('page-sidebar-closed') ) { $(this).find('.page-sidebar-menu').removeClass('page-sidebar-menu-closed'); } }).on('mouseleave' , function () { if ( body.hasClass('page-sidebar-closed') ) { $(this).find('.page-sidebar-menu').addClass('page-sidebar-menu-closed'); } }); } }; // Hanles sidebar toggler var handleSidebarToggler = function () { var body = $('body'); if ( $.cookie && $.cookie('sidebar_closed') === '1' && App.getViewPort().width >= resBreakpointMd ) { $('body').addClass('page-sidebar-closed'); $('.page-sidebar-menu').addClass('page-sidebar-menu-closed'); } // handle sidebar show/hide $('body').on('click' , '.sidebar-toggler' , function (e) { var sidebar = $('.page-sidebar'); var sidebarMenu = $('.page-sidebar-menu'); $(".sidebar-search" , sidebar).removeClass("open"); if ( body.hasClass("page-sidebar-closed") ) { body.removeClass("page-sidebar-closed"); sidebarMenu.removeClass("page-sidebar-menu-closed"); if ( $.cookie ) { $.cookie('sidebar_closed' , '0'); } } else { body.addClass("page-sidebar-closed"); sidebarMenu.addClass("page-sidebar-menu-closed"); if ( body.hasClass("page-sidebar-fixed") ) { sidebarMenu.trigger("mouseleave"); } if ( $.cookie ) { $.cookie('sidebar_closed' , '1'); } } $(window).trigger('resize'); }); }; // Handles the horizontal menu var handleHorizontalMenu = function () { //handle tab click $('.page-header').on('click' , '.hor-menu a[data-toggle="tab"]' , function (e) { e.preventDefault(); var nav = $(".hor-menu .nav"); var active_link = nav.find('li.current'); $('li.active' , active_link).removeClass("active"); $('.selected' , active_link).remove(); var new_link = $(this).parents('li').last(); new_link.addClass("current"); new_link.find("a:first").append(''); }); // handle search box expand/collapse $('.page-header').on('click' , '.search-form' , function (e) { $(this).addClass("open"); $(this).find('.form-control').focus(); $('.page-header .search-form .form-control').on('blur' , function (e) { $(this).closest('.search-form').removeClass("open"); $(this).unbind("blur"); }); }); // handle hor menu search form on enter press $('.page-header').on('keypress' , '.hor-menu .search-form .form-control' , function (e) { if ( e.which == 13 ) { $(this).closest('.search-form').submit(); return false; } }); // handle header search button click $('.page-header').on('mousedown' , '.search-form.open .submit' , function (e) { e.preventDefault(); e.stopPropagation(); $(this).closest('.search-form').submit(); }); // handle hover dropdown menu for desktop devices only $('[data-hover="megamenu-dropdown"]').not('.hover-initialized').each(function () { $(this).dropdownHover(); $(this).addClass('hover-initialized'); }); $(document).on('click' , '.mega-menu-dropdown .dropdown-menu' , function (e) { e.stopPropagation(); }); }; // Handles Bootstrap Tabs. var handleTabs = function () { // fix content height on tab click $('body').on('shown.bs.tab' , 'a[data-toggle="tab"]' , function () { handleSidebarAndContentHeight(); }); }; // Handles the go to top button at the footer var handleGoTop = function () { var offset = 300; var duration = 500; if ( navigator.userAgent.match(/iPhone|iPad|iPod/i) ) { // ios supported $(window).bind("touchend touchcancel touchleave" , function (e) { if ( $(this).scrollTop() > offset ) { $('.scroll-to-top').fadeIn(duration); } else { $('.scroll-to-top').fadeOut(duration); } }); } else { // general $(window).scroll(function () { if ( $(this).scrollTop() > offset ) { $('.scroll-to-top').fadeIn(duration); } else { $('.scroll-to-top').fadeOut(duration); } }); } $('.scroll-to-top').click(function (e) { e.preventDefault(); $('html, body').animate({scrollTop : 0} , duration); return false; }); }; // Hanlde 100% height elements(block, portlet, etc) var handle100HeightContent = function () { $('.full-height-content').each(function () { var target = $(this); var height; height = App.getViewPort().height - $('.page-header').outerHeight(true) - $('.page-footer').outerHeight(true) - $('.page-title').outerHeight(true) - $('.page-bar').outerHeight(true); if ( target.hasClass('portlet') ) { var portletBody = target.find('.portlet-body'); App.destroySlimScroll(portletBody.find('.full-height-content-body')); // destroy slimscroll height = height - target.find('.portlet-title').outerHeight(true) - parseInt(target.find('.portlet-body').css('padding-top')) - parseInt(target.find('.portlet-body').css('padding-bottom')) - 5; if ( App.getViewPort().width >= resBreakpointMd && target.hasClass("full-height-content-scrollable") ) { height = height - 35; portletBody.find('.full-height-content-body').css('height' , height); App.initSlimScroll(portletBody.find('.full-height-content-body')); } else { portletBody.css('min-height' , height); } } else { App.destroySlimScroll(target.find('.full-height-content-body')); // destroy slimscroll if ( App.getViewPort().width >= resBreakpointMd && target.hasClass("full-height-content-scrollable") ) { height = height - 35; target.find('.full-height-content-body').css('height' , height); App.initSlimScroll(target.find('.full-height-content-body')); } else { target.css('min-height' , height); } } }); }; //* END:CORE HANDLERS *// return { // Main init methods to initialize the layout //IMPORTANT!!!: Do not modify the core handlers call order. initHeader : function () { handleHorizontalMenu(); // handles horizontal menu } , setSidebarMenuActiveLink : function (mode , el) { handleSidebarMenuActiveLink(mode , el); } , initSidebar : function () { //layout handlers handleFixedSidebar(); // handles fixed sidebar menu handleSidebarMenu(); // handles main menu handleSidebarToggler(); // handles sidebar hide/show //if ( App.isAngularJsApp() ) { // handleSidebarMenuActiveLink('match'); // init sidebar active links //} App.addResizeHandler(handleFixedSidebar); // reinitialize fixed sidebar on window resize } , initContent : function () { handle100HeightContent(); // handles 100% height elements(block, portlet, etc) handleTabs(); // handle bootstrah tabs App.addResizeHandler(handleSidebarAndContentHeight); // recalculate sidebar & content height on window resize App.addResizeHandler(handle100HeightContent); // reinitialize content height on window resize } , initFooter : function () { handleGoTop(); //handles scroll to top functionality in the footer } , chPwd : function () { //打开修改密码modal $('#chPwdBtn').on('click' , function (e) { e.preventDefault(); $('#chPwdModal').modal('show'); }); //提交修改密码表单 $('#submitChPwdForm').on('click' , function (e) { e.preventDefault(); $.post(Param.uri.chPwd , $('#chPwdForm').serializeObject()) .fail(function (res) { res.error(res.responseText); }) .done(function (res) { if ( res.code != 0 ) { tips.error( res.msg ); } else { $('#chPwdModal').modal('hide'); tips.success( res.msg , function(){ window.location.reload(); }); } }); }); } , init : function () { this.initHeader(); this.initSidebar(); this.initContent(); this.initFooter(); this.setSidebarMenuActiveLink('match'); this.chPwd(); } , //public function to fix the sidebar and content height accordingly fixContentHeight : function () { handleSidebarAndContentHeight(); } , initFixedSidebarHoverEffect : function () { handleFixedSidebarHoverEffect(); } , initFixedSidebar : function () { handleFixedSidebar(); } , getLayoutImgPath : function () { return App.getAssetsPath() + layoutImgPath; } , getLayoutCssPath : function () { return App.getAssetsPath() + layoutCssPath; } }; }(); jQuery(document).ready(function () { Layout.init(); // init metronic core componets }); ================================================ FILE: resources/assets/static/src/themes/global/components-rounded.css ================================================ /********************************* METRONIC ROUNDED STYLE COMPONENTS *********************************/ /* Cubic Bezier Transition */ /*** General reset ***/ /* Set default body */ body { color: #333333; font-family: "Open Sans", sans-serif; padding: 0px !important; margin: 0px !important; direction: "ltr"; font-size: 14px; } /* Internet Explorer 10 doesn't differentiate device width from viewport width, and thus doesn't properly apply the media queries in Bootstrap's CSS. To address this, you can optionally include the following CSS and JavaScript to work around this problem until Microsoft issues a fix. */ @-webkit-viewport { width: device-width; } @-moz-viewport { width: device-width; } @-ms-viewport { width: device-width; } @-o-viewport { width: device-width; } @viewport { width: device-width; } /* Internet Explorer 10 doesn't differentiate device width from viewport width, and thus doesn't properly apply the media queries in Bootstrap's CSS. To address this, following CSS code applied */ @-ms-viewport { width: auto !important; } .md-shadow-z-1 { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.18); } .md-shadow-z-1-i { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.18) !important; } .md-shadow-z-1-hover { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.14), 0 1px 2px rgba(0, 0, 0, 0.22); } .md-shadow-z-2 { box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.22); } .md-shadow-z-2-i { box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.22) !important; } .md-shadow-z-2-hover { box-shadow: 0 3px 6px rgba(0, 0, 0, 0.2), 0 3px 6px rgba(0, 0, 0, 0.26); } .md-shadow-z-3 { box-shadow: 0 8px 18px rgba(0, 0, 0, 0.18), 0 6px 6px rgba(0, 0, 0, 0.23); } .md-shadow-z-3-i { box-shadow: 0 8px 18px rgba(0, 0, 0, 0.18), 0 6px 6px rgba(0, 0, 0, 0.24) !important; } .md-shadow-z-3-hover { box-shadow: 0 8px 18px rgba(0, 0, 0, 0.22), 0 6px 6px rgba(0, 0, 0, 0.26); } .md-shadow-z-4 { box-shadow: 0 14px 28px rgba(0, 0, 0, 0.26), 0 10px 10px rgba(0, 0, 0, 0.22); } .md-shadow-z-4-i { box-shadow: 0 14px 28px rgba(0, 0, 0, 0.26), 0 10px 10px rgba(0, 0, 0, 0.22) !important; } .md-shadow-z-5 { box-shadow: 0 19px 38px rgba(0, 0, 0, 0.28), 0 15px 12px rgba(0, 0, 0, 0.22); } .md-shadow-z-5-i { box-shadow: 0 19px 38px rgba(0, 0, 0, 0.28), 0 15px 12px rgba(0, 0, 0, 0.22) !important; } .md-shadow-none { box-shadow: none !important; } .md-click-circle { display: block; position: absolute; background: rgba(0, 0, 0, 0.2); border-radius: 50%; opacity: 0; -webkit-animation: scale(0); -moz-transform: scale(0); transform: scale(0); } .md-click-circle.md-click-animate { -webkit-animation: mdClickEffect 0.65s linear; -moz-animation: mdClickEffect 0.65s linear; animation: mdClickEffect 0.65s linear; } @-webkit-keyframes mdClickEffect { 0% { opacity: 1; -webkit-transform: scale(0); } 100% { opacity: 0 !important; -webkit-transform: scale(2.5); } } @-moz-keyframes mdClickEffect { 0% { opacity: 1; -webkit-transform: scale(0); } 100% { opacity: 0 !important; -moz-transform: scale(2.5); } } @keyframes mdClickEffect { 0% { opacity: 1; -webkit-transform: scale(0); } 100% { opacity: 0 !important; transform: scale(2.5); } } .form-group.form-md-line-input { position: relative; margin: 0 0 35px 0; padding-top: 20px; } .form-horizontal .form-group.form-md-line-input { padding-top: 10px; margin-bottom: 20px; margin: 0 -15px 20px -15px; } .form-horizontal .form-group.form-md-line-input > label { padding-top: 5px; font-size: 14px; color: #888888; opacity: 1 ; filter: alpha(opacity=100) ; } .form-group.form-md-line-input .form-control { background: none; border: 0; border-bottom: 1px solid #c2cad8; -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; color: #555555; box-shadow: none; padding-left: 0; padding-right: 0; font-size: 14px; } .form-group.form-md-line-input .form-control::-moz-placeholder { color: #999; opacity: 1; } .form-group.form-md-line-input .form-control:-ms-input-placeholder { color: #999; } .form-group.form-md-line-input .form-control::-webkit-input-placeholder { color: #999; } .form-group.form-md-line-input .form-control.form-control-static { border-bottom: 0; } .form-group.form-md-line-input .form-control.input-sm { font-size: 14px; padding: 6px 0; } .form-group.form-md-line-input .form-control.input-lg { font-size: 20px; padding: 14px 0; } .form-group.form-md-line-input .form-control ~ label, .form-group.form-md-line-input .form-control ~ .form-control-focus { width: 100%; position: absolute; left: 0; bottom: 0; pointer-events: none; } .form-horizontal .form-group.form-md-line-input .form-control ~ label, .form-horizontal .form-group.form-md-line-input .form-control ~ .form-control-focus { width: auto; left: 15px; right: 15px; } .form-group.form-md-line-input .form-control ~ label:after, .form-group.form-md-line-input .form-control ~ .form-control-focus:after { content: ''; position: absolute; z-index: 5; bottom: 0; left: 50%; width: 0; height: 2px; width: 0; visibility: hidden; transition: 0.2s ease all; } .form-group.form-md-line-input .form-control ~ label { top: 0; margin-bottom: 0; font-size: 14px; color: #888888; opacity: 1 ; filter: alpha(opacity=100) ; } .form-group.form-md-line-input .form-control ~ .help-block-error { opacity: 1 ; filter: alpha(opacity=100) ; } .form-group.form-md-line-input .form-control.edited:not([readonly]) ~ label, .form-group.form-md-line-input .form-control.edited:not([readonly]) ~ .form-control-focus, .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ .form-control-focus, .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ label, .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ .form-control-focus { color: #888888; } .form-group.form-md-line-input .form-control.edited:not([readonly]) ~ label:after, .form-group.form-md-line-input .form-control.edited:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ label:after, .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ label:after, .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ .form-control-focus:after { visibility: visible; left: 0; width: 100%; background: #36c6d3; } .form-group.form-md-line-input .form-control.edited:not([readonly]) ~ label, .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ label { opacity: 1 ; filter: alpha(opacity=100) ; } .form-group.form-md-line-input .form-control.edited:not([readonly]) ~ .help-block, .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ .help-block, .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ .help-block { color: #36c6d3; opacity: 1 ; filter: alpha(opacity=100) ; } .form-group.form-md-line-input .form-control.edited:not([readonly]) ~ .help-block-error, .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ .help-block-error, .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ .help-block-error { opacity: 0 ; filter: alpha(opacity=0) ; } .form-group.form-md-line-input .form-control[readonly], .form-group.form-md-line-input .form-control[disabled], fieldset[disabled] .form-group.form-md-line-input .form-control { background: none; cursor: not-allowed; border-bottom: 1px dashed #c2cad8; } .form-group.form-md-line-input.form-md-floating-label .form-control ~ label { font-size: 16px; top: 25px; transition: 0.2s ease all; color: #999; } .form-group.form-md-line-input.form-md-floating-label .form-control[readonly] ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.edited ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.form-control-static ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.focus:not([readonly]) ~ label { top: 0; font-size: 13px; } .form-group.form-md-line-input.form-md-floating-label .form-control.input-sm ~ label { font-size: 14px; top: 24px; } .form-group.form-md-line-input.form-md-floating-label .form-control.input-sm[readonly] ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-sm.form-control-static ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-sm.edited ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-sm:focus:not([readonly]) ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-sm.focus:not([readonly]) ~ label { top: 0; font-size: 13px; } .form-group.form-md-line-input.form-md-floating-label .form-control.input-lg ~ label { font-size: 20px; top: 30px; } .form-group.form-md-line-input.form-md-floating-label .form-control.input-lg[readonly] ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-lg.edited ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-lg.form-control-static ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-lg:focus:not([readonly]) ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-lg.focus:not([readonly]) ~ label { top: 0; font-size: 13px; } .form-group.form-md-line-input.form-md-floating-label .input-icon > label { padding-left: 34px; } .form-group.form-md-line-input.form-md-floating-label .input-icon.right > label { padding-left: 0; padding-right: 34px; } .form-group.form-md-line-input.form-md-floating-label .input-group.left-addon label { padding-left: 34px; } .form-group.form-md-line-input.form-md-floating-label .input-group.right-addon label { padding-right: 34px; } .form-group.form-md-line-input + .input-icon { padding-top: 0; } .form-group.form-md-line-input .help-block { position: absolute; margin: 2px 0 0 0; opacity: 0 ; filter: alpha(opacity=0) ; font-size: 13px; } .form-group.form-md-line-input > .input-icon > i { left: 0; bottom: 0; margin: 9px 2px 10px 10px; color: #888888; } .form-group.form-md-line-input > .input-icon.input-icon-lg > i { top: 6px; } .form-group.form-md-line-input > .input-icon.input-icon-sm > i { top: -1px; } .form-group.form-md-line-input > .input-icon .form-control { padding-left: 34px; } .form-group.form-md-line-input > .input-icon > label { margin-top: -20px; } .form-group.form-md-line-input > .input-icon.right .form-control { padding-left: 0; padding-right: 34px; } .form-group.form-md-line-input > .input-icon.right > i { left: auto; right: 8px; margin: 11px 2px 10px 10px; } .form-group.form-md-line-input + .input-group { padding-top: 0; } .form-group.form-md-line-input .input-group { padding-top: 0; } .form-group.form-md-line-input .input-group > label { margin-top: -20px; } .form-group.form-md-line-input .input-group .input-group-addon { -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; background: none; border: 0; border-bottom: 1px solid #c2cad8; } .form-group.form-md-line-input .input-group + .input-group-control { padding-top: 0; } .form-group.form-md-line-input .input-group .input-group-control { padding-top: 0; position: relative; display: table-cell; vertical-align: bottom; } .form-group.form-md-line-input .input-group .input-group-control > label { margin-top: -20px; } .form-group.form-md-line-input .input-group .input-group-btn .btn { -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .form-group.form-md-line-input .input-group .input-group-btn.btn-left .btn { margin-right: 10px; } .form-group.form-md-line-input .input-group .input-group-btn.btn-right .btn { margin-left: 10px; } .form-group.form-md-line-input .input-group .help-block { margin-top: 35px; } .form-group.form-md-line-input .input-group.input-group-sm .help-block { margin-top: 30px; } .form-group.form-md-line-input .input-group.input-group-lg .help-block { margin-top: 47px; } .form-group.form-md-line-input.has-success .form-control { border-bottom: 1px solid #27a4b0; } .form-group.form-md-line-input.has-success .form-control.edited:not([readonly]) ~ label:after, .form-group.form-md-line-input.has-success .form-control.edited:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-success .form-control.form-control-static ~ label:after, .form-group.form-md-line-input.has-success .form-control.form-control-static ~ .form-control-focus:after, .form-group.form-md-line-input.has-success .form-control:focus:not([readonly]) ~ label:after, .form-group.form-md-line-input.has-success .form-control:focus:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-success .form-control.focus:not([readonly]) ~ label:after, .form-group.form-md-line-input.has-success .form-control.focus:not([readonly]) ~ .form-control-focus:after { background: #27a4b0; } .form-group.form-md-line-input.has-success .form-control.edited:not([readonly]) ~ label, .form-group.form-md-line-input.has-success .form-control.form-control-static ~ label, .form-group.form-md-line-input.has-success .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input.has-success .form-control.focus:not([readonly]) ~ label { color: #27a4b0; } .form-group.form-md-line-input.has-success .form-control.edited:not([readonly]) ~ i, .form-group.form-md-line-input.has-success .form-control.form-control-static ~ i, .form-group.form-md-line-input.has-success .form-control:focus:not([readonly]) ~ i, .form-group.form-md-line-input.has-success .form-control.focus:not([readonly]) ~ i { color: #27a4b0; } .form-group.form-md-line-input.has-success .form-control.edited:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-success .form-control.form-control-static ~ .help-block, .form-group.form-md-line-input.has-success .form-control:focus:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-success .form-control.focus:not([readonly]) ~ .help-block { color: #27a4b0; } .form-group.form-md-line-input.has-success .input-group-addon { color: #27a4b0; border-bottom: 1px solid #27a4b0; } .form-group.form-md-line-input.has-success label { color: #27a4b0; } .form-group.form-md-line-input.has-warning .form-control { border-bottom: 1px solid #c29d0b; } .form-group.form-md-line-input.has-warning .form-control.edited:not([readonly]) ~ label:after, .form-group.form-md-line-input.has-warning .form-control.edited:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-warning .form-control.form-control-static ~ label:after, .form-group.form-md-line-input.has-warning .form-control.form-control-static ~ .form-control-focus:after, .form-group.form-md-line-input.has-warning .form-control:focus:not([readonly]) ~ label:after, .form-group.form-md-line-input.has-warning .form-control:focus:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-warning .form-control.focus:not([readonly]) ~ label:after, .form-group.form-md-line-input.has-warning .form-control.focus:not([readonly]) ~ .form-control-focus:after { background: #c29d0b; } .form-group.form-md-line-input.has-warning .form-control.edited:not([readonly]) ~ label, .form-group.form-md-line-input.has-warning .form-control.form-control-static ~ label, .form-group.form-md-line-input.has-warning .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input.has-warning .form-control.focus:not([readonly]) ~ label { color: #c29d0b; } .form-group.form-md-line-input.has-warning .form-control.edited:not([readonly]) ~ i, .form-group.form-md-line-input.has-warning .form-control.form-control-static ~ i, .form-group.form-md-line-input.has-warning .form-control:focus:not([readonly]) ~ i, .form-group.form-md-line-input.has-warning .form-control.focus:not([readonly]) ~ i { color: #c29d0b; } .form-group.form-md-line-input.has-warning .form-control.edited:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-warning .form-control.form-control-static ~ .help-block, .form-group.form-md-line-input.has-warning .form-control:focus:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-warning .form-control.focus:not([readonly]) ~ .help-block { color: #c29d0b; } .form-group.form-md-line-input.has-warning .input-group-addon { color: #c29d0b; border-bottom: 1px solid #c29d0b; } .form-group.form-md-line-input.has-warning label { color: #c29d0b; } .form-group.form-md-line-input.has-error .form-control { border-bottom: 1px solid #e73d4a; } .form-group.form-md-line-input.has-error .form-control.edited:not([readonly]) ~ label:after, .form-group.form-md-line-input.has-error .form-control.edited:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-error .form-control.form-control-static ~ label:after, .form-group.form-md-line-input.has-error .form-control.form-control-static ~ .form-control-focus:after, .form-group.form-md-line-input.has-error .form-control:focus:not([readonly]) ~ label:after, .form-group.form-md-line-input.has-error .form-control:focus:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-error .form-control.focus:not([readonly]) ~ label:after, .form-group.form-md-line-input.has-error .form-control.focus:not([readonly]) ~ .form-control-focus:after { background: #e73d4a; } .form-group.form-md-line-input.has-error .form-control.edited:not([readonly]) ~ label, .form-group.form-md-line-input.has-error .form-control.form-control-static ~ label, .form-group.form-md-line-input.has-error .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input.has-error .form-control.focus:not([readonly]) ~ label { color: #e73d4a; } .form-group.form-md-line-input.has-error .form-control.edited:not([readonly]) ~ i, .form-group.form-md-line-input.has-error .form-control.form-control-static ~ i, .form-group.form-md-line-input.has-error .form-control:focus:not([readonly]) ~ i, .form-group.form-md-line-input.has-error .form-control.focus:not([readonly]) ~ i { color: #e73d4a; } .form-group.form-md-line-input.has-error .form-control.edited:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-error .form-control.form-control-static ~ .help-block, .form-group.form-md-line-input.has-error .form-control:focus:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-error .form-control.focus:not([readonly]) ~ .help-block { color: #e73d4a; } .form-group.form-md-line-input.has-error .input-group-addon { color: #e73d4a; border-bottom: 1px solid #e73d4a; } .form-group.form-md-line-input.has-error label { color: #e73d4a; } .form-group.form-md-line-input.has-info .form-control { border-bottom: 1px solid #327ad5; } .form-group.form-md-line-input.has-info .form-control.edited:not([readonly]) ~ label:after, .form-group.form-md-line-input.has-info .form-control.edited:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-info .form-control.form-control-static ~ label:after, .form-group.form-md-line-input.has-info .form-control.form-control-static ~ .form-control-focus:after, .form-group.form-md-line-input.has-info .form-control:focus:not([readonly]) ~ label:after, .form-group.form-md-line-input.has-info .form-control:focus:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-info .form-control.focus:not([readonly]) ~ label:after, .form-group.form-md-line-input.has-info .form-control.focus:not([readonly]) ~ .form-control-focus:after { background: #327ad5; } .form-group.form-md-line-input.has-info .form-control.edited:not([readonly]) ~ label, .form-group.form-md-line-input.has-info .form-control.form-control-static ~ label, .form-group.form-md-line-input.has-info .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input.has-info .form-control.focus:not([readonly]) ~ label { color: #327ad5; } .form-group.form-md-line-input.has-info .form-control.edited:not([readonly]) ~ i, .form-group.form-md-line-input.has-info .form-control.form-control-static ~ i, .form-group.form-md-line-input.has-info .form-control:focus:not([readonly]) ~ i, .form-group.form-md-line-input.has-info .form-control.focus:not([readonly]) ~ i { color: #327ad5; } .form-group.form-md-line-input.has-info .form-control.edited:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-info .form-control.form-control-static ~ .help-block, .form-group.form-md-line-input.has-info .form-control:focus:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-info .form-control.focus:not([readonly]) ~ .help-block { color: #327ad5; } .form-group.form-md-line-input.has-info .input-group-addon { color: #327ad5; border-bottom: 1px solid #327ad5; } .form-group.form-md-line-input.has-info label { color: #327ad5; } .form-inline .form-md-line-input { margin: 0; padding-top: 0; margin-right: 20px; } .form-inline .form-md-line-input > .input-icon { padding: 0; } .form-horizontal .form-group.form-md-line-input .input-icon .form-control { padding-left: 33px; } .form-horizontal .form-group.form-md-line-input .input-icon > i { top: 0; } .form-horizontal .form-group.form-md-line-input .input-icon.right .form-control { padding-left: 0; padding-right: 33px; } .form-horizontal .form-group.form-md-line-input .input-icon > .form-control-focus { left: 0 !important; right: 0 !important; } .form-horizontal .form-group.form-md-line-input .input-group { padding-top: 0; } .form-horizontal .form-group.form-md-line-input .input-group > .input-group-btn .btn { margin-bottom: 0 !important; } .form-horizontal .form-group.form-md-line-input .input-group > .input-group-control { padding-top: 0; } .form-horizontal .form-group.form-md-line-input .input-group > .input-group-control > .form-control-focus { left: 0 !important; right: 0 !important; } .form-horizontal .form-group.form-md-line-input .input-group > .form-control-focus { left: 0 !important; right: 0 !important; } .md-checkbox { position: relative; /* handling click events */ /* when checkbox is checked */ } .md-checkbox.md-checkbox-inline { display: inline-block; } .form-inline .md-checkbox.md-checkbox-inline { margin-right: 20px; top: 3px; } .md-checkbox input[type=checkbox] { visibility: hidden; position: absolute; } .md-checkbox label { cursor: pointer; padding-left: 30px; } .md-checkbox label > span { display: block; position: absolute; left: 0; -webkit-transition-duration: 0.3s; -moz-transition-duration: 0.3s; transition-duration: 0.3s; } .md-checkbox label > span.inc { background: #fff; left: -20px; top: -20px; height: 60px; width: 60px; opacity: 0; border-radius: 50% !important; -moz-border-radius: 50% !important; -webkit-border-radius: 50% !important; } .md-checkbox label > .box { top: 0px; border: 2px solid #666; height: 20px; width: 20px; z-index: 5; -webkit-transition-delay: 0.2s; -moz-transition-delay: 0.2s; transition-delay: 0.2s; } .md-checkbox label > .check { top: -4px; left: 6px; width: 10px; height: 20px; border: 2px solid #36c6d3; border-top: none; border-left: none; opacity: 0; z-index: 5; -webkit-transform: rotate(180deg); -moz-transform: rotate(180deg); transform: rotate(180deg); -webkit-transition-delay: 0.3s; -moz-transition-delay: 0.3s; transition-delay: 0.3s; } .md-checkbox label > span.inc { -webkit-animation: growCircle 0.3s ease; -moz-animation: growCircle 0.3s ease; animation: growCircle 0.3s ease; } .md-checkbox input[type=checkbox]:checked ~ label > .box { opacity: 0; -webkit-transform: scale(0) rotate(-180deg); -moz-transform: scale(0) rotate(-180deg); transform: scale(0) rotate(-180deg); } .md-checkbox input[type=checkbox]:checked ~ label > .check { opacity: 1; -webkit-transform: scale(1) rotate(45deg); -moz-transform: scale(1) rotate(45deg); transform: scale(1) rotate(45deg); } .md-checkbox input[type=checkbox]:disabled ~ label, .md-checkbox input[type=checkbox][disabled] ~ label { cursor: not-allowed; opacity: 0.7 ; filter: alpha(opacity=70) ; } .md-checkbox input[type=checkbox]:disabled ~ label > .box, .md-checkbox input[type=checkbox][disabled] ~ label > .box { cursor: not-allowed; opacity: 0.7 ; filter: alpha(opacity=70) ; } .md-checkbox input[type=checkbox]:disabled:checked ~ label > .check, .md-checkbox input[type=checkbox][disabled]:checked ~ label > .check { cursor: not-allowed; opacity: 0.7 ; filter: alpha(opacity=70) ; } .has-error .md-checkbox label, .has-error.md-checkbox label { color: #e73d4a; } .has-error .md-checkbox label > .box, .has-error.md-checkbox label > .box { border-color: #e73d4a; } .has-error .md-checkbox label > .check, .has-error.md-checkbox label > .check { border-color: #e73d4a; } .has-success .md-checkbox label, .has-success.md-checkbox label { color: #27a4b0; } .has-success .md-checkbox label > .box, .has-success.md-checkbox label > .box { border-color: #27a4b0; } .has-success .md-checkbox label > .check, .has-success.md-checkbox label > .check { border-color: #27a4b0; } .has-warning .md-checkbox label, .has-warning.md-checkbox label { color: #c29d0b; } .has-warning .md-checkbox label > .box, .has-warning.md-checkbox label > .box { border-color: #c29d0b; } .has-warning .md-checkbox label > .check, .has-warning.md-checkbox label > .check { border-color: #c29d0b; } .has-info .md-checkbox label, .has-info.md-checkbox label { color: #327ad5; } .has-info .md-checkbox label > .box, .has-info.md-checkbox label > .box { border-color: #327ad5; } .has-info .md-checkbox label > .check, .has-info.md-checkbox label > .check { border-color: #327ad5; } .form-md-checkboxes { padding-top: 5px; } .form-md-checkboxes > label { font-size: 14px; color: #888888; opacity: 1 ; filter: alpha(opacity=100) ; } .form-md-checkboxes.has-error label { color: #ed6b75; } .form-md-checkboxes.has-info label { color: #659be0; } .form-md-checkboxes.has-success label { color: #36c6d3; } .form-md-checkboxes.has-warning label { color: #F1C40F; } .md-checkbox-list { margin: 5px 0 5px 0; } .form-horizontal .md-checkbox-list { margin-top: 5px; } .md-checkbox-list .md-checkbox { display: block; margin-bottom: 10px; } .md-checkbox-list .md-checkbox:last-child { margin-bottom: 0; } .md-checkbox-inline { margin: 5px 0 5px 0; } .form-horizontal .md-checkbox-inline { margin-top: 7px; } .md-checkbox-inline .md-checkbox { display: inline-block; margin-right: 20px; } .md-checkbox-inline .md-checkbox:last-child { margin-right: 0; } /* bubble animation */ @-webkit-keyframes growCircle { 0%, 100% { -webkit-transform: scale(0); opacity: 1; } 70% { background: #eee; -webkit-transform: scale(1.25); } } @-moz-keyframes growCircle { 0%, 100% { -moz-transform: scale(0); opacity: 1; } 70% { background: #eee; -moz-transform: scale(1.25); } } @keyframes growCircle { 0%, 100% { transform: scale(0); opacity: 1; } 70% { background: #eee; transform: scale(1.25); } } .md-radio { position: relative; /* handling click events */ /* when radio is checked */ } .md-radio input[type=radio] { visibility: hidden; position: absolute; } .md-radio label { cursor: pointer; padding-left: 30px; } .md-radio label > span { display: block; position: absolute; left: 0; -webkit-transition-duration: 0.3s; -moz-transition-duration: 0.3s; transition-duration: 0.3s; } .md-radio label > span.inc { background: #fff; left: -20px; top: -20px; height: 60px; width: 60px; opacity: 0; border-radius: 50% !important; -moz-border-radius: 50% !important; -webkit-border-radius: 50% !important; } .md-radio label > .box { top: 0px; border: 2px solid #666; height: 20px; width: 20px; border-radius: 50% !important; -moz-border-radius: 50% !important; -webkit-border-radius: 50% !important; z-index: 5; } .md-radio label > .check { top: 5px; left: 5px; width: 10px; height: 10px; background: #36c6d3; opacity: 0; z-index: 6; border-radius: 50% !important; -moz-border-radius: 50% !important; -webkit-border-radius: 50% !important; -webkit-transform: scale(0); -moz-transform: scale(0); transform: scale(0); } .md-radio label > span.inc { -webkit-animation: growCircleRadio 0.3s ease; -moz-animation: growCircleRadio 0.3s ease; animation: growCircleRadio 0.3s ease; } .md-radio input[type=radio]:checked ~ label > .check { opacity: 1; -webkit-transform: scale(1); -moz-transform: scale(1); transform: scale(1); } .md-radio input[type=radio]:disabled ~ label, .md-radio input[type=radio][disabled] ~ label { cursor: not-allowed; opacity: 0.7 ; filter: alpha(opacity=70) ; } .md-radio input[type=radio]:disabled ~ label > .box, .md-radio input[type=radio][disabled] ~ label > .box { cursor: not-allowed; opacity: 0.7 ; filter: alpha(opacity=70) ; } .md-radio input[type=radio]:disabled:checked ~ label > .check, .md-radio input[type=radio][disabled]:checked ~ label > .check { cursor: not-allowed; opacity: 0.7 ; filter: alpha(opacity=70) ; } .has-error .md-radio label, .has-error.md-radio label { color: #e73d4a; } .has-error .md-radio label > .box, .has-error.md-radio label > .box { border-color: #e73d4a; } .has-error .md-radio label > .check, .has-error.md-radio label > .check { background: #e73d4a; } .has-success .md-radio label, .has-success.md-radio label { color: #27a4b0; } .has-success .md-radio label > .box, .has-success.md-radio label > .box { border-color: #27a4b0; } .has-success .md-radio label > .check, .has-success.md-radio label > .check { background: #27a4b0; } .has-warning .md-radio label, .has-warning.md-radio label { color: #c29d0b; } .has-warning .md-radio label > .box, .has-warning.md-radio label > .box { border-color: #c29d0b; } .has-warning .md-radio label > .check, .has-warning.md-radio label > .check { background: #c29d0b; } .has-info .md-radio label, .has-info.md-radio label { color: #327ad5; } .has-info .md-radio label > .box, .has-info.md-radio label > .box { border-color: #327ad5; } .has-info .md-radio label > .check, .has-info.md-radio label > .check { background: #327ad5; } .form-md-radios { padding-top: 5px; } .form-md-radios > label { font-size: 14px; color: #888888; opacity: 1 ; filter: alpha(opacity=100) ; } .form-md-radios.has-error label { color: #ed6b75; } .form-md-radios.has-info label { color: #659be0; } .form-md-radios.has-success label { color: #36c6d3; } .form-md-radios.has-warning label { color: #F1C40F; } .md-radio-list { margin: 5px 0 5px 0; } .form-horizontal .md-radio-list { margin-top: 5px; } .md-radio-list .md-radio { display: block; margin-bottom: 10px; } .md-radio-inline { margin: 5px 0 5px 0; } .form-horizontal .md-radio-inline { margin-top: 7px; } .md-radio-inline .md-radio { display: inline-block; margin-right: 20px; } .md-radio-inline .md-radio:last-child { margin-right: 0; } /* bubble animation */ @-webkit-keyframes growCircleRadio { 0%, 100% { -webkit-transform: scale(0); opacity: 1; } 70% { background: #eee; -webkit-transform: scale(1.25); } } @-moz-keyframes growCircleRadio { 0%, 100% { -moz-transform: scale(0); opacity: 1; } 70% { background: #eee; -moz-transform: scale(1.25); } } @keyframes growCircleRadio { 0%, 100% { transform: scale(0); opacity: 1; } 70% { background: #eee; transform: scale(1.25); } } /*** General typography ***/ /* Links */ a:hover { cursor: pointer; } /* Primary Link */ .primary-link { color: #65A0D0; font-weight: 600; } .primary-link:hover { color: #5194ca; } p { margin: 20px 0; } label { font-weight: normal; } /* Headings */ h1, h2, h3, h4, h5, h6 { font-family: "Open Sans", sans-serif; font-weight: 300; } h1 { font-size: 36px; } h2 { font-size: 30px; } h3 { font-size: 24px; } h4 { font-size: 18px; } h5 { font-size: 14px; } h6 { font-size: 12px; } /* Headings helper text */ h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { color: #444444; } /* Block headings */ h1.block, h2.block, h3.block, h4.block, h5.block, h6.block { padding-top: 10px; padding-bottom: 10px; } /* Links */ a { text-shadow: none; color: #337ab7; } a:hover { color: #23527c; } a:focus, a:hover, a:active { outline: 0; } /* Horizontal break */ hr { margin: 20px 0; border: 0; border-top: 1px solid #eee; border-bottom: 0; } /* Unstyled List */ .list-unstyled li > .list-unstyled { margin-left: 25px; } /* Code */ code { border: 1px solid #e1e1e1; -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1); -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1); } /* Disabled Navigation Link */ .disabled-link.disable-target, .disabled-link .disable-target { opacity: 0.6 !important; filter: alpha(opacity=60) !important; } .disabled-link.disable-target:hover, .disabled-link .disable-target:hover { cursor: not-allowed !important; } .disabled-link:hover { cursor: not-allowed !important; } /*** Utilities ***/ /* Rounded Element */ .rounded-2 { border-radius: 2px !important; } .rounded-3 { border-radius: 3px !important; } .rounded-4 { border-radius: 4px !important; } /* Circle Element */ .circle { border-radius: 25px !important; } .circle-right { border-radius: 0 25px 25px 0 !important; } .circle-left { border-radius: 25px 0 0 25px !important; } .circle-bottom { border-radius: 0 0 25px 25px !important; } .circle-top { border-radius: 25px 25px 0 0 !important; } .rounded { border-radius: 50% !important; } /* General utilities */ .display-none, .display-hide { display: none; } .hidden { display: none !important; } .primary-font { font-family: "Open Sans", sans-serif !important; } .bold { font-weight: 700 !important; } .bold.btn { letter-spacing: 0; } .sbold { font-weight: 600 !important; } .sbold.btn { letter-spacing: 0; } .thin { font-weight: 300 !important; } .uppercase { text-transform: uppercase !important; } .fix-margin { margin-left: 0px !important; } .border { border: 1px solid red; } .font-hg { font-size: 23px; } .font-lg { font-size: 18px; } .font-md { font-size: 14px; } .font-sm { font-size: 13px; } .font-xs { font-size: 11px; } .inline { display: inline; } .inline-block { display: inline-block; } .text-align-reverse { text-align: right; } /* Margin and padding utilities */ .no-space { margin: 0px !important; padding: 0px !important; } .no-margin { margin: 0; } .margin-bottom-5 { margin-bottom: 5px; } .margin-bottom-10 { margin-bottom: 10px !important; } .margin-top-10 { margin-top: 10px !important; } .margin-top-15 { margin-top: 15px !important; } .margin-bottom-15 { margin-bottom: 15px !important; } .margin-bottom-20 { margin-bottom: 20px !important; } .margin-top-20 { margin-top: 20px !important; } .margin-top-30 { margin-top: 30px !important; } .margin-top-40 { margin-top: 40px !important; } .margin-bottom-25 { margin-bottom: 25px !important; } .margin-bottom-30 { margin-bottom: 30px !important; } .margin-bottom-40 { margin-bottom: 40px !important; } .margin-right-10 { margin-right: 10px !important; } /* IE8 & IE9 mode utilities */ .visible-ie8 { display: none; } .ie8 .visible-ie8 { display: inherit !important; } .visible-ie9 { display: none; } .ie9 .visible-ie9 { display: inherit !important; } .hidden-ie8 { display: inherit; } .ie8 .hidden-ie8 { display: none !important; } .hidden-ie9 { display: inherit; } .ie9 .hidden-ie9 { display: none !important; } /*** Responsive Utils ***/ @media (max-width: 1024px) { .hidden-1024 { display: none; } } @media (max-width: 480px) { .hidden-480 { display: none; } } @media (max-width: 320px) { .hidden-320 { display: none; } } /*** Demo Utils ***/ .scrollspy-example { position: relative; height: 200px; margin-top: 10px; overflow: auto; } .util-btn-margin-bottom-5 .btn { margin-bottom: 5px !important; } .util-btn-group-margin-bottom-5 .btn-group { margin-bottom: 5px !important; } .padding-tb-10 { padding: 10px 0; } .padding-tb-15 { padding: 10px 0; } .padding-tb-20 { padding: 20px 0; } /*** Users ***/ .user-info { margin-bottom: 10px !important; } .user-info img { float: left; margin-right: 5px; } .user-info .details { display: inline-block; } .user-info .label { font-weight: 300; font-size: 11px; } /*** Custom vertical inline menu ***/ .ver-inline-menu { padding: 0; margin: 0; list-style: none; } .ver-inline-menu li { position: relative; margin-bottom: 1px; } .ver-inline-menu li i { width: 37px; height: 37px; display: inline-block; color: #b9cbd5; font-size: 15px; padding: 12px 10px 10px 8px; margin: 0 8px 0 0; text-align: center; background: #e0eaf0 !important; } .ver-inline-menu li a { font-size: 14px; font-weight: 300; color: #557386; display: block; background: #f0f6fa; border-left: solid 2px #c4d5df; } .ver-inline-menu li:hover a { background: #e0eaf0; text-decoration: none; } .ver-inline-menu li:hover i { color: #fff; background: #c4d5df !important; } .ver-inline-menu li.active a { border-left: solid 2px #0c91e5; } .ver-inline-menu li.active i { background: #0c91e5 !important; } .ver-inline-menu li.active a, .ver-inline-menu li.active i { color: #fff; background: #169ef4; text-decoration: none; } .ver-inline-menu li.active a, .ver-inline-menu li:hover a { font-size: 14px; } .ver-inline-menu li.active:after { content: ''; display: inline-block; border-bottom: 6px solid transparent; border-top: 6px solid transparent; border-left: 6px solid #169ef4; position: absolute; top: 12px; right: -5px; } @media (max-width: 767px) { .ver-inline-menu > li.active:after { display: none; } } /*** Separated List ***/ .list-separated { margin-top: 10px; margin-bottom: 15px; } .list-separated > div:last-child { border-right: 0; } @media (max-width: 767px) { .list-separated { /* 767px */ } .list-separated > div { margin-bottom: 20px; } } /*** Number & Chart Stats ***/ .number-stats { margin: 10px 0; } .number-stats .stat-number { display: inline-block; margin: 0 5px; } .number-stats .stat-number .title { font-size: 13px; margin-bottom: 3px; color: #B8C3C7; } .number-stats .stat-number .number { font-size: 27px; line-height: 27px; color: #7D8C9D; } .number-stats .stat-chart { display: inline-block; margin: 0 5px; } .number-stats > div { border-right: 1px solid #f5f5f5; } .number-stats > div:last-child { border-right: 0; } .number-stats .stat-left { float: right; } .number-stats .stat-left .stat-number { float: right; text-align: right; } .number-stats .stat-left .stat-chart { float: right; } .number-stats .stat-right { float: left !important; } .number-stats .stat-right .stat-number { float: left; text-align: left; } .number-stats .stat-right .stat-chart { float: left; } .number-stats .stat-number { float: left; text-align: left; } .number-stats .stat-chart { float: left; } /*** General User Record Listing ***/ .general-item-list > .item { padding: 10px 0; border-bottom: 1px solid #F1F4F7; } .general-item-list > .item:last-child { border-bottom: 0; } .general-item-list > .item > .item-head { margin-bottom: 5px; } .general-item-list > .item > .item-head:before, .general-item-list > .item > .item-head:after { content: " "; display: table; } .general-item-list > .item > .item-head:after { clear: both; } .general-item-list > .item > .item-head > .item-details { display: inline-block; float: left; } .general-item-list > .item > .item-head > .item-details > .item-pic { height: 35px; margin-right: 10px; -webkit-border-radius: 100%; -moz-border-radius: 100%; -ms-border-radius: 100%; -o-border-radius: 100%; border-radius: 100%; } .general-item-list > .item > .item-head > .item-details > .item-name { display: inline-block; margin-right: 10px; } .general-item-list > .item > .item-head > .item-details > .item-label { color: #C0C9CC; } .general-item-list > .item > .item-head > .item-status { color: #C0C9CC; top: 10px; position: relative; display: inline-block; float: right; } .general-item-list > .item > .item-head > .item-status > .badge { margin-top: -2px; } .general-item-list > .item > .item-body { color: #96a5aa; } /*** File dropzone ***/ .file-drop-zone { border: 2px dashed #ddd; padding: 30px; text-align: center; } .file-drop-zone.file-drop-zone-over { border-color: #aaa; } /*** Fontawesome Icons ***/ [class^="fa-"]:not(.fa-stack), [class^="glyphicon-"], [class^="icon-"], [class*=" fa-"]:not(.fa-stack), [class*=" glyphicon-"], [class*=" icon-"] { display: inline-block; *margin-right: .3em; line-height: 14px; -webkit-font-smoothing: antialiased; } /* Make font awesome icons fixed width */ li [class^="fa-"], li [class^="glyphicon-"], li [class^="icon-"], li [class*=" fa-"], li [class*=" glyphicon-"], li [class*=" icon-"] { display: inline-block; width: 1.25em; text-align: center; } li [class^="glyphicon-"], li [class*=" glyphicon-"] { top: 2px; } li [class^="icon-"], li [class*=" icon-"] { top: 1px; position: relative; } li [class^="fa-"].icon-large, li [class^="glyphicon-"].icon-large, li [class^="icon-"].icon-large, li [class*=" fa-"].icon-large, li [class*=" glyphicon-"].icon-large, li [class*=" icon-"].icon-large { /* increased font size for icon-large */ width: 1.5625em; } /* Icon states */ .icon-state-default { color: #bac3d0; } .icon-state-success { color: #36c6d3; } .icon-state-info { color: #659be0; } .icon-state-warning { color: #F1C40F; } .icon-state-danger { color: #ed6b75; } /*** Font Awesome 4.x Demo ***/ .fa-item { font-size: 14px; padding: 10px 10px 10px 20px; } .fa-item i { font-size: 16px; display: inline-block; width: 20px; color: #333; } .fa-item:hover { cursor: pointer; background: #eee; } /*** Simple Line Icons Demo ***/ .simplelineicons-demo .item-box { display: inline-block; font-size: 16px; margin: 0 -0.22em 1em 0; padding-left: 1em; width: 100%; } .simplelineicons-demo .item-box .item { background-color: #fff; color: #33383e; border-radius: 8px; display: inline-block; padding: 10px; width: 100%; } .simplelineicons-demo .item-box .item span { font-size: 22px; } @media only screen and (min-width: 768px) { .simplelineicons-demo .item-box { width: 33.333%; } } /*** Glyphicons Demo ***/ .glyphicons-demo ul { padding-left: 0; padding-bottom: 1px; margin-bottom: 20px; list-style: none; overflow: hidden; } .bs-glyphicon-class { text-align: center; } .bs-glyphicons { padding-left: 0; padding-bottom: 1px; margin-bottom: 20px; list-style: none; overflow: hidden; } .glyphicons-demo ul li { float: left; width: 25%; height: 115px; padding: 10px; margin: 0 -1px -1px 0; font-size: 14px; line-height: 1.4; text-align: center; border: 1px solid #ddd; } .glyphicons-demo .glyphicon { display: block; margin: 5px auto 10px; font-size: 24px; color: #444; } .glyphicons-demo ul li:hover { background-color: rgba(86, 61, 124, 0.1); } @media (min-width: 768px) { .glyphicons-demo ul li { width: 12.5%; } } /*** Customized Bootstrap Alerts ***/ .alert { border-width: 1px; } .alert > p { margin: 0; } .alert.alert-borderless { border: 0; } /*** Custom Bootstrap Badges ***/ .badge { font-size: 11px !important; font-weight: 300; text-align: center; height: 18px; color: #fff; padding: 3px 6px 3px 6px; -webkit-border-radius: 12px !important; -moz-border-radius: 12px !important; border-radius: 12px !important; text-shadow: none !important; text-align: center; vertical-align: middle; } .badge.badge-roundless { -webkit-border-radius: 0 !important; -moz-border-radius: 0 !important; border-radius: 0 !important; } .badge.badge-empty { display: inline-block; padding: 0; min-width: 8px; height: 8px; width: 8px; } /* Badge variants */ .badge-default { background-color: #bac3d0; background-image: none; } .badge-primary { background-color: #337ab7; background-image: none; } .badge-info { background-color: #659be0; background-image: none; } .badge-success { background-color: #36c6d3; background-image: none; } .badge-danger { background-color: #ed6b75; background-image: none; } .badge-warning { background-color: #F1C40F; background-image: none; } /* Fix badge position for navs */ .nav.nav-pills > li > a > .badge, .nav.nav-stacked > li > a > .badge { margin-top: -2px; } /*** Dropdown Menu Badges ***/ .dropdown-menu > li > a > .badge { position: absolute; margin-top: 1px; right: 3px; display: inline; } .dropdown-menu.badge-roundless { -webkit-border-radius: 0 !important; -moz-border-radius: 0 !important; border-radius: 0 !important; } /*** Custom buttons based on bootstrap SASS ***/ .btn { outline: none !important; box-shadow: none !important; } .btn:hover { transition: all 0.3s; } .btn:not(.btn-sm):not(.btn-lg) { line-height: 1.44; } /*** Custom color buttons ***/ .btn.white:not(.btn-outline) { color: #666; background-color: #ffffff; border-color: #ffffff; } .btn.white:not(.btn-outline):focus, .btn.white:not(.btn-outline).focus { color: #666; background-color: #e6e6e6; border-color: #bfbfbf; } .btn.white:not(.btn-outline):hover { color: #666; background-color: #e6e6e6; border-color: #e0e0e0; } .btn.white:not(.btn-outline):active, .btn.white:not(.btn-outline).active, .open > .btn.white:not(.btn-outline).dropdown-toggle { color: #666; background-color: #e6e6e6; border-color: #e0e0e0; } .btn.white:not(.btn-outline):active:hover, .btn.white:not(.btn-outline):active:focus, .btn.white:not(.btn-outline):active.focus, .btn.white:not(.btn-outline).active:hover, .btn.white:not(.btn-outline).active:focus, .btn.white:not(.btn-outline).active.focus, .open > .btn.white:not(.btn-outline).dropdown-toggle:hover, .open > .btn.white:not(.btn-outline).dropdown-toggle:focus, .open > .btn.white:not(.btn-outline).dropdown-toggle.focus { color: #666; background-color: #d4d4d4; border-color: #bfbfbf; } .btn.white:not(.btn-outline):active, .btn.white:not(.btn-outline).active, .open > .btn.white:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.white:not(.btn-outline).disabled:hover, .btn.white:not(.btn-outline).disabled:focus, .btn.white:not(.btn-outline).disabled.focus, .btn.white:not(.btn-outline)[disabled]:hover, .btn.white:not(.btn-outline)[disabled]:focus, .btn.white:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.white:not(.btn-outline):hover, fieldset[disabled] .btn.white:not(.btn-outline):focus, fieldset[disabled] .btn.white:not(.btn-outline).focus { background-color: #ffffff; border-color: #ffffff; } .btn.white:not(.btn-outline) .badge { color: #ffffff; background-color: #666; } .btn.btn-outline.white { border-color: #ffffff; color: #ffffff; background: none; } .btn.btn-outline.white:hover, .btn.btn-outline.white:active, .btn.btn-outline.white:active:hover, .btn.btn-outline.white:active:focus, .btn.btn-outline.white:focus, .btn.btn-outline.white.active { border-color: #ffffff; color: #666; background-color: #ffffff; } .btn.white-stripe { border-left: 4px solid #ffffff !important; } .btn.default:not(.btn-outline) { color: #333; background-color: #e1e5ec; border-color: #e1e5ec; } .btn.default:not(.btn-outline):focus, .btn.default:not(.btn-outline).focus { color: #333; background-color: #c2cad8; border-color: #93a1bb; } .btn.default:not(.btn-outline):hover { color: #333; background-color: #c2cad8; border-color: #bcc5d4; } .btn.default:not(.btn-outline):active, .btn.default:not(.btn-outline).active, .open > .btn.default:not(.btn-outline).dropdown-toggle { color: #333; background-color: #c2cad8; border-color: #bcc5d4; } .btn.default:not(.btn-outline):active:hover, .btn.default:not(.btn-outline):active:focus, .btn.default:not(.btn-outline):active.focus, .btn.default:not(.btn-outline).active:hover, .btn.default:not(.btn-outline).active:focus, .btn.default:not(.btn-outline).active.focus, .open > .btn.default:not(.btn-outline).dropdown-toggle:hover, .open > .btn.default:not(.btn-outline).dropdown-toggle:focus, .open > .btn.default:not(.btn-outline).dropdown-toggle.focus { color: #333; background-color: #acb7ca; border-color: #93a1bb; } .btn.default:not(.btn-outline):active, .btn.default:not(.btn-outline).active, .open > .btn.default:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.default:not(.btn-outline).disabled:hover, .btn.default:not(.btn-outline).disabled:focus, .btn.default:not(.btn-outline).disabled.focus, .btn.default:not(.btn-outline)[disabled]:hover, .btn.default:not(.btn-outline)[disabled]:focus, .btn.default:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.default:not(.btn-outline):hover, fieldset[disabled] .btn.default:not(.btn-outline):focus, fieldset[disabled] .btn.default:not(.btn-outline).focus { background-color: #e1e5ec; border-color: #e1e5ec; } .btn.default:not(.btn-outline) .badge { color: #e1e5ec; background-color: #666; } .btn.btn-outline.default { border-color: #e1e5ec; color: #e1e5ec; background: none; } .btn.btn-outline.default:hover, .btn.btn-outline.default:active, .btn.btn-outline.default:active:hover, .btn.btn-outline.default:active:focus, .btn.btn-outline.default:focus, .btn.btn-outline.default.active { border-color: #e1e5ec; color: #666; background-color: #e1e5ec; } .btn.default-stripe { border-left: 4px solid #e1e5ec !important; } .btn.dark:not(.btn-outline) { color: #FFFFFF; background-color: #2f353b; border-color: #2f353b; } .btn.dark:not(.btn-outline):focus, .btn.dark:not(.btn-outline).focus { color: #FFFFFF; background-color: #181c1f; border-color: black; } .btn.dark:not(.btn-outline):hover { color: #FFFFFF; background-color: #181c1f; border-color: #141619; } .btn.dark:not(.btn-outline):active, .btn.dark:not(.btn-outline).active, .open > .btn.dark:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #181c1f; border-color: #141619; } .btn.dark:not(.btn-outline):active:hover, .btn.dark:not(.btn-outline):active:focus, .btn.dark:not(.btn-outline):active.focus, .btn.dark:not(.btn-outline).active:hover, .btn.dark:not(.btn-outline).active:focus, .btn.dark:not(.btn-outline).active.focus, .open > .btn.dark:not(.btn-outline).dropdown-toggle:hover, .open > .btn.dark:not(.btn-outline).dropdown-toggle:focus, .open > .btn.dark:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #090a0b; border-color: black; } .btn.dark:not(.btn-outline):active, .btn.dark:not(.btn-outline).active, .open > .btn.dark:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.dark:not(.btn-outline).disabled:hover, .btn.dark:not(.btn-outline).disabled:focus, .btn.dark:not(.btn-outline).disabled.focus, .btn.dark:not(.btn-outline)[disabled]:hover, .btn.dark:not(.btn-outline)[disabled]:focus, .btn.dark:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.dark:not(.btn-outline):hover, fieldset[disabled] .btn.dark:not(.btn-outline):focus, fieldset[disabled] .btn.dark:not(.btn-outline).focus { background-color: #2f353b; border-color: #2f353b; } .btn.dark:not(.btn-outline) .badge { color: #2f353b; background-color: #FFFFFF; } .btn.btn-outline.dark { border-color: #2f353b; color: #2f353b; background: none; } .btn.btn-outline.dark:hover, .btn.btn-outline.dark:active, .btn.btn-outline.dark:active:hover, .btn.btn-outline.dark:active:focus, .btn.btn-outline.dark:focus, .btn.btn-outline.dark.active { border-color: #2f353b; color: #FFFFFF; background-color: #2f353b; } .btn.dark-stripe { border-left: 4px solid #2f353b !important; } .btn.blue:not(.btn-outline) { color: #FFFFFF; background-color: #3598dc; border-color: #3598dc; } .btn.blue:not(.btn-outline):focus, .btn.blue:not(.btn-outline).focus { color: #FFFFFF; background-color: #217ebd; border-color: #15527c; } .btn.blue:not(.btn-outline):hover { color: #FFFFFF; background-color: #217ebd; border-color: #1f78b5; } .btn.blue:not(.btn-outline):active, .btn.blue:not(.btn-outline).active, .open > .btn.blue:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #217ebd; border-color: #1f78b5; } .btn.blue:not(.btn-outline):active:hover, .btn.blue:not(.btn-outline):active:focus, .btn.blue:not(.btn-outline):active.focus, .btn.blue:not(.btn-outline).active:hover, .btn.blue:not(.btn-outline).active:focus, .btn.blue:not(.btn-outline).active.focus, .open > .btn.blue:not(.btn-outline).dropdown-toggle:hover, .open > .btn.blue:not(.btn-outline).dropdown-toggle:focus, .open > .btn.blue:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #1c699f; border-color: #15527c; } .btn.blue:not(.btn-outline):active, .btn.blue:not(.btn-outline).active, .open > .btn.blue:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.blue:not(.btn-outline).disabled:hover, .btn.blue:not(.btn-outline).disabled:focus, .btn.blue:not(.btn-outline).disabled.focus, .btn.blue:not(.btn-outline)[disabled]:hover, .btn.blue:not(.btn-outline)[disabled]:focus, .btn.blue:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.blue:not(.btn-outline):hover, fieldset[disabled] .btn.blue:not(.btn-outline):focus, fieldset[disabled] .btn.blue:not(.btn-outline).focus { background-color: #3598dc; border-color: #3598dc; } .btn.blue:not(.btn-outline) .badge { color: #3598dc; background-color: #FFFFFF; } .btn.btn-outline.blue { border-color: #3598dc; color: #3598dc; background: none; } .btn.btn-outline.blue:hover, .btn.btn-outline.blue:active, .btn.btn-outline.blue:active:hover, .btn.btn-outline.blue:active:focus, .btn.btn-outline.blue:focus, .btn.btn-outline.blue.active { border-color: #3598dc; color: #FFFFFF; background-color: #3598dc; } .btn.blue-stripe { border-left: 4px solid #3598dc !important; } .btn.blue-madison:not(.btn-outline) { color: #FFFFFF; background-color: #578ebe; border-color: #578ebe; } .btn.blue-madison:not(.btn-outline):focus, .btn.blue-madison:not(.btn-outline).focus { color: #FFFFFF; background-color: #3f74a3; border-color: #2a4d6c; } .btn.blue-madison:not(.btn-outline):hover { color: #FFFFFF; background-color: #3f74a3; border-color: #3c6f9c; } .btn.blue-madison:not(.btn-outline):active, .btn.blue-madison:not(.btn-outline).active, .open > .btn.blue-madison:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #3f74a3; border-color: #3c6f9c; } .btn.blue-madison:not(.btn-outline):active:hover, .btn.blue-madison:not(.btn-outline):active:focus, .btn.blue-madison:not(.btn-outline):active.focus, .btn.blue-madison:not(.btn-outline).active:hover, .btn.blue-madison:not(.btn-outline).active:focus, .btn.blue-madison:not(.btn-outline).active.focus, .open > .btn.blue-madison:not(.btn-outline).dropdown-toggle:hover, .open > .btn.blue-madison:not(.btn-outline).dropdown-toggle:focus, .open > .btn.blue-madison:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #356289; border-color: #2a4d6c; } .btn.blue-madison:not(.btn-outline):active, .btn.blue-madison:not(.btn-outline).active, .open > .btn.blue-madison:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.blue-madison:not(.btn-outline).disabled:hover, .btn.blue-madison:not(.btn-outline).disabled:focus, .btn.blue-madison:not(.btn-outline).disabled.focus, .btn.blue-madison:not(.btn-outline)[disabled]:hover, .btn.blue-madison:not(.btn-outline)[disabled]:focus, .btn.blue-madison:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.blue-madison:not(.btn-outline):hover, fieldset[disabled] .btn.blue-madison:not(.btn-outline):focus, fieldset[disabled] .btn.blue-madison:not(.btn-outline).focus { background-color: #578ebe; border-color: #578ebe; } .btn.blue-madison:not(.btn-outline) .badge { color: #578ebe; background-color: #FFFFFF; } .btn.btn-outline.blue-madison { border-color: #578ebe; color: #578ebe; background: none; } .btn.btn-outline.blue-madison:hover, .btn.btn-outline.blue-madison:active, .btn.btn-outline.blue-madison:active:hover, .btn.btn-outline.blue-madison:active:focus, .btn.btn-outline.blue-madison:focus, .btn.btn-outline.blue-madison.active { border-color: #578ebe; color: #FFFFFF; background-color: #578ebe; } .btn.blue-madison-stripe { border-left: 4px solid #578ebe !important; } .btn.blue-chambray:not(.btn-outline) { color: #FFFFFF; background-color: #2C3E50; border-color: #2C3E50; } .btn.blue-chambray:not(.btn-outline):focus, .btn.blue-chambray:not(.btn-outline).focus { color: #FFFFFF; background-color: #1a252f; border-color: black; } .btn.blue-chambray:not(.btn-outline):hover { color: #FFFFFF; background-color: #1a252f; border-color: #161f29; } .btn.blue-chambray:not(.btn-outline):active, .btn.blue-chambray:not(.btn-outline).active, .open > .btn.blue-chambray:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #1a252f; border-color: #161f29; } .btn.blue-chambray:not(.btn-outline):active:hover, .btn.blue-chambray:not(.btn-outline):active:focus, .btn.blue-chambray:not(.btn-outline):active.focus, .btn.blue-chambray:not(.btn-outline).active:hover, .btn.blue-chambray:not(.btn-outline).active:focus, .btn.blue-chambray:not(.btn-outline).active.focus, .open > .btn.blue-chambray:not(.btn-outline).dropdown-toggle:hover, .open > .btn.blue-chambray:not(.btn-outline).dropdown-toggle:focus, .open > .btn.blue-chambray:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #0d1318; border-color: black; } .btn.blue-chambray:not(.btn-outline):active, .btn.blue-chambray:not(.btn-outline).active, .open > .btn.blue-chambray:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.blue-chambray:not(.btn-outline).disabled:hover, .btn.blue-chambray:not(.btn-outline).disabled:focus, .btn.blue-chambray:not(.btn-outline).disabled.focus, .btn.blue-chambray:not(.btn-outline)[disabled]:hover, .btn.blue-chambray:not(.btn-outline)[disabled]:focus, .btn.blue-chambray:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.blue-chambray:not(.btn-outline):hover, fieldset[disabled] .btn.blue-chambray:not(.btn-outline):focus, fieldset[disabled] .btn.blue-chambray:not(.btn-outline).focus { background-color: #2C3E50; border-color: #2C3E50; } .btn.blue-chambray:not(.btn-outline) .badge { color: #2C3E50; background-color: #FFFFFF; } .btn.btn-outline.blue-chambray { border-color: #2C3E50; color: #2C3E50; background: none; } .btn.btn-outline.blue-chambray:hover, .btn.btn-outline.blue-chambray:active, .btn.btn-outline.blue-chambray:active:hover, .btn.btn-outline.blue-chambray:active:focus, .btn.btn-outline.blue-chambray:focus, .btn.btn-outline.blue-chambray.active { border-color: #2C3E50; color: #FFFFFF; background-color: #2C3E50; } .btn.blue-chambray-stripe { border-left: 4px solid #2C3E50 !important; } .btn.blue-ebonyclay:not(.btn-outline) { color: #FFFFFF; background-color: #22313F; border-color: #22313F; } .btn.blue-ebonyclay:not(.btn-outline):focus, .btn.blue-ebonyclay:not(.btn-outline).focus { color: #FFFFFF; background-color: #10171e; border-color: black; } .btn.blue-ebonyclay:not(.btn-outline):hover { color: #FFFFFF; background-color: #10171e; border-color: #0d1217; } .btn.blue-ebonyclay:not(.btn-outline):active, .btn.blue-ebonyclay:not(.btn-outline).active, .open > .btn.blue-ebonyclay:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #10171e; border-color: #0d1217; } .btn.blue-ebonyclay:not(.btn-outline):active:hover, .btn.blue-ebonyclay:not(.btn-outline):active:focus, .btn.blue-ebonyclay:not(.btn-outline):active.focus, .btn.blue-ebonyclay:not(.btn-outline).active:hover, .btn.blue-ebonyclay:not(.btn-outline).active:focus, .btn.blue-ebonyclay:not(.btn-outline).active.focus, .open > .btn.blue-ebonyclay:not(.btn-outline).dropdown-toggle:hover, .open > .btn.blue-ebonyclay:not(.btn-outline).dropdown-toggle:focus, .open > .btn.blue-ebonyclay:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #040507; border-color: black; } .btn.blue-ebonyclay:not(.btn-outline):active, .btn.blue-ebonyclay:not(.btn-outline).active, .open > .btn.blue-ebonyclay:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.blue-ebonyclay:not(.btn-outline).disabled:hover, .btn.blue-ebonyclay:not(.btn-outline).disabled:focus, .btn.blue-ebonyclay:not(.btn-outline).disabled.focus, .btn.blue-ebonyclay:not(.btn-outline)[disabled]:hover, .btn.blue-ebonyclay:not(.btn-outline)[disabled]:focus, .btn.blue-ebonyclay:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.blue-ebonyclay:not(.btn-outline):hover, fieldset[disabled] .btn.blue-ebonyclay:not(.btn-outline):focus, fieldset[disabled] .btn.blue-ebonyclay:not(.btn-outline).focus { background-color: #22313F; border-color: #22313F; } .btn.blue-ebonyclay:not(.btn-outline) .badge { color: #22313F; background-color: #FFFFFF; } .btn.btn-outline.blue-ebonyclay { border-color: #22313F; color: #22313F; background: none; } .btn.btn-outline.blue-ebonyclay:hover, .btn.btn-outline.blue-ebonyclay:active, .btn.btn-outline.blue-ebonyclay:active:hover, .btn.btn-outline.blue-ebonyclay:active:focus, .btn.btn-outline.blue-ebonyclay:focus, .btn.btn-outline.blue-ebonyclay.active { border-color: #22313F; color: #FFFFFF; background-color: #22313F; } .btn.blue-ebonyclay-stripe { border-left: 4px solid #22313F !important; } .btn.blue-hoki:not(.btn-outline) { color: #FFFFFF; background-color: #67809F; border-color: #67809F; } .btn.blue-hoki:not(.btn-outline):focus, .btn.blue-hoki:not(.btn-outline).focus { color: #FFFFFF; background-color: #526781; border-color: #344252; } .btn.blue-hoki:not(.btn-outline):hover { color: #FFFFFF; background-color: #526781; border-color: #4e627b; } .btn.blue-hoki:not(.btn-outline):active, .btn.blue-hoki:not(.btn-outline).active, .open > .btn.blue-hoki:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #526781; border-color: #4e627b; } .btn.blue-hoki:not(.btn-outline):active:hover, .btn.blue-hoki:not(.btn-outline):active:focus, .btn.blue-hoki:not(.btn-outline):active.focus, .btn.blue-hoki:not(.btn-outline).active:hover, .btn.blue-hoki:not(.btn-outline).active:focus, .btn.blue-hoki:not(.btn-outline).active.focus, .open > .btn.blue-hoki:not(.btn-outline).dropdown-toggle:hover, .open > .btn.blue-hoki:not(.btn-outline).dropdown-toggle:focus, .open > .btn.blue-hoki:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #44566b; border-color: #344252; } .btn.blue-hoki:not(.btn-outline):active, .btn.blue-hoki:not(.btn-outline).active, .open > .btn.blue-hoki:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.blue-hoki:not(.btn-outline).disabled:hover, .btn.blue-hoki:not(.btn-outline).disabled:focus, .btn.blue-hoki:not(.btn-outline).disabled.focus, .btn.blue-hoki:not(.btn-outline)[disabled]:hover, .btn.blue-hoki:not(.btn-outline)[disabled]:focus, .btn.blue-hoki:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.blue-hoki:not(.btn-outline):hover, fieldset[disabled] .btn.blue-hoki:not(.btn-outline):focus, fieldset[disabled] .btn.blue-hoki:not(.btn-outline).focus { background-color: #67809F; border-color: #67809F; } .btn.blue-hoki:not(.btn-outline) .badge { color: #67809F; background-color: #FFFFFF; } .btn.btn-outline.blue-hoki { border-color: #67809F; color: #67809F; background: none; } .btn.btn-outline.blue-hoki:hover, .btn.btn-outline.blue-hoki:active, .btn.btn-outline.blue-hoki:active:hover, .btn.btn-outline.blue-hoki:active:focus, .btn.btn-outline.blue-hoki:focus, .btn.btn-outline.blue-hoki.active { border-color: #67809F; color: #FFFFFF; background-color: #67809F; } .btn.blue-hoki-stripe { border-left: 4px solid #67809F !important; } .btn.blue-steel:not(.btn-outline) { color: #FFFFFF; background-color: #4B77BE; border-color: #4B77BE; } .btn.blue-steel:not(.btn-outline):focus, .btn.blue-steel:not(.btn-outline).focus { color: #FFFFFF; background-color: #395f9d; border-color: #243d65; } .btn.blue-steel:not(.btn-outline):hover { color: #FFFFFF; background-color: #395f9d; border-color: #365b96; } .btn.blue-steel:not(.btn-outline):active, .btn.blue-steel:not(.btn-outline).active, .open > .btn.blue-steel:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #395f9d; border-color: #365b96; } .btn.blue-steel:not(.btn-outline):active:hover, .btn.blue-steel:not(.btn-outline):active:focus, .btn.blue-steel:not(.btn-outline):active.focus, .btn.blue-steel:not(.btn-outline).active:hover, .btn.blue-steel:not(.btn-outline).active:focus, .btn.blue-steel:not(.btn-outline).active.focus, .open > .btn.blue-steel:not(.btn-outline).dropdown-toggle:hover, .open > .btn.blue-steel:not(.btn-outline).dropdown-toggle:focus, .open > .btn.blue-steel:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #2f4f83; border-color: #243d65; } .btn.blue-steel:not(.btn-outline):active, .btn.blue-steel:not(.btn-outline).active, .open > .btn.blue-steel:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.blue-steel:not(.btn-outline).disabled:hover, .btn.blue-steel:not(.btn-outline).disabled:focus, .btn.blue-steel:not(.btn-outline).disabled.focus, .btn.blue-steel:not(.btn-outline)[disabled]:hover, .btn.blue-steel:not(.btn-outline)[disabled]:focus, .btn.blue-steel:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.blue-steel:not(.btn-outline):hover, fieldset[disabled] .btn.blue-steel:not(.btn-outline):focus, fieldset[disabled] .btn.blue-steel:not(.btn-outline).focus { background-color: #4B77BE; border-color: #4B77BE; } .btn.blue-steel:not(.btn-outline) .badge { color: #4B77BE; background-color: #FFFFFF; } .btn.btn-outline.blue-steel { border-color: #4B77BE; color: #4B77BE; background: none; } .btn.btn-outline.blue-steel:hover, .btn.btn-outline.blue-steel:active, .btn.btn-outline.blue-steel:active:hover, .btn.btn-outline.blue-steel:active:focus, .btn.btn-outline.blue-steel:focus, .btn.btn-outline.blue-steel.active { border-color: #4B77BE; color: #FFFFFF; background-color: #4B77BE; } .btn.blue-steel-stripe { border-left: 4px solid #4B77BE !important; } .btn.blue-soft:not(.btn-outline) { color: #FFFFFF; background-color: #4c87b9; border-color: #4c87b9; } .btn.blue-soft:not(.btn-outline):focus, .btn.blue-soft:not(.btn-outline).focus { color: #FFFFFF; background-color: #3b6d97; border-color: #264560; } .btn.blue-soft:not(.btn-outline):hover { color: #FFFFFF; background-color: #3b6d97; border-color: #386890; } .btn.blue-soft:not(.btn-outline):active, .btn.blue-soft:not(.btn-outline).active, .open > .btn.blue-soft:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #3b6d97; border-color: #386890; } .btn.blue-soft:not(.btn-outline):active:hover, .btn.blue-soft:not(.btn-outline):active:focus, .btn.blue-soft:not(.btn-outline):active.focus, .btn.blue-soft:not(.btn-outline).active:hover, .btn.blue-soft:not(.btn-outline).active:focus, .btn.blue-soft:not(.btn-outline).active.focus, .open > .btn.blue-soft:not(.btn-outline).dropdown-toggle:hover, .open > .btn.blue-soft:not(.btn-outline).dropdown-toggle:focus, .open > .btn.blue-soft:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #315a7d; border-color: #264560; } .btn.blue-soft:not(.btn-outline):active, .btn.blue-soft:not(.btn-outline).active, .open > .btn.blue-soft:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.blue-soft:not(.btn-outline).disabled:hover, .btn.blue-soft:not(.btn-outline).disabled:focus, .btn.blue-soft:not(.btn-outline).disabled.focus, .btn.blue-soft:not(.btn-outline)[disabled]:hover, .btn.blue-soft:not(.btn-outline)[disabled]:focus, .btn.blue-soft:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.blue-soft:not(.btn-outline):hover, fieldset[disabled] .btn.blue-soft:not(.btn-outline):focus, fieldset[disabled] .btn.blue-soft:not(.btn-outline).focus { background-color: #4c87b9; border-color: #4c87b9; } .btn.blue-soft:not(.btn-outline) .badge { color: #4c87b9; background-color: #FFFFFF; } .btn.btn-outline.blue-soft { border-color: #4c87b9; color: #4c87b9; background: none; } .btn.btn-outline.blue-soft:hover, .btn.btn-outline.blue-soft:active, .btn.btn-outline.blue-soft:active:hover, .btn.btn-outline.blue-soft:active:focus, .btn.btn-outline.blue-soft:focus, .btn.btn-outline.blue-soft.active { border-color: #4c87b9; color: #FFFFFF; background-color: #4c87b9; } .btn.blue-soft-stripe { border-left: 4px solid #4c87b9 !important; } .btn.blue-dark:not(.btn-outline) { color: #FFFFFF; background-color: #5e738b; border-color: #5e738b; } .btn.blue-dark:not(.btn-outline):focus, .btn.blue-dark:not(.btn-outline).focus { color: #FFFFFF; background-color: #495a6d; border-color: #2b343f; } .btn.blue-dark:not(.btn-outline):hover { color: #FFFFFF; background-color: #495a6d; border-color: #455566; } .btn.blue-dark:not(.btn-outline):active, .btn.blue-dark:not(.btn-outline).active, .open > .btn.blue-dark:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #495a6d; border-color: #455566; } .btn.blue-dark:not(.btn-outline):active:hover, .btn.blue-dark:not(.btn-outline):active:focus, .btn.blue-dark:not(.btn-outline):active.focus, .btn.blue-dark:not(.btn-outline).active:hover, .btn.blue-dark:not(.btn-outline).active:focus, .btn.blue-dark:not(.btn-outline).active.focus, .open > .btn.blue-dark:not(.btn-outline).dropdown-toggle:hover, .open > .btn.blue-dark:not(.btn-outline).dropdown-toggle:focus, .open > .btn.blue-dark:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #3b4857; border-color: #2b343f; } .btn.blue-dark:not(.btn-outline):active, .btn.blue-dark:not(.btn-outline).active, .open > .btn.blue-dark:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.blue-dark:not(.btn-outline).disabled:hover, .btn.blue-dark:not(.btn-outline).disabled:focus, .btn.blue-dark:not(.btn-outline).disabled.focus, .btn.blue-dark:not(.btn-outline)[disabled]:hover, .btn.blue-dark:not(.btn-outline)[disabled]:focus, .btn.blue-dark:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.blue-dark:not(.btn-outline):hover, fieldset[disabled] .btn.blue-dark:not(.btn-outline):focus, fieldset[disabled] .btn.blue-dark:not(.btn-outline).focus { background-color: #5e738b; border-color: #5e738b; } .btn.blue-dark:not(.btn-outline) .badge { color: #5e738b; background-color: #FFFFFF; } .btn.btn-outline.blue-dark { border-color: #5e738b; color: #5e738b; background: none; } .btn.btn-outline.blue-dark:hover, .btn.btn-outline.blue-dark:active, .btn.btn-outline.blue-dark:active:hover, .btn.btn-outline.blue-dark:active:focus, .btn.btn-outline.blue-dark:focus, .btn.btn-outline.blue-dark.active { border-color: #5e738b; color: #FFFFFF; background-color: #5e738b; } .btn.blue-dark-stripe { border-left: 4px solid #5e738b !important; } .btn.blue-sharp:not(.btn-outline) { color: #FFFFFF; background-color: #5C9BD1; border-color: #5C9BD1; } .btn.blue-sharp:not(.btn-outline):focus, .btn.blue-sharp:not(.btn-outline).focus { color: #FFFFFF; background-color: #3782c3; border-color: #265a87; } .btn.blue-sharp:not(.btn-outline):hover { color: #FFFFFF; background-color: #3782c3; border-color: #357dbb; } .btn.blue-sharp:not(.btn-outline):active, .btn.blue-sharp:not(.btn-outline).active, .open > .btn.blue-sharp:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #3782c3; border-color: #357dbb; } .btn.blue-sharp:not(.btn-outline):active:hover, .btn.blue-sharp:not(.btn-outline):active:focus, .btn.blue-sharp:not(.btn-outline):active.focus, .btn.blue-sharp:not(.btn-outline).active:hover, .btn.blue-sharp:not(.btn-outline).active:focus, .btn.blue-sharp:not(.btn-outline).active.focus, .open > .btn.blue-sharp:not(.btn-outline).dropdown-toggle:hover, .open > .btn.blue-sharp:not(.btn-outline).dropdown-toggle:focus, .open > .btn.blue-sharp:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #2f70a7; border-color: #265a87; } .btn.blue-sharp:not(.btn-outline):active, .btn.blue-sharp:not(.btn-outline).active, .open > .btn.blue-sharp:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.blue-sharp:not(.btn-outline).disabled:hover, .btn.blue-sharp:not(.btn-outline).disabled:focus, .btn.blue-sharp:not(.btn-outline).disabled.focus, .btn.blue-sharp:not(.btn-outline)[disabled]:hover, .btn.blue-sharp:not(.btn-outline)[disabled]:focus, .btn.blue-sharp:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.blue-sharp:not(.btn-outline):hover, fieldset[disabled] .btn.blue-sharp:not(.btn-outline):focus, fieldset[disabled] .btn.blue-sharp:not(.btn-outline).focus { background-color: #5C9BD1; border-color: #5C9BD1; } .btn.blue-sharp:not(.btn-outline) .badge { color: #5C9BD1; background-color: #FFFFFF; } .btn.btn-outline.blue-sharp { border-color: #5C9BD1; color: #5C9BD1; background: none; } .btn.btn-outline.blue-sharp:hover, .btn.btn-outline.blue-sharp:active, .btn.btn-outline.blue-sharp:active:hover, .btn.btn-outline.blue-sharp:active:focus, .btn.btn-outline.blue-sharp:focus, .btn.btn-outline.blue-sharp.active { border-color: #5C9BD1; color: #FFFFFF; background-color: #5C9BD1; } .btn.blue-sharp-stripe { border-left: 4px solid #5C9BD1 !important; } .btn.green:not(.btn-outline) { color: #FFFFFF; background-color: #32c5d2; border-color: #32c5d2; } .btn.green:not(.btn-outline):focus, .btn.green:not(.btn-outline).focus { color: #FFFFFF; background-color: #26a1ab; border-color: #18666d; } .btn.green:not(.btn-outline):hover { color: #FFFFFF; background-color: #26a1ab; border-color: #2499a3; } .btn.green:not(.btn-outline):active, .btn.green:not(.btn-outline).active, .open > .btn.green:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #26a1ab; border-color: #2499a3; } .btn.green:not(.btn-outline):active:hover, .btn.green:not(.btn-outline):active:focus, .btn.green:not(.btn-outline):active.focus, .btn.green:not(.btn-outline).active:hover, .btn.green:not(.btn-outline).active:focus, .btn.green:not(.btn-outline).active.focus, .open > .btn.green:not(.btn-outline).dropdown-toggle:hover, .open > .btn.green:not(.btn-outline).dropdown-toggle:focus, .open > .btn.green:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #1f858e; border-color: #18666d; } .btn.green:not(.btn-outline):active, .btn.green:not(.btn-outline).active, .open > .btn.green:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.green:not(.btn-outline).disabled:hover, .btn.green:not(.btn-outline).disabled:focus, .btn.green:not(.btn-outline).disabled.focus, .btn.green:not(.btn-outline)[disabled]:hover, .btn.green:not(.btn-outline)[disabled]:focus, .btn.green:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.green:not(.btn-outline):hover, fieldset[disabled] .btn.green:not(.btn-outline):focus, fieldset[disabled] .btn.green:not(.btn-outline).focus { background-color: #32c5d2; border-color: #32c5d2; } .btn.green:not(.btn-outline) .badge { color: #32c5d2; background-color: #FFFFFF; } .btn.btn-outline.green { border-color: #32c5d2; color: #32c5d2; background: none; } .btn.btn-outline.green:hover, .btn.btn-outline.green:active, .btn.btn-outline.green:active:hover, .btn.btn-outline.green:active:focus, .btn.btn-outline.green:focus, .btn.btn-outline.green.active { border-color: #32c5d2; color: #FFFFFF; background-color: #32c5d2; } .btn.green-stripe { border-left: 4px solid #32c5d2 !important; } .btn.green-meadow:not(.btn-outline) { color: #FFFFFF; background-color: #1BBC9B; border-color: #1BBC9B; } .btn.green-meadow:not(.btn-outline):focus, .btn.green-meadow:not(.btn-outline).focus { color: #FFFFFF; background-color: #158f76; border-color: #0b4d3f; } .btn.green-meadow:not(.btn-outline):hover { color: #FFFFFF; background-color: #158f76; border-color: #13866f; } .btn.green-meadow:not(.btn-outline):active, .btn.green-meadow:not(.btn-outline).active, .open > .btn.green-meadow:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #158f76; border-color: #13866f; } .btn.green-meadow:not(.btn-outline):active:hover, .btn.green-meadow:not(.btn-outline):active:focus, .btn.green-meadow:not(.btn-outline):active.focus, .btn.green-meadow:not(.btn-outline).active:hover, .btn.green-meadow:not(.btn-outline).active:focus, .btn.green-meadow:not(.btn-outline).active.focus, .open > .btn.green-meadow:not(.btn-outline).dropdown-toggle:hover, .open > .btn.green-meadow:not(.btn-outline).dropdown-toggle:focus, .open > .btn.green-meadow:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #10705c; border-color: #0b4d3f; } .btn.green-meadow:not(.btn-outline):active, .btn.green-meadow:not(.btn-outline).active, .open > .btn.green-meadow:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.green-meadow:not(.btn-outline).disabled:hover, .btn.green-meadow:not(.btn-outline).disabled:focus, .btn.green-meadow:not(.btn-outline).disabled.focus, .btn.green-meadow:not(.btn-outline)[disabled]:hover, .btn.green-meadow:not(.btn-outline)[disabled]:focus, .btn.green-meadow:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.green-meadow:not(.btn-outline):hover, fieldset[disabled] .btn.green-meadow:not(.btn-outline):focus, fieldset[disabled] .btn.green-meadow:not(.btn-outline).focus { background-color: #1BBC9B; border-color: #1BBC9B; } .btn.green-meadow:not(.btn-outline) .badge { color: #1BBC9B; background-color: #FFFFFF; } .btn.btn-outline.green-meadow { border-color: #1BBC9B; color: #1BBC9B; background: none; } .btn.btn-outline.green-meadow:hover, .btn.btn-outline.green-meadow:active, .btn.btn-outline.green-meadow:active:hover, .btn.btn-outline.green-meadow:active:focus, .btn.btn-outline.green-meadow:focus, .btn.btn-outline.green-meadow.active { border-color: #1BBC9B; color: #FFFFFF; background-color: #1BBC9B; } .btn.green-meadow-stripe { border-left: 4px solid #1BBC9B !important; } .btn.green-seagreen:not(.btn-outline) { color: #FFFFFF; background-color: #1BA39C; border-color: #1BA39C; } .btn.green-seagreen:not(.btn-outline):focus, .btn.green-seagreen:not(.btn-outline).focus { color: #FFFFFF; background-color: #147772; border-color: #093633; } .btn.green-seagreen:not(.btn-outline):hover { color: #FFFFFF; background-color: #147772; border-color: #126e6a; } .btn.green-seagreen:not(.btn-outline):active, .btn.green-seagreen:not(.btn-outline).active, .open > .btn.green-seagreen:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #147772; border-color: #126e6a; } .btn.green-seagreen:not(.btn-outline):active:hover, .btn.green-seagreen:not(.btn-outline):active:focus, .btn.green-seagreen:not(.btn-outline):active.focus, .btn.green-seagreen:not(.btn-outline).active:hover, .btn.green-seagreen:not(.btn-outline).active:focus, .btn.green-seagreen:not(.btn-outline).active.focus, .open > .btn.green-seagreen:not(.btn-outline).dropdown-toggle:hover, .open > .btn.green-seagreen:not(.btn-outline).dropdown-toggle:focus, .open > .btn.green-seagreen:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #0f5955; border-color: #093633; } .btn.green-seagreen:not(.btn-outline):active, .btn.green-seagreen:not(.btn-outline).active, .open > .btn.green-seagreen:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.green-seagreen:not(.btn-outline).disabled:hover, .btn.green-seagreen:not(.btn-outline).disabled:focus, .btn.green-seagreen:not(.btn-outline).disabled.focus, .btn.green-seagreen:not(.btn-outline)[disabled]:hover, .btn.green-seagreen:not(.btn-outline)[disabled]:focus, .btn.green-seagreen:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.green-seagreen:not(.btn-outline):hover, fieldset[disabled] .btn.green-seagreen:not(.btn-outline):focus, fieldset[disabled] .btn.green-seagreen:not(.btn-outline).focus { background-color: #1BA39C; border-color: #1BA39C; } .btn.green-seagreen:not(.btn-outline) .badge { color: #1BA39C; background-color: #FFFFFF; } .btn.btn-outline.green-seagreen { border-color: #1BA39C; color: #1BA39C; background: none; } .btn.btn-outline.green-seagreen:hover, .btn.btn-outline.green-seagreen:active, .btn.btn-outline.green-seagreen:active:hover, .btn.btn-outline.green-seagreen:active:focus, .btn.btn-outline.green-seagreen:focus, .btn.btn-outline.green-seagreen.active { border-color: #1BA39C; color: #FFFFFF; background-color: #1BA39C; } .btn.green-seagreen-stripe { border-left: 4px solid #1BA39C !important; } .btn.green-turquoise:not(.btn-outline) { color: #FFFFFF; background-color: #36D7B7; border-color: #36D7B7; } .btn.green-turquoise:not(.btn-outline):focus, .btn.green-turquoise:not(.btn-outline).focus { color: #FFFFFF; background-color: #24b699; border-color: #177663; } .btn.green-turquoise:not(.btn-outline):hover { color: #FFFFFF; background-color: #24b699; border-color: #22ad92; } .btn.green-turquoise:not(.btn-outline):active, .btn.green-turquoise:not(.btn-outline).active, .open > .btn.green-turquoise:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #24b699; border-color: #22ad92; } .btn.green-turquoise:not(.btn-outline):active:hover, .btn.green-turquoise:not(.btn-outline):active:focus, .btn.green-turquoise:not(.btn-outline):active.focus, .btn.green-turquoise:not(.btn-outline).active:hover, .btn.green-turquoise:not(.btn-outline).active:focus, .btn.green-turquoise:not(.btn-outline).active.focus, .open > .btn.green-turquoise:not(.btn-outline).dropdown-toggle:hover, .open > .btn.green-turquoise:not(.btn-outline).dropdown-toggle:focus, .open > .btn.green-turquoise:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #1e9880; border-color: #177663; } .btn.green-turquoise:not(.btn-outline):active, .btn.green-turquoise:not(.btn-outline).active, .open > .btn.green-turquoise:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.green-turquoise:not(.btn-outline).disabled:hover, .btn.green-turquoise:not(.btn-outline).disabled:focus, .btn.green-turquoise:not(.btn-outline).disabled.focus, .btn.green-turquoise:not(.btn-outline)[disabled]:hover, .btn.green-turquoise:not(.btn-outline)[disabled]:focus, .btn.green-turquoise:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.green-turquoise:not(.btn-outline):hover, fieldset[disabled] .btn.green-turquoise:not(.btn-outline):focus, fieldset[disabled] .btn.green-turquoise:not(.btn-outline).focus { background-color: #36D7B7; border-color: #36D7B7; } .btn.green-turquoise:not(.btn-outline) .badge { color: #36D7B7; background-color: #FFFFFF; } .btn.btn-outline.green-turquoise { border-color: #36D7B7; color: #36D7B7; background: none; } .btn.btn-outline.green-turquoise:hover, .btn.btn-outline.green-turquoise:active, .btn.btn-outline.green-turquoise:active:hover, .btn.btn-outline.green-turquoise:active:focus, .btn.btn-outline.green-turquoise:focus, .btn.btn-outline.green-turquoise.active { border-color: #36D7B7; color: #FFFFFF; background-color: #36D7B7; } .btn.green-turquoise-stripe { border-left: 4px solid #36D7B7 !important; } .btn.green-haze:not(.btn-outline) { color: #FFFFFF; background-color: #44b6ae; border-color: #44b6ae; } .btn.green-haze:not(.btn-outline):focus, .btn.green-haze:not(.btn-outline).focus { color: #FFFFFF; background-color: #36918b; border-color: #215955; } .btn.green-haze:not(.btn-outline):hover { color: #FFFFFF; background-color: #36918b; border-color: #338983; } .btn.green-haze:not(.btn-outline):active, .btn.green-haze:not(.btn-outline).active, .open > .btn.green-haze:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #36918b; border-color: #338983; } .btn.green-haze:not(.btn-outline):active:hover, .btn.green-haze:not(.btn-outline):active:focus, .btn.green-haze:not(.btn-outline):active.focus, .btn.green-haze:not(.btn-outline).active:hover, .btn.green-haze:not(.btn-outline).active:focus, .btn.green-haze:not(.btn-outline).active.focus, .open > .btn.green-haze:not(.btn-outline).dropdown-toggle:hover, .open > .btn.green-haze:not(.btn-outline).dropdown-toggle:focus, .open > .btn.green-haze:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #2c7772; border-color: #215955; } .btn.green-haze:not(.btn-outline):active, .btn.green-haze:not(.btn-outline).active, .open > .btn.green-haze:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.green-haze:not(.btn-outline).disabled:hover, .btn.green-haze:not(.btn-outline).disabled:focus, .btn.green-haze:not(.btn-outline).disabled.focus, .btn.green-haze:not(.btn-outline)[disabled]:hover, .btn.green-haze:not(.btn-outline)[disabled]:focus, .btn.green-haze:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.green-haze:not(.btn-outline):hover, fieldset[disabled] .btn.green-haze:not(.btn-outline):focus, fieldset[disabled] .btn.green-haze:not(.btn-outline).focus { background-color: #44b6ae; border-color: #44b6ae; } .btn.green-haze:not(.btn-outline) .badge { color: #44b6ae; background-color: #FFFFFF; } .btn.btn-outline.green-haze { border-color: #44b6ae; color: #44b6ae; background: none; } .btn.btn-outline.green-haze:hover, .btn.btn-outline.green-haze:active, .btn.btn-outline.green-haze:active:hover, .btn.btn-outline.green-haze:active:focus, .btn.btn-outline.green-haze:focus, .btn.btn-outline.green-haze.active { border-color: #44b6ae; color: #FFFFFF; background-color: #44b6ae; } .btn.green-haze-stripe { border-left: 4px solid #44b6ae !important; } .btn.green-jungle:not(.btn-outline) { color: #FFFFFF; background-color: #26C281; border-color: #26C281; } .btn.green-jungle:not(.btn-outline):focus, .btn.green-jungle:not(.btn-outline).focus { color: #FFFFFF; background-color: #1e9765; border-color: #11573a; } .btn.green-jungle:not(.btn-outline):hover { color: #FFFFFF; background-color: #1e9765; border-color: #1c8f5f; } .btn.green-jungle:not(.btn-outline):active, .btn.green-jungle:not(.btn-outline).active, .open > .btn.green-jungle:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #1e9765; border-color: #1c8f5f; } .btn.green-jungle:not(.btn-outline):active:hover, .btn.green-jungle:not(.btn-outline):active:focus, .btn.green-jungle:not(.btn-outline):active.focus, .btn.green-jungle:not(.btn-outline).active:hover, .btn.green-jungle:not(.btn-outline).active:focus, .btn.green-jungle:not(.btn-outline).active.focus, .open > .btn.green-jungle:not(.btn-outline).dropdown-toggle:hover, .open > .btn.green-jungle:not(.btn-outline).dropdown-toggle:focus, .open > .btn.green-jungle:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #187a51; border-color: #11573a; } .btn.green-jungle:not(.btn-outline):active, .btn.green-jungle:not(.btn-outline).active, .open > .btn.green-jungle:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.green-jungle:not(.btn-outline).disabled:hover, .btn.green-jungle:not(.btn-outline).disabled:focus, .btn.green-jungle:not(.btn-outline).disabled.focus, .btn.green-jungle:not(.btn-outline)[disabled]:hover, .btn.green-jungle:not(.btn-outline)[disabled]:focus, .btn.green-jungle:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.green-jungle:not(.btn-outline):hover, fieldset[disabled] .btn.green-jungle:not(.btn-outline):focus, fieldset[disabled] .btn.green-jungle:not(.btn-outline).focus { background-color: #26C281; border-color: #26C281; } .btn.green-jungle:not(.btn-outline) .badge { color: #26C281; background-color: #FFFFFF; } .btn.btn-outline.green-jungle { border-color: #26C281; color: #26C281; background: none; } .btn.btn-outline.green-jungle:hover, .btn.btn-outline.green-jungle:active, .btn.btn-outline.green-jungle:active:hover, .btn.btn-outline.green-jungle:active:focus, .btn.btn-outline.green-jungle:focus, .btn.btn-outline.green-jungle.active { border-color: #26C281; color: #FFFFFF; background-color: #26C281; } .btn.green-jungle-stripe { border-left: 4px solid #26C281 !important; } .btn.green-soft:not(.btn-outline) { color: #FFFFFF; background-color: #3faba4; border-color: #3faba4; } .btn.green-soft:not(.btn-outline):focus, .btn.green-soft:not(.btn-outline).focus { color: #FFFFFF; background-color: #318680; border-color: #1d4e4b; } .btn.green-soft:not(.btn-outline):hover { color: #FFFFFF; background-color: #318680; border-color: #2f7e79; } .btn.green-soft:not(.btn-outline):active, .btn.green-soft:not(.btn-outline).active, .open > .btn.green-soft:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #318680; border-color: #2f7e79; } .btn.green-soft:not(.btn-outline):active:hover, .btn.green-soft:not(.btn-outline):active:focus, .btn.green-soft:not(.btn-outline):active.focus, .btn.green-soft:not(.btn-outline).active:hover, .btn.green-soft:not(.btn-outline).active:focus, .btn.green-soft:not(.btn-outline).active.focus, .open > .btn.green-soft:not(.btn-outline).dropdown-toggle:hover, .open > .btn.green-soft:not(.btn-outline).dropdown-toggle:focus, .open > .btn.green-soft:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #286c67; border-color: #1d4e4b; } .btn.green-soft:not(.btn-outline):active, .btn.green-soft:not(.btn-outline).active, .open > .btn.green-soft:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.green-soft:not(.btn-outline).disabled:hover, .btn.green-soft:not(.btn-outline).disabled:focus, .btn.green-soft:not(.btn-outline).disabled.focus, .btn.green-soft:not(.btn-outline)[disabled]:hover, .btn.green-soft:not(.btn-outline)[disabled]:focus, .btn.green-soft:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.green-soft:not(.btn-outline):hover, fieldset[disabled] .btn.green-soft:not(.btn-outline):focus, fieldset[disabled] .btn.green-soft:not(.btn-outline).focus { background-color: #3faba4; border-color: #3faba4; } .btn.green-soft:not(.btn-outline) .badge { color: #3faba4; background-color: #FFFFFF; } .btn.btn-outline.green-soft { border-color: #3faba4; color: #3faba4; background: none; } .btn.btn-outline.green-soft:hover, .btn.btn-outline.green-soft:active, .btn.btn-outline.green-soft:active:hover, .btn.btn-outline.green-soft:active:focus, .btn.btn-outline.green-soft:focus, .btn.btn-outline.green-soft.active { border-color: #3faba4; color: #FFFFFF; background-color: #3faba4; } .btn.green-soft-stripe { border-left: 4px solid #3faba4 !important; } .btn.green-dark:not(.btn-outline) { color: #FFFFFF; background-color: #4DB3A2; border-color: #4DB3A2; } .btn.green-dark:not(.btn-outline):focus, .btn.green-dark:not(.btn-outline).focus { color: #FFFFFF; background-color: #3d9082; border-color: #265a51; } .btn.green-dark:not(.btn-outline):hover { color: #FFFFFF; background-color: #3d9082; border-color: #3a897b; } .btn.green-dark:not(.btn-outline):active, .btn.green-dark:not(.btn-outline).active, .open > .btn.green-dark:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #3d9082; border-color: #3a897b; } .btn.green-dark:not(.btn-outline):active:hover, .btn.green-dark:not(.btn-outline):active:focus, .btn.green-dark:not(.btn-outline):active.focus, .btn.green-dark:not(.btn-outline).active:hover, .btn.green-dark:not(.btn-outline).active:focus, .btn.green-dark:not(.btn-outline).active.focus, .open > .btn.green-dark:not(.btn-outline).dropdown-toggle:hover, .open > .btn.green-dark:not(.btn-outline).dropdown-toggle:focus, .open > .btn.green-dark:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #33776b; border-color: #265a51; } .btn.green-dark:not(.btn-outline):active, .btn.green-dark:not(.btn-outline).active, .open > .btn.green-dark:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.green-dark:not(.btn-outline).disabled:hover, .btn.green-dark:not(.btn-outline).disabled:focus, .btn.green-dark:not(.btn-outline).disabled.focus, .btn.green-dark:not(.btn-outline)[disabled]:hover, .btn.green-dark:not(.btn-outline)[disabled]:focus, .btn.green-dark:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.green-dark:not(.btn-outline):hover, fieldset[disabled] .btn.green-dark:not(.btn-outline):focus, fieldset[disabled] .btn.green-dark:not(.btn-outline).focus { background-color: #4DB3A2; border-color: #4DB3A2; } .btn.green-dark:not(.btn-outline) .badge { color: #4DB3A2; background-color: #FFFFFF; } .btn.btn-outline.green-dark { border-color: #4DB3A2; color: #4DB3A2; background: none; } .btn.btn-outline.green-dark:hover, .btn.btn-outline.green-dark:active, .btn.btn-outline.green-dark:active:hover, .btn.btn-outline.green-dark:active:focus, .btn.btn-outline.green-dark:focus, .btn.btn-outline.green-dark.active { border-color: #4DB3A2; color: #FFFFFF; background-color: #4DB3A2; } .btn.green-dark-stripe { border-left: 4px solid #4DB3A2 !important; } .btn.green-sharp:not(.btn-outline) { color: #FFFFFF; background-color: #2ab4c0; border-color: #2ab4c0; } .btn.green-sharp:not(.btn-outline):focus, .btn.green-sharp:not(.btn-outline).focus { color: #FFFFFF; background-color: #218d96; border-color: #135257; } .btn.green-sharp:not(.btn-outline):hover { color: #FFFFFF; background-color: #218d96; border-color: #1f858e; } .btn.green-sharp:not(.btn-outline):active, .btn.green-sharp:not(.btn-outline).active, .open > .btn.green-sharp:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #218d96; border-color: #1f858e; } .btn.green-sharp:not(.btn-outline):active:hover, .btn.green-sharp:not(.btn-outline):active:focus, .btn.green-sharp:not(.btn-outline):active.focus, .btn.green-sharp:not(.btn-outline).active:hover, .btn.green-sharp:not(.btn-outline).active:focus, .btn.green-sharp:not(.btn-outline).active.focus, .open > .btn.green-sharp:not(.btn-outline).dropdown-toggle:hover, .open > .btn.green-sharp:not(.btn-outline).dropdown-toggle:focus, .open > .btn.green-sharp:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #1a7179; border-color: #135257; } .btn.green-sharp:not(.btn-outline):active, .btn.green-sharp:not(.btn-outline).active, .open > .btn.green-sharp:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.green-sharp:not(.btn-outline).disabled:hover, .btn.green-sharp:not(.btn-outline).disabled:focus, .btn.green-sharp:not(.btn-outline).disabled.focus, .btn.green-sharp:not(.btn-outline)[disabled]:hover, .btn.green-sharp:not(.btn-outline)[disabled]:focus, .btn.green-sharp:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.green-sharp:not(.btn-outline):hover, fieldset[disabled] .btn.green-sharp:not(.btn-outline):focus, fieldset[disabled] .btn.green-sharp:not(.btn-outline).focus { background-color: #2ab4c0; border-color: #2ab4c0; } .btn.green-sharp:not(.btn-outline) .badge { color: #2ab4c0; background-color: #FFFFFF; } .btn.btn-outline.green-sharp { border-color: #2ab4c0; color: #2ab4c0; background: none; } .btn.btn-outline.green-sharp:hover, .btn.btn-outline.green-sharp:active, .btn.btn-outline.green-sharp:active:hover, .btn.btn-outline.green-sharp:active:focus, .btn.btn-outline.green-sharp:focus, .btn.btn-outline.green-sharp.active { border-color: #2ab4c0; color: #FFFFFF; background-color: #2ab4c0; } .btn.green-sharp-stripe { border-left: 4px solid #2ab4c0 !important; } .btn.grey:not(.btn-outline) { color: #333333; background-color: #E5E5E5; border-color: #E5E5E5; } .btn.grey:not(.btn-outline):focus, .btn.grey:not(.btn-outline).focus { color: #333333; background-color: #cccccc; border-color: #a5a5a5; } .btn.grey:not(.btn-outline):hover { color: #333333; background-color: #cccccc; border-color: #c6c6c6; } .btn.grey:not(.btn-outline):active, .btn.grey:not(.btn-outline).active, .open > .btn.grey:not(.btn-outline).dropdown-toggle { color: #333333; background-color: #cccccc; border-color: #c6c6c6; } .btn.grey:not(.btn-outline):active:hover, .btn.grey:not(.btn-outline):active:focus, .btn.grey:not(.btn-outline):active.focus, .btn.grey:not(.btn-outline).active:hover, .btn.grey:not(.btn-outline).active:focus, .btn.grey:not(.btn-outline).active.focus, .open > .btn.grey:not(.btn-outline).dropdown-toggle:hover, .open > .btn.grey:not(.btn-outline).dropdown-toggle:focus, .open > .btn.grey:not(.btn-outline).dropdown-toggle.focus { color: #333333; background-color: #bababa; border-color: #a5a5a5; } .btn.grey:not(.btn-outline):active, .btn.grey:not(.btn-outline).active, .open > .btn.grey:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.grey:not(.btn-outline).disabled:hover, .btn.grey:not(.btn-outline).disabled:focus, .btn.grey:not(.btn-outline).disabled.focus, .btn.grey:not(.btn-outline)[disabled]:hover, .btn.grey:not(.btn-outline)[disabled]:focus, .btn.grey:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.grey:not(.btn-outline):hover, fieldset[disabled] .btn.grey:not(.btn-outline):focus, fieldset[disabled] .btn.grey:not(.btn-outline).focus { background-color: #E5E5E5; border-color: #E5E5E5; } .btn.grey:not(.btn-outline) .badge { color: #E5E5E5; background-color: #333333; } .btn.btn-outline.grey { border-color: #E5E5E5; color: #E5E5E5; background: none; } .btn.btn-outline.grey:hover, .btn.btn-outline.grey:active, .btn.btn-outline.grey:active:hover, .btn.btn-outline.grey:active:focus, .btn.btn-outline.grey:focus, .btn.btn-outline.grey.active { border-color: #E5E5E5; color: #333333; background-color: #E5E5E5; } .btn.grey-stripe { border-left: 4px solid #E5E5E5 !important; } .btn.grey-steel:not(.btn-outline) { color: #80898e; background-color: #e9edef; border-color: #e9edef; } .btn.grey-steel:not(.btn-outline):focus, .btn.grey-steel:not(.btn-outline).focus { color: #80898e; background-color: #cbd5da; border-color: #9fb1b9; } .btn.grey-steel:not(.btn-outline):hover { color: #80898e; background-color: #cbd5da; border-color: #c6d0d5; } .btn.grey-steel:not(.btn-outline):active, .btn.grey-steel:not(.btn-outline).active, .open > .btn.grey-steel:not(.btn-outline).dropdown-toggle { color: #80898e; background-color: #cbd5da; border-color: #c6d0d5; } .btn.grey-steel:not(.btn-outline):active:hover, .btn.grey-steel:not(.btn-outline):active:focus, .btn.grey-steel:not(.btn-outline):active.focus, .btn.grey-steel:not(.btn-outline).active:hover, .btn.grey-steel:not(.btn-outline).active:focus, .btn.grey-steel:not(.btn-outline).active.focus, .open > .btn.grey-steel:not(.btn-outline).dropdown-toggle:hover, .open > .btn.grey-steel:not(.btn-outline).dropdown-toggle:focus, .open > .btn.grey-steel:not(.btn-outline).dropdown-toggle.focus { color: #80898e; background-color: #b7c4ca; border-color: #9fb1b9; } .btn.grey-steel:not(.btn-outline):active, .btn.grey-steel:not(.btn-outline).active, .open > .btn.grey-steel:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.grey-steel:not(.btn-outline).disabled:hover, .btn.grey-steel:not(.btn-outline).disabled:focus, .btn.grey-steel:not(.btn-outline).disabled.focus, .btn.grey-steel:not(.btn-outline)[disabled]:hover, .btn.grey-steel:not(.btn-outline)[disabled]:focus, .btn.grey-steel:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.grey-steel:not(.btn-outline):hover, fieldset[disabled] .btn.grey-steel:not(.btn-outline):focus, fieldset[disabled] .btn.grey-steel:not(.btn-outline).focus { background-color: #e9edef; border-color: #e9edef; } .btn.grey-steel:not(.btn-outline) .badge { color: #e9edef; background-color: #80898e; } .btn.btn-outline.grey-steel { border-color: #e9edef; color: #e9edef; background: none; } .btn.btn-outline.grey-steel:hover, .btn.btn-outline.grey-steel:active, .btn.btn-outline.grey-steel:active:hover, .btn.btn-outline.grey-steel:active:focus, .btn.btn-outline.grey-steel:focus, .btn.btn-outline.grey-steel.active { border-color: #e9edef; color: #80898e; background-color: #e9edef; } .btn.grey-steel-stripe { border-left: 4px solid #e9edef !important; } .btn.grey-cararra:not(.btn-outline) { color: #333333; background-color: #fafafa; border-color: #fafafa; } .btn.grey-cararra:not(.btn-outline):focus, .btn.grey-cararra:not(.btn-outline).focus { color: #333333; background-color: #e1e1e1; border-color: #bababa; } .btn.grey-cararra:not(.btn-outline):hover { color: #333333; background-color: #e1e1e1; border-color: #dbdbdb; } .btn.grey-cararra:not(.btn-outline):active, .btn.grey-cararra:not(.btn-outline).active, .open > .btn.grey-cararra:not(.btn-outline).dropdown-toggle { color: #333333; background-color: #e1e1e1; border-color: #dbdbdb; } .btn.grey-cararra:not(.btn-outline):active:hover, .btn.grey-cararra:not(.btn-outline):active:focus, .btn.grey-cararra:not(.btn-outline):active.focus, .btn.grey-cararra:not(.btn-outline).active:hover, .btn.grey-cararra:not(.btn-outline).active:focus, .btn.grey-cararra:not(.btn-outline).active.focus, .open > .btn.grey-cararra:not(.btn-outline).dropdown-toggle:hover, .open > .btn.grey-cararra:not(.btn-outline).dropdown-toggle:focus, .open > .btn.grey-cararra:not(.btn-outline).dropdown-toggle.focus { color: #333333; background-color: #cfcfcf; border-color: #bababa; } .btn.grey-cararra:not(.btn-outline):active, .btn.grey-cararra:not(.btn-outline).active, .open > .btn.grey-cararra:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.grey-cararra:not(.btn-outline).disabled:hover, .btn.grey-cararra:not(.btn-outline).disabled:focus, .btn.grey-cararra:not(.btn-outline).disabled.focus, .btn.grey-cararra:not(.btn-outline)[disabled]:hover, .btn.grey-cararra:not(.btn-outline)[disabled]:focus, .btn.grey-cararra:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.grey-cararra:not(.btn-outline):hover, fieldset[disabled] .btn.grey-cararra:not(.btn-outline):focus, fieldset[disabled] .btn.grey-cararra:not(.btn-outline).focus { background-color: #fafafa; border-color: #fafafa; } .btn.grey-cararra:not(.btn-outline) .badge { color: #fafafa; background-color: #333333; } .btn.btn-outline.grey-cararra { border-color: #fafafa; color: #fafafa; background: none; } .btn.btn-outline.grey-cararra:hover, .btn.btn-outline.grey-cararra:active, .btn.btn-outline.grey-cararra:active:hover, .btn.btn-outline.grey-cararra:active:focus, .btn.btn-outline.grey-cararra:focus, .btn.btn-outline.grey-cararra.active { border-color: #fafafa; color: #333333; background-color: #fafafa; } .btn.grey-cararra-stripe { border-left: 4px solid #fafafa !important; } .btn.grey-gallery:not(.btn-outline) { color: #ffffff; background-color: #555555; border-color: #555555; } .btn.grey-gallery:not(.btn-outline):focus, .btn.grey-gallery:not(.btn-outline).focus { color: #ffffff; background-color: #3c3c3c; border-color: #151515; } .btn.grey-gallery:not(.btn-outline):hover { color: #ffffff; background-color: #3c3c3c; border-color: #363636; } .btn.grey-gallery:not(.btn-outline):active, .btn.grey-gallery:not(.btn-outline).active, .open > .btn.grey-gallery:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #3c3c3c; border-color: #363636; } .btn.grey-gallery:not(.btn-outline):active:hover, .btn.grey-gallery:not(.btn-outline):active:focus, .btn.grey-gallery:not(.btn-outline):active.focus, .btn.grey-gallery:not(.btn-outline).active:hover, .btn.grey-gallery:not(.btn-outline).active:focus, .btn.grey-gallery:not(.btn-outline).active.focus, .open > .btn.grey-gallery:not(.btn-outline).dropdown-toggle:hover, .open > .btn.grey-gallery:not(.btn-outline).dropdown-toggle:focus, .open > .btn.grey-gallery:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #2a2a2a; border-color: #151515; } .btn.grey-gallery:not(.btn-outline):active, .btn.grey-gallery:not(.btn-outline).active, .open > .btn.grey-gallery:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.grey-gallery:not(.btn-outline).disabled:hover, .btn.grey-gallery:not(.btn-outline).disabled:focus, .btn.grey-gallery:not(.btn-outline).disabled.focus, .btn.grey-gallery:not(.btn-outline)[disabled]:hover, .btn.grey-gallery:not(.btn-outline)[disabled]:focus, .btn.grey-gallery:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.grey-gallery:not(.btn-outline):hover, fieldset[disabled] .btn.grey-gallery:not(.btn-outline):focus, fieldset[disabled] .btn.grey-gallery:not(.btn-outline).focus { background-color: #555555; border-color: #555555; } .btn.grey-gallery:not(.btn-outline) .badge { color: #555555; background-color: #ffffff; } .btn.btn-outline.grey-gallery { border-color: #555555; color: #555555; background: none; } .btn.btn-outline.grey-gallery:hover, .btn.btn-outline.grey-gallery:active, .btn.btn-outline.grey-gallery:active:hover, .btn.btn-outline.grey-gallery:active:focus, .btn.btn-outline.grey-gallery:focus, .btn.btn-outline.grey-gallery.active { border-color: #555555; color: #ffffff; background-color: #555555; } .btn.grey-gallery-stripe { border-left: 4px solid #555555 !important; } .btn.grey-cascade:not(.btn-outline) { color: #FFFFFF; background-color: #95A5A6; border-color: #95A5A6; } .btn.grey-cascade:not(.btn-outline):focus, .btn.grey-cascade:not(.btn-outline).focus { color: #FFFFFF; background-color: #798d8f; border-color: #566566; } .btn.grey-cascade:not(.btn-outline):hover { color: #FFFFFF; background-color: #798d8f; border-color: #74898a; } .btn.grey-cascade:not(.btn-outline):active, .btn.grey-cascade:not(.btn-outline).active, .open > .btn.grey-cascade:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #798d8f; border-color: #74898a; } .btn.grey-cascade:not(.btn-outline):active:hover, .btn.grey-cascade:not(.btn-outline):active:focus, .btn.grey-cascade:not(.btn-outline):active.focus, .btn.grey-cascade:not(.btn-outline).active:hover, .btn.grey-cascade:not(.btn-outline).active:focus, .btn.grey-cascade:not(.btn-outline).active.focus, .open > .btn.grey-cascade:not(.btn-outline).dropdown-toggle:hover, .open > .btn.grey-cascade:not(.btn-outline).dropdown-toggle:focus, .open > .btn.grey-cascade:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #687b7c; border-color: #566566; } .btn.grey-cascade:not(.btn-outline):active, .btn.grey-cascade:not(.btn-outline).active, .open > .btn.grey-cascade:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.grey-cascade:not(.btn-outline).disabled:hover, .btn.grey-cascade:not(.btn-outline).disabled:focus, .btn.grey-cascade:not(.btn-outline).disabled.focus, .btn.grey-cascade:not(.btn-outline)[disabled]:hover, .btn.grey-cascade:not(.btn-outline)[disabled]:focus, .btn.grey-cascade:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.grey-cascade:not(.btn-outline):hover, fieldset[disabled] .btn.grey-cascade:not(.btn-outline):focus, fieldset[disabled] .btn.grey-cascade:not(.btn-outline).focus { background-color: #95A5A6; border-color: #95A5A6; } .btn.grey-cascade:not(.btn-outline) .badge { color: #95A5A6; background-color: #FFFFFF; } .btn.btn-outline.grey-cascade { border-color: #95A5A6; color: #95A5A6; background: none; } .btn.btn-outline.grey-cascade:hover, .btn.btn-outline.grey-cascade:active, .btn.btn-outline.grey-cascade:active:hover, .btn.btn-outline.grey-cascade:active:focus, .btn.btn-outline.grey-cascade:focus, .btn.btn-outline.grey-cascade.active { border-color: #95A5A6; color: #FFFFFF; background-color: #95A5A6; } .btn.grey-cascade-stripe { border-left: 4px solid #95A5A6 !important; } .btn.grey-silver:not(.btn-outline) { color: #FAFCFB; background-color: #BFBFBF; border-color: #BFBFBF; } .btn.grey-silver:not(.btn-outline):focus, .btn.grey-silver:not(.btn-outline).focus { color: #FAFCFB; background-color: #a6a6a6; border-color: #7f7f7f; } .btn.grey-silver:not(.btn-outline):hover { color: #FAFCFB; background-color: #a6a6a6; border-color: #a0a0a0; } .btn.grey-silver:not(.btn-outline):active, .btn.grey-silver:not(.btn-outline).active, .open > .btn.grey-silver:not(.btn-outline).dropdown-toggle { color: #FAFCFB; background-color: #a6a6a6; border-color: #a0a0a0; } .btn.grey-silver:not(.btn-outline):active:hover, .btn.grey-silver:not(.btn-outline):active:focus, .btn.grey-silver:not(.btn-outline):active.focus, .btn.grey-silver:not(.btn-outline).active:hover, .btn.grey-silver:not(.btn-outline).active:focus, .btn.grey-silver:not(.btn-outline).active.focus, .open > .btn.grey-silver:not(.btn-outline).dropdown-toggle:hover, .open > .btn.grey-silver:not(.btn-outline).dropdown-toggle:focus, .open > .btn.grey-silver:not(.btn-outline).dropdown-toggle.focus { color: #FAFCFB; background-color: #949494; border-color: #7f7f7f; } .btn.grey-silver:not(.btn-outline):active, .btn.grey-silver:not(.btn-outline).active, .open > .btn.grey-silver:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.grey-silver:not(.btn-outline).disabled:hover, .btn.grey-silver:not(.btn-outline).disabled:focus, .btn.grey-silver:not(.btn-outline).disabled.focus, .btn.grey-silver:not(.btn-outline)[disabled]:hover, .btn.grey-silver:not(.btn-outline)[disabled]:focus, .btn.grey-silver:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.grey-silver:not(.btn-outline):hover, fieldset[disabled] .btn.grey-silver:not(.btn-outline):focus, fieldset[disabled] .btn.grey-silver:not(.btn-outline).focus { background-color: #BFBFBF; border-color: #BFBFBF; } .btn.grey-silver:not(.btn-outline) .badge { color: #BFBFBF; background-color: #FAFCFB; } .btn.btn-outline.grey-silver { border-color: #BFBFBF; color: #BFBFBF; background: none; } .btn.btn-outline.grey-silver:hover, .btn.btn-outline.grey-silver:active, .btn.btn-outline.grey-silver:active:hover, .btn.btn-outline.grey-silver:active:focus, .btn.btn-outline.grey-silver:focus, .btn.btn-outline.grey-silver.active { border-color: #BFBFBF; color: #FAFCFB; background-color: #BFBFBF; } .btn.grey-silver-stripe { border-left: 4px solid #BFBFBF !important; } .btn.grey-salsa:not(.btn-outline) { color: #FAFCFB; background-color: #ACB5C3; border-color: #ACB5C3; } .btn.grey-salsa:not(.btn-outline):focus, .btn.grey-salsa:not(.btn-outline).focus { color: #FAFCFB; background-color: #8e9bae; border-color: #64748b; } .btn.grey-salsa:not(.btn-outline):hover { color: #FAFCFB; background-color: #8e9bae; border-color: #8895a9; } .btn.grey-salsa:not(.btn-outline):active, .btn.grey-salsa:not(.btn-outline).active, .open > .btn.grey-salsa:not(.btn-outline).dropdown-toggle { color: #FAFCFB; background-color: #8e9bae; border-color: #8895a9; } .btn.grey-salsa:not(.btn-outline):active:hover, .btn.grey-salsa:not(.btn-outline):active:focus, .btn.grey-salsa:not(.btn-outline):active.focus, .btn.grey-salsa:not(.btn-outline).active:hover, .btn.grey-salsa:not(.btn-outline).active:focus, .btn.grey-salsa:not(.btn-outline).active.focus, .open > .btn.grey-salsa:not(.btn-outline).dropdown-toggle:hover, .open > .btn.grey-salsa:not(.btn-outline).dropdown-toggle:focus, .open > .btn.grey-salsa:not(.btn-outline).dropdown-toggle.focus { color: #FAFCFB; background-color: #7a889f; border-color: #64748b; } .btn.grey-salsa:not(.btn-outline):active, .btn.grey-salsa:not(.btn-outline).active, .open > .btn.grey-salsa:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.grey-salsa:not(.btn-outline).disabled:hover, .btn.grey-salsa:not(.btn-outline).disabled:focus, .btn.grey-salsa:not(.btn-outline).disabled.focus, .btn.grey-salsa:not(.btn-outline)[disabled]:hover, .btn.grey-salsa:not(.btn-outline)[disabled]:focus, .btn.grey-salsa:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.grey-salsa:not(.btn-outline):hover, fieldset[disabled] .btn.grey-salsa:not(.btn-outline):focus, fieldset[disabled] .btn.grey-salsa:not(.btn-outline).focus { background-color: #ACB5C3; border-color: #ACB5C3; } .btn.grey-salsa:not(.btn-outline) .badge { color: #ACB5C3; background-color: #FAFCFB; } .btn.btn-outline.grey-salsa { border-color: #ACB5C3; color: #ACB5C3; background: none; } .btn.btn-outline.grey-salsa:hover, .btn.btn-outline.grey-salsa:active, .btn.btn-outline.grey-salsa:active:hover, .btn.btn-outline.grey-salsa:active:focus, .btn.btn-outline.grey-salsa:focus, .btn.btn-outline.grey-salsa.active { border-color: #ACB5C3; color: #FAFCFB; background-color: #ACB5C3; } .btn.grey-salsa-stripe { border-left: 4px solid #ACB5C3 !important; } .btn.grey-salt:not(.btn-outline) { color: #FAFCFB; background-color: #bfcad1; border-color: #bfcad1; } .btn.grey-salt:not(.btn-outline):focus, .btn.grey-salt:not(.btn-outline).focus { color: #FAFCFB; background-color: #a1b1bc; border-color: #758d9c; } .btn.grey-salt:not(.btn-outline):hover { color: #FAFCFB; background-color: #a1b1bc; border-color: #9badb7; } .btn.grey-salt:not(.btn-outline):active, .btn.grey-salt:not(.btn-outline).active, .open > .btn.grey-salt:not(.btn-outline).dropdown-toggle { color: #FAFCFB; background-color: #a1b1bc; border-color: #9badb7; } .btn.grey-salt:not(.btn-outline):active:hover, .btn.grey-salt:not(.btn-outline):active:focus, .btn.grey-salt:not(.btn-outline):active.focus, .btn.grey-salt:not(.btn-outline).active:hover, .btn.grey-salt:not(.btn-outline).active:focus, .btn.grey-salt:not(.btn-outline).active.focus, .open > .btn.grey-salt:not(.btn-outline).dropdown-toggle:hover, .open > .btn.grey-salt:not(.btn-outline).dropdown-toggle:focus, .open > .btn.grey-salt:not(.btn-outline).dropdown-toggle.focus { color: #FAFCFB; background-color: #8da0ad; border-color: #758d9c; } .btn.grey-salt:not(.btn-outline):active, .btn.grey-salt:not(.btn-outline).active, .open > .btn.grey-salt:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.grey-salt:not(.btn-outline).disabled:hover, .btn.grey-salt:not(.btn-outline).disabled:focus, .btn.grey-salt:not(.btn-outline).disabled.focus, .btn.grey-salt:not(.btn-outline)[disabled]:hover, .btn.grey-salt:not(.btn-outline)[disabled]:focus, .btn.grey-salt:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.grey-salt:not(.btn-outline):hover, fieldset[disabled] .btn.grey-salt:not(.btn-outline):focus, fieldset[disabled] .btn.grey-salt:not(.btn-outline).focus { background-color: #bfcad1; border-color: #bfcad1; } .btn.grey-salt:not(.btn-outline) .badge { color: #bfcad1; background-color: #FAFCFB; } .btn.btn-outline.grey-salt { border-color: #bfcad1; color: #bfcad1; background: none; } .btn.btn-outline.grey-salt:hover, .btn.btn-outline.grey-salt:active, .btn.btn-outline.grey-salt:active:hover, .btn.btn-outline.grey-salt:active:focus, .btn.btn-outline.grey-salt:focus, .btn.btn-outline.grey-salt.active { border-color: #bfcad1; color: #FAFCFB; background-color: #bfcad1; } .btn.grey-salt-stripe { border-left: 4px solid #bfcad1 !important; } .btn.grey-mint:not(.btn-outline) { color: #FFFFFF; background-color: #525e64; border-color: #525e64; } .btn.grey-mint:not(.btn-outline):focus, .btn.grey-mint:not(.btn-outline).focus { color: #FFFFFF; background-color: #3b4448; border-color: #191c1e; } .btn.grey-mint:not(.btn-outline):hover { color: #FFFFFF; background-color: #3b4448; border-color: #363e42; } .btn.grey-mint:not(.btn-outline):active, .btn.grey-mint:not(.btn-outline).active, .open > .btn.grey-mint:not(.btn-outline).dropdown-toggle { color: #FFFFFF; background-color: #3b4448; border-color: #363e42; } .btn.grey-mint:not(.btn-outline):active:hover, .btn.grey-mint:not(.btn-outline):active:focus, .btn.grey-mint:not(.btn-outline):active.focus, .btn.grey-mint:not(.btn-outline).active:hover, .btn.grey-mint:not(.btn-outline).active:focus, .btn.grey-mint:not(.btn-outline).active.focus, .open > .btn.grey-mint:not(.btn-outline).dropdown-toggle:hover, .open > .btn.grey-mint:not(.btn-outline).dropdown-toggle:focus, .open > .btn.grey-mint:not(.btn-outline).dropdown-toggle.focus { color: #FFFFFF; background-color: #2b3134; border-color: #191c1e; } .btn.grey-mint:not(.btn-outline):active, .btn.grey-mint:not(.btn-outline).active, .open > .btn.grey-mint:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.grey-mint:not(.btn-outline).disabled:hover, .btn.grey-mint:not(.btn-outline).disabled:focus, .btn.grey-mint:not(.btn-outline).disabled.focus, .btn.grey-mint:not(.btn-outline)[disabled]:hover, .btn.grey-mint:not(.btn-outline)[disabled]:focus, .btn.grey-mint:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.grey-mint:not(.btn-outline):hover, fieldset[disabled] .btn.grey-mint:not(.btn-outline):focus, fieldset[disabled] .btn.grey-mint:not(.btn-outline).focus { background-color: #525e64; border-color: #525e64; } .btn.grey-mint:not(.btn-outline) .badge { color: #525e64; background-color: #FFFFFF; } .btn.btn-outline.grey-mint { border-color: #525e64; color: #525e64; background: none; } .btn.btn-outline.grey-mint:hover, .btn.btn-outline.grey-mint:active, .btn.btn-outline.grey-mint:active:hover, .btn.btn-outline.grey-mint:active:focus, .btn.btn-outline.grey-mint:focus, .btn.btn-outline.grey-mint.active { border-color: #525e64; color: #FFFFFF; background-color: #525e64; } .btn.grey-mint-stripe { border-left: 4px solid #525e64 !important; } .btn.red:not(.btn-outline) { color: #ffffff; background-color: #e7505a; border-color: #e7505a; } .btn.red:not(.btn-outline):focus, .btn.red:not(.btn-outline).focus { color: #ffffff; background-color: #e12330; border-color: #a1161f; } .btn.red:not(.btn-outline):hover { color: #ffffff; background-color: #e12330; border-color: #dc1e2b; } .btn.red:not(.btn-outline):active, .btn.red:not(.btn-outline).active, .open > .btn.red:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #e12330; border-color: #dc1e2b; } .btn.red:not(.btn-outline):active:hover, .btn.red:not(.btn-outline):active:focus, .btn.red:not(.btn-outline):active.focus, .btn.red:not(.btn-outline).active:hover, .btn.red:not(.btn-outline).active:focus, .btn.red:not(.btn-outline).active.focus, .open > .btn.red:not(.btn-outline).dropdown-toggle:hover, .open > .btn.red:not(.btn-outline).dropdown-toggle:focus, .open > .btn.red:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #c51b26; border-color: #a1161f; } .btn.red:not(.btn-outline):active, .btn.red:not(.btn-outline).active, .open > .btn.red:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.red:not(.btn-outline).disabled:hover, .btn.red:not(.btn-outline).disabled:focus, .btn.red:not(.btn-outline).disabled.focus, .btn.red:not(.btn-outline)[disabled]:hover, .btn.red:not(.btn-outline)[disabled]:focus, .btn.red:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.red:not(.btn-outline):hover, fieldset[disabled] .btn.red:not(.btn-outline):focus, fieldset[disabled] .btn.red:not(.btn-outline).focus { background-color: #e7505a; border-color: #e7505a; } .btn.red:not(.btn-outline) .badge { color: #e7505a; background-color: #ffffff; } .btn.btn-outline.red { border-color: #e7505a; color: #e7505a; background: none; } .btn.btn-outline.red:hover, .btn.btn-outline.red:active, .btn.btn-outline.red:active:hover, .btn.btn-outline.red:active:focus, .btn.btn-outline.red:focus, .btn.btn-outline.red.active { border-color: #e7505a; color: #ffffff; background-color: #e7505a; } .btn.red-stripe { border-left: 4px solid #e7505a !important; } .btn.red-pink:not(.btn-outline) { color: #ffffff; background-color: #E08283; border-color: #E08283; } .btn.red-pink:not(.btn-outline):focus, .btn.red-pink:not(.btn-outline).focus { color: #ffffff; background-color: #d6595a; border-color: #b52d2e; } .btn.red-pink:not(.btn-outline):hover { color: #ffffff; background-color: #d6595a; border-color: #d45152; } .btn.red-pink:not(.btn-outline):active, .btn.red-pink:not(.btn-outline).active, .open > .btn.red-pink:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #d6595a; border-color: #d45152; } .btn.red-pink:not(.btn-outline):active:hover, .btn.red-pink:not(.btn-outline):active:focus, .btn.red-pink:not(.btn-outline):active.focus, .btn.red-pink:not(.btn-outline).active:hover, .btn.red-pink:not(.btn-outline).active:focus, .btn.red-pink:not(.btn-outline).active.focus, .open > .btn.red-pink:not(.btn-outline).dropdown-toggle:hover, .open > .btn.red-pink:not(.btn-outline).dropdown-toggle:focus, .open > .btn.red-pink:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #cf3d3e; border-color: #b52d2e; } .btn.red-pink:not(.btn-outline):active, .btn.red-pink:not(.btn-outline).active, .open > .btn.red-pink:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.red-pink:not(.btn-outline).disabled:hover, .btn.red-pink:not(.btn-outline).disabled:focus, .btn.red-pink:not(.btn-outline).disabled.focus, .btn.red-pink:not(.btn-outline)[disabled]:hover, .btn.red-pink:not(.btn-outline)[disabled]:focus, .btn.red-pink:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.red-pink:not(.btn-outline):hover, fieldset[disabled] .btn.red-pink:not(.btn-outline):focus, fieldset[disabled] .btn.red-pink:not(.btn-outline).focus { background-color: #E08283; border-color: #E08283; } .btn.red-pink:not(.btn-outline) .badge { color: #E08283; background-color: #ffffff; } .btn.btn-outline.red-pink { border-color: #E08283; color: #E08283; background: none; } .btn.btn-outline.red-pink:hover, .btn.btn-outline.red-pink:active, .btn.btn-outline.red-pink:active:hover, .btn.btn-outline.red-pink:active:focus, .btn.btn-outline.red-pink:focus, .btn.btn-outline.red-pink.active { border-color: #E08283; color: #ffffff; background-color: #E08283; } .btn.red-pink-stripe { border-left: 4px solid #E08283 !important; } .btn.red-sunglo:not(.btn-outline) { color: #ffffff; background-color: #E26A6A; border-color: #E26A6A; } .btn.red-sunglo:not(.btn-outline):focus, .btn.red-sunglo:not(.btn-outline).focus { color: #ffffff; background-color: #da3f3f; border-color: #ab2121; } .btn.red-sunglo:not(.btn-outline):hover { color: #ffffff; background-color: #da3f3f; border-color: #d83737; } .btn.red-sunglo:not(.btn-outline):active, .btn.red-sunglo:not(.btn-outline).active, .open > .btn.red-sunglo:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #da3f3f; border-color: #d83737; } .btn.red-sunglo:not(.btn-outline):active:hover, .btn.red-sunglo:not(.btn-outline):active:focus, .btn.red-sunglo:not(.btn-outline):active.focus, .btn.red-sunglo:not(.btn-outline).active:hover, .btn.red-sunglo:not(.btn-outline).active:focus, .btn.red-sunglo:not(.btn-outline).active.focus, .open > .btn.red-sunglo:not(.btn-outline).dropdown-toggle:hover, .open > .btn.red-sunglo:not(.btn-outline).dropdown-toggle:focus, .open > .btn.red-sunglo:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #cd2828; border-color: #ab2121; } .btn.red-sunglo:not(.btn-outline):active, .btn.red-sunglo:not(.btn-outline).active, .open > .btn.red-sunglo:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.red-sunglo:not(.btn-outline).disabled:hover, .btn.red-sunglo:not(.btn-outline).disabled:focus, .btn.red-sunglo:not(.btn-outline).disabled.focus, .btn.red-sunglo:not(.btn-outline)[disabled]:hover, .btn.red-sunglo:not(.btn-outline)[disabled]:focus, .btn.red-sunglo:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.red-sunglo:not(.btn-outline):hover, fieldset[disabled] .btn.red-sunglo:not(.btn-outline):focus, fieldset[disabled] .btn.red-sunglo:not(.btn-outline).focus { background-color: #E26A6A; border-color: #E26A6A; } .btn.red-sunglo:not(.btn-outline) .badge { color: #E26A6A; background-color: #ffffff; } .btn.btn-outline.red-sunglo { border-color: #E26A6A; color: #E26A6A; background: none; } .btn.btn-outline.red-sunglo:hover, .btn.btn-outline.red-sunglo:active, .btn.btn-outline.red-sunglo:active:hover, .btn.btn-outline.red-sunglo:active:focus, .btn.btn-outline.red-sunglo:focus, .btn.btn-outline.red-sunglo.active { border-color: #E26A6A; color: #ffffff; background-color: #E26A6A; } .btn.red-sunglo-stripe { border-left: 4px solid #E26A6A !important; } .btn.red-intense:not(.btn-outline) { color: #ffffff; background-color: #e35b5a; border-color: #e35b5a; } .btn.red-intense:not(.btn-outline):focus, .btn.red-intense:not(.btn-outline).focus { color: #ffffff; background-color: #dc302e; border-color: #a21c1b; } .btn.red-intense:not(.btn-outline):hover { color: #ffffff; background-color: #dc302e; border-color: #da2726; } .btn.red-intense:not(.btn-outline):active, .btn.red-intense:not(.btn-outline).active, .open > .btn.red-intense:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #dc302e; border-color: #da2726; } .btn.red-intense:not(.btn-outline):active:hover, .btn.red-intense:not(.btn-outline):active:focus, .btn.red-intense:not(.btn-outline):active.focus, .btn.red-intense:not(.btn-outline).active:hover, .btn.red-intense:not(.btn-outline).active:focus, .btn.red-intense:not(.btn-outline).active.focus, .open > .btn.red-intense:not(.btn-outline).dropdown-toggle:hover, .open > .btn.red-intense:not(.btn-outline).dropdown-toggle:focus, .open > .btn.red-intense:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #c52321; border-color: #a21c1b; } .btn.red-intense:not(.btn-outline):active, .btn.red-intense:not(.btn-outline).active, .open > .btn.red-intense:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.red-intense:not(.btn-outline).disabled:hover, .btn.red-intense:not(.btn-outline).disabled:focus, .btn.red-intense:not(.btn-outline).disabled.focus, .btn.red-intense:not(.btn-outline)[disabled]:hover, .btn.red-intense:not(.btn-outline)[disabled]:focus, .btn.red-intense:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.red-intense:not(.btn-outline):hover, fieldset[disabled] .btn.red-intense:not(.btn-outline):focus, fieldset[disabled] .btn.red-intense:not(.btn-outline).focus { background-color: #e35b5a; border-color: #e35b5a; } .btn.red-intense:not(.btn-outline) .badge { color: #e35b5a; background-color: #ffffff; } .btn.btn-outline.red-intense { border-color: #e35b5a; color: #e35b5a; background: none; } .btn.btn-outline.red-intense:hover, .btn.btn-outline.red-intense:active, .btn.btn-outline.red-intense:active:hover, .btn.btn-outline.red-intense:active:focus, .btn.btn-outline.red-intense:focus, .btn.btn-outline.red-intense.active { border-color: #e35b5a; color: #ffffff; background-color: #e35b5a; } .btn.red-intense-stripe { border-left: 4px solid #e35b5a !important; } .btn.red-thunderbird:not(.btn-outline) { color: #ffffff; background-color: #D91E18; border-color: #D91E18; } .btn.red-thunderbird:not(.btn-outline):focus, .btn.red-thunderbird:not(.btn-outline).focus { color: #ffffff; background-color: #ab1813; border-color: #660e0b; } .btn.red-thunderbird:not(.btn-outline):hover { color: #ffffff; background-color: #ab1813; border-color: #a21612; } .btn.red-thunderbird:not(.btn-outline):active, .btn.red-thunderbird:not(.btn-outline).active, .open > .btn.red-thunderbird:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #ab1813; border-color: #a21612; } .btn.red-thunderbird:not(.btn-outline):active:hover, .btn.red-thunderbird:not(.btn-outline):active:focus, .btn.red-thunderbird:not(.btn-outline):active.focus, .btn.red-thunderbird:not(.btn-outline).active:hover, .btn.red-thunderbird:not(.btn-outline).active:focus, .btn.red-thunderbird:not(.btn-outline).active.focus, .open > .btn.red-thunderbird:not(.btn-outline).dropdown-toggle:hover, .open > .btn.red-thunderbird:not(.btn-outline).dropdown-toggle:focus, .open > .btn.red-thunderbird:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #8b130f; border-color: #660e0b; } .btn.red-thunderbird:not(.btn-outline):active, .btn.red-thunderbird:not(.btn-outline).active, .open > .btn.red-thunderbird:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.red-thunderbird:not(.btn-outline).disabled:hover, .btn.red-thunderbird:not(.btn-outline).disabled:focus, .btn.red-thunderbird:not(.btn-outline).disabled.focus, .btn.red-thunderbird:not(.btn-outline)[disabled]:hover, .btn.red-thunderbird:not(.btn-outline)[disabled]:focus, .btn.red-thunderbird:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.red-thunderbird:not(.btn-outline):hover, fieldset[disabled] .btn.red-thunderbird:not(.btn-outline):focus, fieldset[disabled] .btn.red-thunderbird:not(.btn-outline).focus { background-color: #D91E18; border-color: #D91E18; } .btn.red-thunderbird:not(.btn-outline) .badge { color: #D91E18; background-color: #ffffff; } .btn.btn-outline.red-thunderbird { border-color: #D91E18; color: #D91E18; background: none; } .btn.btn-outline.red-thunderbird:hover, .btn.btn-outline.red-thunderbird:active, .btn.btn-outline.red-thunderbird:active:hover, .btn.btn-outline.red-thunderbird:active:focus, .btn.btn-outline.red-thunderbird:focus, .btn.btn-outline.red-thunderbird.active { border-color: #D91E18; color: #ffffff; background-color: #D91E18; } .btn.red-thunderbird-stripe { border-left: 4px solid #D91E18 !important; } .btn.red-flamingo:not(.btn-outline) { color: #ffffff; background-color: #EF4836; border-color: #EF4836; } .btn.red-flamingo:not(.btn-outline):focus, .btn.red-flamingo:not(.btn-outline).focus { color: #ffffff; background-color: #e02612; border-color: #991a0c; } .btn.red-flamingo:not(.btn-outline):hover { color: #ffffff; background-color: #e02612; border-color: #d72411; } .btn.red-flamingo:not(.btn-outline):active, .btn.red-flamingo:not(.btn-outline).active, .open > .btn.red-flamingo:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #e02612; border-color: #d72411; } .btn.red-flamingo:not(.btn-outline):active:hover, .btn.red-flamingo:not(.btn-outline):active:focus, .btn.red-flamingo:not(.btn-outline):active.focus, .btn.red-flamingo:not(.btn-outline).active:hover, .btn.red-flamingo:not(.btn-outline).active:focus, .btn.red-flamingo:not(.btn-outline).active.focus, .open > .btn.red-flamingo:not(.btn-outline).dropdown-toggle:hover, .open > .btn.red-flamingo:not(.btn-outline).dropdown-toggle:focus, .open > .btn.red-flamingo:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #bf200f; border-color: #991a0c; } .btn.red-flamingo:not(.btn-outline):active, .btn.red-flamingo:not(.btn-outline).active, .open > .btn.red-flamingo:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.red-flamingo:not(.btn-outline).disabled:hover, .btn.red-flamingo:not(.btn-outline).disabled:focus, .btn.red-flamingo:not(.btn-outline).disabled.focus, .btn.red-flamingo:not(.btn-outline)[disabled]:hover, .btn.red-flamingo:not(.btn-outline)[disabled]:focus, .btn.red-flamingo:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.red-flamingo:not(.btn-outline):hover, fieldset[disabled] .btn.red-flamingo:not(.btn-outline):focus, fieldset[disabled] .btn.red-flamingo:not(.btn-outline).focus { background-color: #EF4836; border-color: #EF4836; } .btn.red-flamingo:not(.btn-outline) .badge { color: #EF4836; background-color: #ffffff; } .btn.btn-outline.red-flamingo { border-color: #EF4836; color: #EF4836; background: none; } .btn.btn-outline.red-flamingo:hover, .btn.btn-outline.red-flamingo:active, .btn.btn-outline.red-flamingo:active:hover, .btn.btn-outline.red-flamingo:active:focus, .btn.btn-outline.red-flamingo:focus, .btn.btn-outline.red-flamingo.active { border-color: #EF4836; color: #ffffff; background-color: #EF4836; } .btn.red-flamingo-stripe { border-left: 4px solid #EF4836 !important; } .btn.red-soft:not(.btn-outline) { color: #ffffff; background-color: #d05454; border-color: #d05454; } .btn.red-soft:not(.btn-outline):focus, .btn.red-soft:not(.btn-outline).focus { color: #ffffff; background-color: #bd3434; border-color: #812323; } .btn.red-soft:not(.btn-outline):hover { color: #ffffff; background-color: #bd3434; border-color: #b53232; } .btn.red-soft:not(.btn-outline):active, .btn.red-soft:not(.btn-outline).active, .open > .btn.red-soft:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #bd3434; border-color: #b53232; } .btn.red-soft:not(.btn-outline):active:hover, .btn.red-soft:not(.btn-outline):active:focus, .btn.red-soft:not(.btn-outline):active.focus, .btn.red-soft:not(.btn-outline).active:hover, .btn.red-soft:not(.btn-outline).active:focus, .btn.red-soft:not(.btn-outline).active.focus, .open > .btn.red-soft:not(.btn-outline).dropdown-toggle:hover, .open > .btn.red-soft:not(.btn-outline).dropdown-toggle:focus, .open > .btn.red-soft:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #a12c2c; border-color: #812323; } .btn.red-soft:not(.btn-outline):active, .btn.red-soft:not(.btn-outline).active, .open > .btn.red-soft:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.red-soft:not(.btn-outline).disabled:hover, .btn.red-soft:not(.btn-outline).disabled:focus, .btn.red-soft:not(.btn-outline).disabled.focus, .btn.red-soft:not(.btn-outline)[disabled]:hover, .btn.red-soft:not(.btn-outline)[disabled]:focus, .btn.red-soft:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.red-soft:not(.btn-outline):hover, fieldset[disabled] .btn.red-soft:not(.btn-outline):focus, fieldset[disabled] .btn.red-soft:not(.btn-outline).focus { background-color: #d05454; border-color: #d05454; } .btn.red-soft:not(.btn-outline) .badge { color: #d05454; background-color: #ffffff; } .btn.btn-outline.red-soft { border-color: #d05454; color: #d05454; background: none; } .btn.btn-outline.red-soft:hover, .btn.btn-outline.red-soft:active, .btn.btn-outline.red-soft:active:hover, .btn.btn-outline.red-soft:active:focus, .btn.btn-outline.red-soft:focus, .btn.btn-outline.red-soft.active { border-color: #d05454; color: #ffffff; background-color: #d05454; } .btn.red-soft-stripe { border-left: 4px solid #d05454 !important; } .btn.red-haze:not(.btn-outline) { color: #ffffff; background-color: #f36a5a; border-color: #f36a5a; } .btn.red-haze:not(.btn-outline):focus, .btn.red-haze:not(.btn-outline).focus { color: #ffffff; background-color: #f03f2a; border-color: #c0210e; } .btn.red-haze:not(.btn-outline):hover { color: #ffffff; background-color: #f03f2a; border-color: #ef3621; } .btn.red-haze:not(.btn-outline):active, .btn.red-haze:not(.btn-outline).active, .open > .btn.red-haze:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #f03f2a; border-color: #ef3621; } .btn.red-haze:not(.btn-outline):active:hover, .btn.red-haze:not(.btn-outline):active:focus, .btn.red-haze:not(.btn-outline):active.focus, .btn.red-haze:not(.btn-outline).active:hover, .btn.red-haze:not(.btn-outline).active:focus, .btn.red-haze:not(.btn-outline).active.focus, .open > .btn.red-haze:not(.btn-outline).dropdown-toggle:hover, .open > .btn.red-haze:not(.btn-outline).dropdown-toggle:focus, .open > .btn.red-haze:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #e62711; border-color: #c0210e; } .btn.red-haze:not(.btn-outline):active, .btn.red-haze:not(.btn-outline).active, .open > .btn.red-haze:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.red-haze:not(.btn-outline).disabled:hover, .btn.red-haze:not(.btn-outline).disabled:focus, .btn.red-haze:not(.btn-outline).disabled.focus, .btn.red-haze:not(.btn-outline)[disabled]:hover, .btn.red-haze:not(.btn-outline)[disabled]:focus, .btn.red-haze:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.red-haze:not(.btn-outline):hover, fieldset[disabled] .btn.red-haze:not(.btn-outline):focus, fieldset[disabled] .btn.red-haze:not(.btn-outline).focus { background-color: #f36a5a; border-color: #f36a5a; } .btn.red-haze:not(.btn-outline) .badge { color: #f36a5a; background-color: #ffffff; } .btn.btn-outline.red-haze { border-color: #f36a5a; color: #f36a5a; background: none; } .btn.btn-outline.red-haze:hover, .btn.btn-outline.red-haze:active, .btn.btn-outline.red-haze:active:hover, .btn.btn-outline.red-haze:active:focus, .btn.btn-outline.red-haze:focus, .btn.btn-outline.red-haze.active { border-color: #f36a5a; color: #ffffff; background-color: #f36a5a; } .btn.red-haze-stripe { border-left: 4px solid #f36a5a !important; } .btn.red-mint:not(.btn-outline) { color: #ffffff; background-color: #e43a45; border-color: #e43a45; } .btn.red-mint:not(.btn-outline):focus, .btn.red-mint:not(.btn-outline).focus { color: #ffffff; background-color: #cf1c28; border-color: #8b131b; } .btn.red-mint:not(.btn-outline):hover { color: #ffffff; background-color: #cf1c28; border-color: #c61b26; } .btn.red-mint:not(.btn-outline):active, .btn.red-mint:not(.btn-outline).active, .open > .btn.red-mint:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #cf1c28; border-color: #c61b26; } .btn.red-mint:not(.btn-outline):active:hover, .btn.red-mint:not(.btn-outline):active:focus, .btn.red-mint:not(.btn-outline):active.focus, .btn.red-mint:not(.btn-outline).active:hover, .btn.red-mint:not(.btn-outline).active:focus, .btn.red-mint:not(.btn-outline).active.focus, .open > .btn.red-mint:not(.btn-outline).dropdown-toggle:hover, .open > .btn.red-mint:not(.btn-outline).dropdown-toggle:focus, .open > .btn.red-mint:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #af1822; border-color: #8b131b; } .btn.red-mint:not(.btn-outline):active, .btn.red-mint:not(.btn-outline).active, .open > .btn.red-mint:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.red-mint:not(.btn-outline).disabled:hover, .btn.red-mint:not(.btn-outline).disabled:focus, .btn.red-mint:not(.btn-outline).disabled.focus, .btn.red-mint:not(.btn-outline)[disabled]:hover, .btn.red-mint:not(.btn-outline)[disabled]:focus, .btn.red-mint:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.red-mint:not(.btn-outline):hover, fieldset[disabled] .btn.red-mint:not(.btn-outline):focus, fieldset[disabled] .btn.red-mint:not(.btn-outline).focus { background-color: #e43a45; border-color: #e43a45; } .btn.red-mint:not(.btn-outline) .badge { color: #e43a45; background-color: #ffffff; } .btn.btn-outline.red-mint { border-color: #e43a45; color: #e43a45; background: none; } .btn.btn-outline.red-mint:hover, .btn.btn-outline.red-mint:active, .btn.btn-outline.red-mint:active:hover, .btn.btn-outline.red-mint:active:focus, .btn.btn-outline.red-mint:focus, .btn.btn-outline.red-mint.active { border-color: #e43a45; color: #ffffff; background-color: #e43a45; } .btn.red-mint-stripe { border-left: 4px solid #e43a45 !important; } .btn.yellow:not(.btn-outline) { color: #ffffff; background-color: #c49f47; border-color: #c49f47; } .btn.yellow:not(.btn-outline):focus, .btn.yellow:not(.btn-outline).focus { color: #ffffff; background-color: #a48334; border-color: #6a5422; } .btn.yellow:not(.btn-outline):hover { color: #ffffff; background-color: #a48334; border-color: #9c7c32; } .btn.yellow:not(.btn-outline):active, .btn.yellow:not(.btn-outline).active, .open > .btn.yellow:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #a48334; border-color: #9c7c32; } .btn.yellow:not(.btn-outline):active:hover, .btn.yellow:not(.btn-outline):active:focus, .btn.yellow:not(.btn-outline):active.focus, .btn.yellow:not(.btn-outline).active:hover, .btn.yellow:not(.btn-outline).active:focus, .btn.yellow:not(.btn-outline).active.focus, .open > .btn.yellow:not(.btn-outline).dropdown-toggle:hover, .open > .btn.yellow:not(.btn-outline).dropdown-toggle:focus, .open > .btn.yellow:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #896d2c; border-color: #6a5422; } .btn.yellow:not(.btn-outline):active, .btn.yellow:not(.btn-outline).active, .open > .btn.yellow:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.yellow:not(.btn-outline).disabled:hover, .btn.yellow:not(.btn-outline).disabled:focus, .btn.yellow:not(.btn-outline).disabled.focus, .btn.yellow:not(.btn-outline)[disabled]:hover, .btn.yellow:not(.btn-outline)[disabled]:focus, .btn.yellow:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.yellow:not(.btn-outline):hover, fieldset[disabled] .btn.yellow:not(.btn-outline):focus, fieldset[disabled] .btn.yellow:not(.btn-outline).focus { background-color: #c49f47; border-color: #c49f47; } .btn.yellow:not(.btn-outline) .badge { color: #c49f47; background-color: #ffffff; } .btn.btn-outline.yellow { border-color: #c49f47; color: #c49f47; background: none; } .btn.btn-outline.yellow:hover, .btn.btn-outline.yellow:active, .btn.btn-outline.yellow:active:hover, .btn.btn-outline.yellow:active:focus, .btn.btn-outline.yellow:focus, .btn.btn-outline.yellow.active { border-color: #c49f47; color: #ffffff; background-color: #c49f47; } .btn.yellow-stripe { border-left: 4px solid #c49f47 !important; } .btn.yellow-gold:not(.btn-outline) { color: #ffffff; background-color: #E87E04; border-color: #E87E04; } .btn.yellow-gold:not(.btn-outline):focus, .btn.yellow-gold:not(.btn-outline).focus { color: #ffffff; background-color: #b66303; border-color: #6b3a02; } .btn.yellow-gold:not(.btn-outline):hover { color: #ffffff; background-color: #b66303; border-color: #ac5d03; } .btn.yellow-gold:not(.btn-outline):active, .btn.yellow-gold:not(.btn-outline).active, .open > .btn.yellow-gold:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #b66303; border-color: #ac5d03; } .btn.yellow-gold:not(.btn-outline):active:hover, .btn.yellow-gold:not(.btn-outline):active:focus, .btn.yellow-gold:not(.btn-outline):active.focus, .btn.yellow-gold:not(.btn-outline).active:hover, .btn.yellow-gold:not(.btn-outline).active:focus, .btn.yellow-gold:not(.btn-outline).active.focus, .open > .btn.yellow-gold:not(.btn-outline).dropdown-toggle:hover, .open > .btn.yellow-gold:not(.btn-outline).dropdown-toggle:focus, .open > .btn.yellow-gold:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #935003; border-color: #6b3a02; } .btn.yellow-gold:not(.btn-outline):active, .btn.yellow-gold:not(.btn-outline).active, .open > .btn.yellow-gold:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.yellow-gold:not(.btn-outline).disabled:hover, .btn.yellow-gold:not(.btn-outline).disabled:focus, .btn.yellow-gold:not(.btn-outline).disabled.focus, .btn.yellow-gold:not(.btn-outline)[disabled]:hover, .btn.yellow-gold:not(.btn-outline)[disabled]:focus, .btn.yellow-gold:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.yellow-gold:not(.btn-outline):hover, fieldset[disabled] .btn.yellow-gold:not(.btn-outline):focus, fieldset[disabled] .btn.yellow-gold:not(.btn-outline).focus { background-color: #E87E04; border-color: #E87E04; } .btn.yellow-gold:not(.btn-outline) .badge { color: #E87E04; background-color: #ffffff; } .btn.btn-outline.yellow-gold { border-color: #E87E04; color: #E87E04; background: none; } .btn.btn-outline.yellow-gold:hover, .btn.btn-outline.yellow-gold:active, .btn.btn-outline.yellow-gold:active:hover, .btn.btn-outline.yellow-gold:active:focus, .btn.btn-outline.yellow-gold:focus, .btn.btn-outline.yellow-gold.active { border-color: #E87E04; color: #ffffff; background-color: #E87E04; } .btn.yellow-gold-stripe { border-left: 4px solid #E87E04 !important; } .btn.yellow-casablanca:not(.btn-outline) { color: #ffffff; background-color: #f2784b; border-color: #f2784b; } .btn.yellow-casablanca:not(.btn-outline):focus, .btn.yellow-casablanca:not(.btn-outline).focus { color: #ffffff; background-color: #ef541b; border-color: #b1390d; } .btn.yellow-casablanca:not(.btn-outline):hover { color: #ffffff; background-color: #ef541b; border-color: #ee4d12; } .btn.yellow-casablanca:not(.btn-outline):active, .btn.yellow-casablanca:not(.btn-outline).active, .open > .btn.yellow-casablanca:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #ef541b; border-color: #ee4d12; } .btn.yellow-casablanca:not(.btn-outline):active:hover, .btn.yellow-casablanca:not(.btn-outline):active:focus, .btn.yellow-casablanca:not(.btn-outline):active.focus, .btn.yellow-casablanca:not(.btn-outline).active:hover, .btn.yellow-casablanca:not(.btn-outline).active:focus, .btn.yellow-casablanca:not(.btn-outline).active.focus, .open > .btn.yellow-casablanca:not(.btn-outline).dropdown-toggle:hover, .open > .btn.yellow-casablanca:not(.btn-outline).dropdown-toggle:focus, .open > .btn.yellow-casablanca:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #d74510; border-color: #b1390d; } .btn.yellow-casablanca:not(.btn-outline):active, .btn.yellow-casablanca:not(.btn-outline).active, .open > .btn.yellow-casablanca:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.yellow-casablanca:not(.btn-outline).disabled:hover, .btn.yellow-casablanca:not(.btn-outline).disabled:focus, .btn.yellow-casablanca:not(.btn-outline).disabled.focus, .btn.yellow-casablanca:not(.btn-outline)[disabled]:hover, .btn.yellow-casablanca:not(.btn-outline)[disabled]:focus, .btn.yellow-casablanca:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.yellow-casablanca:not(.btn-outline):hover, fieldset[disabled] .btn.yellow-casablanca:not(.btn-outline):focus, fieldset[disabled] .btn.yellow-casablanca:not(.btn-outline).focus { background-color: #f2784b; border-color: #f2784b; } .btn.yellow-casablanca:not(.btn-outline) .badge { color: #f2784b; background-color: #ffffff; } .btn.btn-outline.yellow-casablanca { border-color: #f2784b; color: #f2784b; background: none; } .btn.btn-outline.yellow-casablanca:hover, .btn.btn-outline.yellow-casablanca:active, .btn.btn-outline.yellow-casablanca:active:hover, .btn.btn-outline.yellow-casablanca:active:focus, .btn.btn-outline.yellow-casablanca:focus, .btn.btn-outline.yellow-casablanca.active { border-color: #f2784b; color: #ffffff; background-color: #f2784b; } .btn.yellow-casablanca-stripe { border-left: 4px solid #f2784b !important; } .btn.yellow-crusta:not(.btn-outline) { color: #ffffff; background-color: #f3c200; border-color: #f3c200; } .btn.yellow-crusta:not(.btn-outline):focus, .btn.yellow-crusta:not(.btn-outline).focus { color: #ffffff; background-color: #c09900; border-color: #745c00; } .btn.yellow-crusta:not(.btn-outline):hover { color: #ffffff; background-color: #c09900; border-color: #b69100; } .btn.yellow-crusta:not(.btn-outline):active, .btn.yellow-crusta:not(.btn-outline).active, .open > .btn.yellow-crusta:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #c09900; border-color: #b69100; } .btn.yellow-crusta:not(.btn-outline):active:hover, .btn.yellow-crusta:not(.btn-outline):active:focus, .btn.yellow-crusta:not(.btn-outline):active.focus, .btn.yellow-crusta:not(.btn-outline).active:hover, .btn.yellow-crusta:not(.btn-outline).active:focus, .btn.yellow-crusta:not(.btn-outline).active.focus, .open > .btn.yellow-crusta:not(.btn-outline).dropdown-toggle:hover, .open > .btn.yellow-crusta:not(.btn-outline).dropdown-toggle:focus, .open > .btn.yellow-crusta:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #9c7d00; border-color: #745c00; } .btn.yellow-crusta:not(.btn-outline):active, .btn.yellow-crusta:not(.btn-outline).active, .open > .btn.yellow-crusta:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.yellow-crusta:not(.btn-outline).disabled:hover, .btn.yellow-crusta:not(.btn-outline).disabled:focus, .btn.yellow-crusta:not(.btn-outline).disabled.focus, .btn.yellow-crusta:not(.btn-outline)[disabled]:hover, .btn.yellow-crusta:not(.btn-outline)[disabled]:focus, .btn.yellow-crusta:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.yellow-crusta:not(.btn-outline):hover, fieldset[disabled] .btn.yellow-crusta:not(.btn-outline):focus, fieldset[disabled] .btn.yellow-crusta:not(.btn-outline).focus { background-color: #f3c200; border-color: #f3c200; } .btn.yellow-crusta:not(.btn-outline) .badge { color: #f3c200; background-color: #ffffff; } .btn.btn-outline.yellow-crusta { border-color: #f3c200; color: #f3c200; background: none; } .btn.btn-outline.yellow-crusta:hover, .btn.btn-outline.yellow-crusta:active, .btn.btn-outline.yellow-crusta:active:hover, .btn.btn-outline.yellow-crusta:active:focus, .btn.btn-outline.yellow-crusta:focus, .btn.btn-outline.yellow-crusta.active { border-color: #f3c200; color: #ffffff; background-color: #f3c200; } .btn.yellow-crusta-stripe { border-left: 4px solid #f3c200 !important; } .btn.yellow-lemon:not(.btn-outline) { color: #ffffff; background-color: #F7CA18; border-color: #F7CA18; } .btn.yellow-lemon:not(.btn-outline):focus, .btn.yellow-lemon:not(.btn-outline).focus { color: #ffffff; background-color: #d5ab07; border-color: #8b7005; } .btn.yellow-lemon:not(.btn-outline):hover { color: #ffffff; background-color: #d5ab07; border-color: #cba307; } .btn.yellow-lemon:not(.btn-outline):active, .btn.yellow-lemon:not(.btn-outline).active, .open > .btn.yellow-lemon:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #d5ab07; border-color: #cba307; } .btn.yellow-lemon:not(.btn-outline):active:hover, .btn.yellow-lemon:not(.btn-outline):active:focus, .btn.yellow-lemon:not(.btn-outline):active.focus, .btn.yellow-lemon:not(.btn-outline).active:hover, .btn.yellow-lemon:not(.btn-outline).active:focus, .btn.yellow-lemon:not(.btn-outline).active.focus, .open > .btn.yellow-lemon:not(.btn-outline).dropdown-toggle:hover, .open > .btn.yellow-lemon:not(.btn-outline).dropdown-toggle:focus, .open > .btn.yellow-lemon:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #b28f06; border-color: #8b7005; } .btn.yellow-lemon:not(.btn-outline):active, .btn.yellow-lemon:not(.btn-outline).active, .open > .btn.yellow-lemon:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.yellow-lemon:not(.btn-outline).disabled:hover, .btn.yellow-lemon:not(.btn-outline).disabled:focus, .btn.yellow-lemon:not(.btn-outline).disabled.focus, .btn.yellow-lemon:not(.btn-outline)[disabled]:hover, .btn.yellow-lemon:not(.btn-outline)[disabled]:focus, .btn.yellow-lemon:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.yellow-lemon:not(.btn-outline):hover, fieldset[disabled] .btn.yellow-lemon:not(.btn-outline):focus, fieldset[disabled] .btn.yellow-lemon:not(.btn-outline).focus { background-color: #F7CA18; border-color: #F7CA18; } .btn.yellow-lemon:not(.btn-outline) .badge { color: #F7CA18; background-color: #ffffff; } .btn.btn-outline.yellow-lemon { border-color: #F7CA18; color: #F7CA18; background: none; } .btn.btn-outline.yellow-lemon:hover, .btn.btn-outline.yellow-lemon:active, .btn.btn-outline.yellow-lemon:active:hover, .btn.btn-outline.yellow-lemon:active:focus, .btn.btn-outline.yellow-lemon:focus, .btn.btn-outline.yellow-lemon.active { border-color: #F7CA18; color: #ffffff; background-color: #F7CA18; } .btn.yellow-lemon-stripe { border-left: 4px solid #F7CA18 !important; } .btn.yellow-saffron:not(.btn-outline) { color: #ffffff; background-color: #F4D03F; border-color: #F4D03F; } .btn.yellow-saffron:not(.btn-outline):focus, .btn.yellow-saffron:not(.btn-outline).focus { color: #ffffff; background-color: #f1c40f; border-color: #aa8a0a; } .btn.yellow-saffron:not(.btn-outline):hover { color: #ffffff; background-color: #f1c40f; border-color: #e8bd0d; } .btn.yellow-saffron:not(.btn-outline):active, .btn.yellow-saffron:not(.btn-outline).active, .open > .btn.yellow-saffron:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #f1c40f; border-color: #e8bd0d; } .btn.yellow-saffron:not(.btn-outline):active:hover, .btn.yellow-saffron:not(.btn-outline):active:focus, .btn.yellow-saffron:not(.btn-outline):active.focus, .btn.yellow-saffron:not(.btn-outline).active:hover, .btn.yellow-saffron:not(.btn-outline).active:focus, .btn.yellow-saffron:not(.btn-outline).active.focus, .open > .btn.yellow-saffron:not(.btn-outline).dropdown-toggle:hover, .open > .btn.yellow-saffron:not(.btn-outline).dropdown-toggle:focus, .open > .btn.yellow-saffron:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #d0a90c; border-color: #aa8a0a; } .btn.yellow-saffron:not(.btn-outline):active, .btn.yellow-saffron:not(.btn-outline).active, .open > .btn.yellow-saffron:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.yellow-saffron:not(.btn-outline).disabled:hover, .btn.yellow-saffron:not(.btn-outline).disabled:focus, .btn.yellow-saffron:not(.btn-outline).disabled.focus, .btn.yellow-saffron:not(.btn-outline)[disabled]:hover, .btn.yellow-saffron:not(.btn-outline)[disabled]:focus, .btn.yellow-saffron:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.yellow-saffron:not(.btn-outline):hover, fieldset[disabled] .btn.yellow-saffron:not(.btn-outline):focus, fieldset[disabled] .btn.yellow-saffron:not(.btn-outline).focus { background-color: #F4D03F; border-color: #F4D03F; } .btn.yellow-saffron:not(.btn-outline) .badge { color: #F4D03F; background-color: #ffffff; } .btn.btn-outline.yellow-saffron { border-color: #F4D03F; color: #F4D03F; background: none; } .btn.btn-outline.yellow-saffron:hover, .btn.btn-outline.yellow-saffron:active, .btn.btn-outline.yellow-saffron:active:hover, .btn.btn-outline.yellow-saffron:active:focus, .btn.btn-outline.yellow-saffron:focus, .btn.btn-outline.yellow-saffron.active { border-color: #F4D03F; color: #ffffff; background-color: #F4D03F; } .btn.yellow-saffron-stripe { border-left: 4px solid #F4D03F !important; } .btn.yellow-soft:not(.btn-outline) { color: #ffffff; background-color: #c8d046; border-color: #c8d046; } .btn.yellow-soft:not(.btn-outline):focus, .btn.yellow-soft:not(.btn-outline).focus { color: #ffffff; background-color: #adb52e; border-color: #73781e; } .btn.yellow-soft:not(.btn-outline):hover { color: #ffffff; background-color: #adb52e; border-color: #a5ad2c; } .btn.yellow-soft:not(.btn-outline):active, .btn.yellow-soft:not(.btn-outline).active, .open > .btn.yellow-soft:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #adb52e; border-color: #a5ad2c; } .btn.yellow-soft:not(.btn-outline):active:hover, .btn.yellow-soft:not(.btn-outline):active:focus, .btn.yellow-soft:not(.btn-outline):active.focus, .btn.yellow-soft:not(.btn-outline).active:hover, .btn.yellow-soft:not(.btn-outline).active:focus, .btn.yellow-soft:not(.btn-outline).active.focus, .open > .btn.yellow-soft:not(.btn-outline).dropdown-toggle:hover, .open > .btn.yellow-soft:not(.btn-outline).dropdown-toggle:focus, .open > .btn.yellow-soft:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #929927; border-color: #73781e; } .btn.yellow-soft:not(.btn-outline):active, .btn.yellow-soft:not(.btn-outline).active, .open > .btn.yellow-soft:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.yellow-soft:not(.btn-outline).disabled:hover, .btn.yellow-soft:not(.btn-outline).disabled:focus, .btn.yellow-soft:not(.btn-outline).disabled.focus, .btn.yellow-soft:not(.btn-outline)[disabled]:hover, .btn.yellow-soft:not(.btn-outline)[disabled]:focus, .btn.yellow-soft:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.yellow-soft:not(.btn-outline):hover, fieldset[disabled] .btn.yellow-soft:not(.btn-outline):focus, fieldset[disabled] .btn.yellow-soft:not(.btn-outline).focus { background-color: #c8d046; border-color: #c8d046; } .btn.yellow-soft:not(.btn-outline) .badge { color: #c8d046; background-color: #ffffff; } .btn.btn-outline.yellow-soft { border-color: #c8d046; color: #c8d046; background: none; } .btn.btn-outline.yellow-soft:hover, .btn.btn-outline.yellow-soft:active, .btn.btn-outline.yellow-soft:active:hover, .btn.btn-outline.yellow-soft:active:focus, .btn.btn-outline.yellow-soft:focus, .btn.btn-outline.yellow-soft.active { border-color: #c8d046; color: #ffffff; background-color: #c8d046; } .btn.yellow-soft-stripe { border-left: 4px solid #c8d046 !important; } .btn.yellow-haze:not(.btn-outline) { color: #ffffff; background-color: #c5bf66; border-color: #c5bf66; } .btn.yellow-haze:not(.btn-outline):focus, .btn.yellow-haze:not(.btn-outline).focus { color: #ffffff; background-color: #b4ad44; border-color: #7c772f; } .btn.yellow-haze:not(.btn-outline):hover { color: #ffffff; background-color: #b4ad44; border-color: #aca641; } .btn.yellow-haze:not(.btn-outline):active, .btn.yellow-haze:not(.btn-outline).active, .open > .btn.yellow-haze:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #b4ad44; border-color: #aca641; } .btn.yellow-haze:not(.btn-outline):active:hover, .btn.yellow-haze:not(.btn-outline):active:focus, .btn.yellow-haze:not(.btn-outline):active.focus, .btn.yellow-haze:not(.btn-outline).active:hover, .btn.yellow-haze:not(.btn-outline).active:focus, .btn.yellow-haze:not(.btn-outline).active.focus, .open > .btn.yellow-haze:not(.btn-outline).dropdown-toggle:hover, .open > .btn.yellow-haze:not(.btn-outline).dropdown-toggle:focus, .open > .btn.yellow-haze:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #9a943a; border-color: #7c772f; } .btn.yellow-haze:not(.btn-outline):active, .btn.yellow-haze:not(.btn-outline).active, .open > .btn.yellow-haze:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.yellow-haze:not(.btn-outline).disabled:hover, .btn.yellow-haze:not(.btn-outline).disabled:focus, .btn.yellow-haze:not(.btn-outline).disabled.focus, .btn.yellow-haze:not(.btn-outline)[disabled]:hover, .btn.yellow-haze:not(.btn-outline)[disabled]:focus, .btn.yellow-haze:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.yellow-haze:not(.btn-outline):hover, fieldset[disabled] .btn.yellow-haze:not(.btn-outline):focus, fieldset[disabled] .btn.yellow-haze:not(.btn-outline).focus { background-color: #c5bf66; border-color: #c5bf66; } .btn.yellow-haze:not(.btn-outline) .badge { color: #c5bf66; background-color: #ffffff; } .btn.btn-outline.yellow-haze { border-color: #c5bf66; color: #c5bf66; background: none; } .btn.btn-outline.yellow-haze:hover, .btn.btn-outline.yellow-haze:active, .btn.btn-outline.yellow-haze:active:hover, .btn.btn-outline.yellow-haze:active:focus, .btn.btn-outline.yellow-haze:focus, .btn.btn-outline.yellow-haze.active { border-color: #c5bf66; color: #ffffff; background-color: #c5bf66; } .btn.yellow-haze-stripe { border-left: 4px solid #c5bf66 !important; } .btn.yellow-mint:not(.btn-outline) { color: #ffffff; background-color: #c5b96b; border-color: #c5b96b; } .btn.yellow-mint:not(.btn-outline):focus, .btn.yellow-mint:not(.btn-outline).focus { color: #ffffff; background-color: #b6a747; border-color: #7f7532; } .btn.yellow-mint:not(.btn-outline):hover { color: #ffffff; background-color: #b6a747; border-color: #aea044; } .btn.yellow-mint:not(.btn-outline):active, .btn.yellow-mint:not(.btn-outline).active, .open > .btn.yellow-mint:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #b6a747; border-color: #aea044; } .btn.yellow-mint:not(.btn-outline):active:hover, .btn.yellow-mint:not(.btn-outline):active:focus, .btn.yellow-mint:not(.btn-outline):active.focus, .btn.yellow-mint:not(.btn-outline).active:hover, .btn.yellow-mint:not(.btn-outline).active:focus, .btn.yellow-mint:not(.btn-outline).active.focus, .open > .btn.yellow-mint:not(.btn-outline).dropdown-toggle:hover, .open > .btn.yellow-mint:not(.btn-outline).dropdown-toggle:focus, .open > .btn.yellow-mint:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #9c8f3d; border-color: #7f7532; } .btn.yellow-mint:not(.btn-outline):active, .btn.yellow-mint:not(.btn-outline).active, .open > .btn.yellow-mint:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.yellow-mint:not(.btn-outline).disabled:hover, .btn.yellow-mint:not(.btn-outline).disabled:focus, .btn.yellow-mint:not(.btn-outline).disabled.focus, .btn.yellow-mint:not(.btn-outline)[disabled]:hover, .btn.yellow-mint:not(.btn-outline)[disabled]:focus, .btn.yellow-mint:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.yellow-mint:not(.btn-outline):hover, fieldset[disabled] .btn.yellow-mint:not(.btn-outline):focus, fieldset[disabled] .btn.yellow-mint:not(.btn-outline).focus { background-color: #c5b96b; border-color: #c5b96b; } .btn.yellow-mint:not(.btn-outline) .badge { color: #c5b96b; background-color: #ffffff; } .btn.btn-outline.yellow-mint { border-color: #c5b96b; color: #c5b96b; background: none; } .btn.btn-outline.yellow-mint:hover, .btn.btn-outline.yellow-mint:active, .btn.btn-outline.yellow-mint:active:hover, .btn.btn-outline.yellow-mint:active:focus, .btn.btn-outline.yellow-mint:focus, .btn.btn-outline.yellow-mint.active { border-color: #c5b96b; color: #ffffff; background-color: #c5b96b; } .btn.yellow-mint-stripe { border-left: 4px solid #c5b96b !important; } .btn.purple:not(.btn-outline) { color: #ffffff; background-color: #8E44AD; border-color: #8E44AD; } .btn.purple:not(.btn-outline):focus, .btn.purple:not(.btn-outline).focus { color: #ffffff; background-color: #703688; border-color: #432051; } .btn.purple:not(.btn-outline):hover { color: #ffffff; background-color: #703688; border-color: #6a3381; } .btn.purple:not(.btn-outline):active, .btn.purple:not(.btn-outline).active, .open > .btn.purple:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #703688; border-color: #6a3381; } .btn.purple:not(.btn-outline):active:hover, .btn.purple:not(.btn-outline):active:focus, .btn.purple:not(.btn-outline):active.focus, .btn.purple:not(.btn-outline).active:hover, .btn.purple:not(.btn-outline).active:focus, .btn.purple:not(.btn-outline).active.focus, .open > .btn.purple:not(.btn-outline).dropdown-toggle:hover, .open > .btn.purple:not(.btn-outline).dropdown-toggle:focus, .open > .btn.purple:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #5b2c6f; border-color: #432051; } .btn.purple:not(.btn-outline):active, .btn.purple:not(.btn-outline).active, .open > .btn.purple:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.purple:not(.btn-outline).disabled:hover, .btn.purple:not(.btn-outline).disabled:focus, .btn.purple:not(.btn-outline).disabled.focus, .btn.purple:not(.btn-outline)[disabled]:hover, .btn.purple:not(.btn-outline)[disabled]:focus, .btn.purple:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.purple:not(.btn-outline):hover, fieldset[disabled] .btn.purple:not(.btn-outline):focus, fieldset[disabled] .btn.purple:not(.btn-outline).focus { background-color: #8E44AD; border-color: #8E44AD; } .btn.purple:not(.btn-outline) .badge { color: #8E44AD; background-color: #ffffff; } .btn.btn-outline.purple { border-color: #8E44AD; color: #8E44AD; background: none; } .btn.btn-outline.purple:hover, .btn.btn-outline.purple:active, .btn.btn-outline.purple:active:hover, .btn.btn-outline.purple:active:focus, .btn.btn-outline.purple:focus, .btn.btn-outline.purple.active { border-color: #8E44AD; color: #ffffff; background-color: #8E44AD; } .btn.purple-stripe { border-left: 4px solid #8E44AD !important; } .btn.purple-plum:not(.btn-outline) { color: #ffffff; background-color: #8775a7; border-color: #8775a7; } .btn.purple-plum:not(.btn-outline):focus, .btn.purple-plum:not(.btn-outline).focus { color: #ffffff; background-color: #6d5b8e; border-color: #493d60; } .btn.purple-plum:not(.btn-outline):hover { color: #ffffff; background-color: #6d5b8e; border-color: #685788; } .btn.purple-plum:not(.btn-outline):active, .btn.purple-plum:not(.btn-outline).active, .open > .btn.purple-plum:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #6d5b8e; border-color: #685788; } .btn.purple-plum:not(.btn-outline):active:hover, .btn.purple-plum:not(.btn-outline):active:focus, .btn.purple-plum:not(.btn-outline):active.focus, .btn.purple-plum:not(.btn-outline).active:hover, .btn.purple-plum:not(.btn-outline).active:focus, .btn.purple-plum:not(.btn-outline).active.focus, .open > .btn.purple-plum:not(.btn-outline).dropdown-toggle:hover, .open > .btn.purple-plum:not(.btn-outline).dropdown-toggle:focus, .open > .btn.purple-plum:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #5d4d78; border-color: #493d60; } .btn.purple-plum:not(.btn-outline):active, .btn.purple-plum:not(.btn-outline).active, .open > .btn.purple-plum:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.purple-plum:not(.btn-outline).disabled:hover, .btn.purple-plum:not(.btn-outline).disabled:focus, .btn.purple-plum:not(.btn-outline).disabled.focus, .btn.purple-plum:not(.btn-outline)[disabled]:hover, .btn.purple-plum:not(.btn-outline)[disabled]:focus, .btn.purple-plum:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.purple-plum:not(.btn-outline):hover, fieldset[disabled] .btn.purple-plum:not(.btn-outline):focus, fieldset[disabled] .btn.purple-plum:not(.btn-outline).focus { background-color: #8775a7; border-color: #8775a7; } .btn.purple-plum:not(.btn-outline) .badge { color: #8775a7; background-color: #ffffff; } .btn.btn-outline.purple-plum { border-color: #8775a7; color: #8775a7; background: none; } .btn.btn-outline.purple-plum:hover, .btn.btn-outline.purple-plum:active, .btn.btn-outline.purple-plum:active:hover, .btn.btn-outline.purple-plum:active:focus, .btn.btn-outline.purple-plum:focus, .btn.btn-outline.purple-plum.active { border-color: #8775a7; color: #ffffff; background-color: #8775a7; } .btn.purple-plum-stripe { border-left: 4px solid #8775a7 !important; } .btn.purple-medium:not(.btn-outline) { color: #ffffff; background-color: #BF55EC; border-color: #BF55EC; } .btn.purple-medium:not(.btn-outline):focus, .btn.purple-medium:not(.btn-outline).focus { color: #ffffff; background-color: #ae27e7; border-color: #8013ae; } .btn.purple-medium:not(.btn-outline):hover { color: #ffffff; background-color: #ae27e7; border-color: #aa1ee6; } .btn.purple-medium:not(.btn-outline):active, .btn.purple-medium:not(.btn-outline).active, .open > .btn.purple-medium:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #ae27e7; border-color: #aa1ee6; } .btn.purple-medium:not(.btn-outline):active:hover, .btn.purple-medium:not(.btn-outline):active:focus, .btn.purple-medium:not(.btn-outline):active.focus, .btn.purple-medium:not(.btn-outline).active:hover, .btn.purple-medium:not(.btn-outline).active:focus, .btn.purple-medium:not(.btn-outline).active.focus, .open > .btn.purple-medium:not(.btn-outline).dropdown-toggle:hover, .open > .btn.purple-medium:not(.btn-outline).dropdown-toggle:focus, .open > .btn.purple-medium:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #9b18d3; border-color: #8013ae; } .btn.purple-medium:not(.btn-outline):active, .btn.purple-medium:not(.btn-outline).active, .open > .btn.purple-medium:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.purple-medium:not(.btn-outline).disabled:hover, .btn.purple-medium:not(.btn-outline).disabled:focus, .btn.purple-medium:not(.btn-outline).disabled.focus, .btn.purple-medium:not(.btn-outline)[disabled]:hover, .btn.purple-medium:not(.btn-outline)[disabled]:focus, .btn.purple-medium:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.purple-medium:not(.btn-outline):hover, fieldset[disabled] .btn.purple-medium:not(.btn-outline):focus, fieldset[disabled] .btn.purple-medium:not(.btn-outline).focus { background-color: #BF55EC; border-color: #BF55EC; } .btn.purple-medium:not(.btn-outline) .badge { color: #BF55EC; background-color: #ffffff; } .btn.btn-outline.purple-medium { border-color: #BF55EC; color: #BF55EC; background: none; } .btn.btn-outline.purple-medium:hover, .btn.btn-outline.purple-medium:active, .btn.btn-outline.purple-medium:active:hover, .btn.btn-outline.purple-medium:active:focus, .btn.btn-outline.purple-medium:focus, .btn.btn-outline.purple-medium.active { border-color: #BF55EC; color: #ffffff; background-color: #BF55EC; } .btn.purple-medium-stripe { border-left: 4px solid #BF55EC !important; } .btn.purple-studio:not(.btn-outline) { color: #ffffff; background-color: #8E44AD; border-color: #8E44AD; } .btn.purple-studio:not(.btn-outline):focus, .btn.purple-studio:not(.btn-outline).focus { color: #ffffff; background-color: #703688; border-color: #432051; } .btn.purple-studio:not(.btn-outline):hover { color: #ffffff; background-color: #703688; border-color: #6a3381; } .btn.purple-studio:not(.btn-outline):active, .btn.purple-studio:not(.btn-outline).active, .open > .btn.purple-studio:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #703688; border-color: #6a3381; } .btn.purple-studio:not(.btn-outline):active:hover, .btn.purple-studio:not(.btn-outline):active:focus, .btn.purple-studio:not(.btn-outline):active.focus, .btn.purple-studio:not(.btn-outline).active:hover, .btn.purple-studio:not(.btn-outline).active:focus, .btn.purple-studio:not(.btn-outline).active.focus, .open > .btn.purple-studio:not(.btn-outline).dropdown-toggle:hover, .open > .btn.purple-studio:not(.btn-outline).dropdown-toggle:focus, .open > .btn.purple-studio:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #5b2c6f; border-color: #432051; } .btn.purple-studio:not(.btn-outline):active, .btn.purple-studio:not(.btn-outline).active, .open > .btn.purple-studio:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.purple-studio:not(.btn-outline).disabled:hover, .btn.purple-studio:not(.btn-outline).disabled:focus, .btn.purple-studio:not(.btn-outline).disabled.focus, .btn.purple-studio:not(.btn-outline)[disabled]:hover, .btn.purple-studio:not(.btn-outline)[disabled]:focus, .btn.purple-studio:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.purple-studio:not(.btn-outline):hover, fieldset[disabled] .btn.purple-studio:not(.btn-outline):focus, fieldset[disabled] .btn.purple-studio:not(.btn-outline).focus { background-color: #8E44AD; border-color: #8E44AD; } .btn.purple-studio:not(.btn-outline) .badge { color: #8E44AD; background-color: #ffffff; } .btn.btn-outline.purple-studio { border-color: #8E44AD; color: #8E44AD; background: none; } .btn.btn-outline.purple-studio:hover, .btn.btn-outline.purple-studio:active, .btn.btn-outline.purple-studio:active:hover, .btn.btn-outline.purple-studio:active:focus, .btn.btn-outline.purple-studio:focus, .btn.btn-outline.purple-studio.active { border-color: #8E44AD; color: #ffffff; background-color: #8E44AD; } .btn.purple-studio-stripe { border-left: 4px solid #8E44AD !important; } .btn.purple-wisteria:not(.btn-outline) { color: #ffffff; background-color: #9B59B6; border-color: #9B59B6; } .btn.purple-wisteria:not(.btn-outline):focus, .btn.purple-wisteria:not(.btn-outline).focus { color: #ffffff; background-color: #804399; border-color: #532c64; } .btn.purple-wisteria:not(.btn-outline):hover { color: #ffffff; background-color: #804399; border-color: #7a4092; } .btn.purple-wisteria:not(.btn-outline):active, .btn.purple-wisteria:not(.btn-outline).active, .open > .btn.purple-wisteria:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #804399; border-color: #7a4092; } .btn.purple-wisteria:not(.btn-outline):active:hover, .btn.purple-wisteria:not(.btn-outline):active:focus, .btn.purple-wisteria:not(.btn-outline):active.focus, .btn.purple-wisteria:not(.btn-outline).active:hover, .btn.purple-wisteria:not(.btn-outline).active:focus, .btn.purple-wisteria:not(.btn-outline).active.focus, .open > .btn.purple-wisteria:not(.btn-outline).dropdown-toggle:hover, .open > .btn.purple-wisteria:not(.btn-outline).dropdown-toggle:focus, .open > .btn.purple-wisteria:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #6b3880; border-color: #532c64; } .btn.purple-wisteria:not(.btn-outline):active, .btn.purple-wisteria:not(.btn-outline).active, .open > .btn.purple-wisteria:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.purple-wisteria:not(.btn-outline).disabled:hover, .btn.purple-wisteria:not(.btn-outline).disabled:focus, .btn.purple-wisteria:not(.btn-outline).disabled.focus, .btn.purple-wisteria:not(.btn-outline)[disabled]:hover, .btn.purple-wisteria:not(.btn-outline)[disabled]:focus, .btn.purple-wisteria:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.purple-wisteria:not(.btn-outline):hover, fieldset[disabled] .btn.purple-wisteria:not(.btn-outline):focus, fieldset[disabled] .btn.purple-wisteria:not(.btn-outline).focus { background-color: #9B59B6; border-color: #9B59B6; } .btn.purple-wisteria:not(.btn-outline) .badge { color: #9B59B6; background-color: #ffffff; } .btn.btn-outline.purple-wisteria { border-color: #9B59B6; color: #9B59B6; background: none; } .btn.btn-outline.purple-wisteria:hover, .btn.btn-outline.purple-wisteria:active, .btn.btn-outline.purple-wisteria:active:hover, .btn.btn-outline.purple-wisteria:active:focus, .btn.btn-outline.purple-wisteria:focus, .btn.btn-outline.purple-wisteria.active { border-color: #9B59B6; color: #ffffff; background-color: #9B59B6; } .btn.purple-wisteria-stripe { border-left: 4px solid #9B59B6 !important; } .btn.purple-seance:not(.btn-outline) { color: #ffffff; background-color: #9A12B3; border-color: #9A12B3; } .btn.purple-seance:not(.btn-outline):focus, .btn.purple-seance:not(.btn-outline).focus { color: #ffffff; background-color: #720d85; border-color: #36063f; } .btn.purple-seance:not(.btn-outline):hover { color: #ffffff; background-color: #720d85; border-color: #6a0c7b; } .btn.purple-seance:not(.btn-outline):active, .btn.purple-seance:not(.btn-outline).active, .open > .btn.purple-seance:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #720d85; border-color: #6a0c7b; } .btn.purple-seance:not(.btn-outline):active:hover, .btn.purple-seance:not(.btn-outline):active:focus, .btn.purple-seance:not(.btn-outline):active.focus, .btn.purple-seance:not(.btn-outline).active:hover, .btn.purple-seance:not(.btn-outline).active:focus, .btn.purple-seance:not(.btn-outline).active.focus, .open > .btn.purple-seance:not(.btn-outline).dropdown-toggle:hover, .open > .btn.purple-seance:not(.btn-outline).dropdown-toggle:focus, .open > .btn.purple-seance:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #560a64; border-color: #36063f; } .btn.purple-seance:not(.btn-outline):active, .btn.purple-seance:not(.btn-outline).active, .open > .btn.purple-seance:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.purple-seance:not(.btn-outline).disabled:hover, .btn.purple-seance:not(.btn-outline).disabled:focus, .btn.purple-seance:not(.btn-outline).disabled.focus, .btn.purple-seance:not(.btn-outline)[disabled]:hover, .btn.purple-seance:not(.btn-outline)[disabled]:focus, .btn.purple-seance:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.purple-seance:not(.btn-outline):hover, fieldset[disabled] .btn.purple-seance:not(.btn-outline):focus, fieldset[disabled] .btn.purple-seance:not(.btn-outline).focus { background-color: #9A12B3; border-color: #9A12B3; } .btn.purple-seance:not(.btn-outline) .badge { color: #9A12B3; background-color: #ffffff; } .btn.btn-outline.purple-seance { border-color: #9A12B3; color: #9A12B3; background: none; } .btn.btn-outline.purple-seance:hover, .btn.btn-outline.purple-seance:active, .btn.btn-outline.purple-seance:active:hover, .btn.btn-outline.purple-seance:active:focus, .btn.btn-outline.purple-seance:focus, .btn.btn-outline.purple-seance.active { border-color: #9A12B3; color: #ffffff; background-color: #9A12B3; } .btn.purple-seance-stripe { border-left: 4px solid #9A12B3 !important; } .btn.purple-intense:not(.btn-outline) { color: #ffffff; background-color: #8775a7; border-color: #8775a7; } .btn.purple-intense:not(.btn-outline):focus, .btn.purple-intense:not(.btn-outline).focus { color: #ffffff; background-color: #6d5b8e; border-color: #493d60; } .btn.purple-intense:not(.btn-outline):hover { color: #ffffff; background-color: #6d5b8e; border-color: #685788; } .btn.purple-intense:not(.btn-outline):active, .btn.purple-intense:not(.btn-outline).active, .open > .btn.purple-intense:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #6d5b8e; border-color: #685788; } .btn.purple-intense:not(.btn-outline):active:hover, .btn.purple-intense:not(.btn-outline):active:focus, .btn.purple-intense:not(.btn-outline):active.focus, .btn.purple-intense:not(.btn-outline).active:hover, .btn.purple-intense:not(.btn-outline).active:focus, .btn.purple-intense:not(.btn-outline).active.focus, .open > .btn.purple-intense:not(.btn-outline).dropdown-toggle:hover, .open > .btn.purple-intense:not(.btn-outline).dropdown-toggle:focus, .open > .btn.purple-intense:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #5d4d78; border-color: #493d60; } .btn.purple-intense:not(.btn-outline):active, .btn.purple-intense:not(.btn-outline).active, .open > .btn.purple-intense:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.purple-intense:not(.btn-outline).disabled:hover, .btn.purple-intense:not(.btn-outline).disabled:focus, .btn.purple-intense:not(.btn-outline).disabled.focus, .btn.purple-intense:not(.btn-outline)[disabled]:hover, .btn.purple-intense:not(.btn-outline)[disabled]:focus, .btn.purple-intense:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.purple-intense:not(.btn-outline):hover, fieldset[disabled] .btn.purple-intense:not(.btn-outline):focus, fieldset[disabled] .btn.purple-intense:not(.btn-outline).focus { background-color: #8775a7; border-color: #8775a7; } .btn.purple-intense:not(.btn-outline) .badge { color: #8775a7; background-color: #ffffff; } .btn.btn-outline.purple-intense { border-color: #8775a7; color: #8775a7; background: none; } .btn.btn-outline.purple-intense:hover, .btn.btn-outline.purple-intense:active, .btn.btn-outline.purple-intense:active:hover, .btn.btn-outline.purple-intense:active:focus, .btn.btn-outline.purple-intense:focus, .btn.btn-outline.purple-intense.active { border-color: #8775a7; color: #ffffff; background-color: #8775a7; } .btn.purple-intense-stripe { border-left: 4px solid #8775a7 !important; } .btn.purple-sharp:not(.btn-outline) { color: #ffffff; background-color: #796799; border-color: #796799; } .btn.purple-sharp:not(.btn-outline):focus, .btn.purple-sharp:not(.btn-outline).focus { color: #ffffff; background-color: #61527b; border-color: #3d344d; } .btn.purple-sharp:not(.btn-outline):hover { color: #ffffff; background-color: #61527b; border-color: #5c4e75; } .btn.purple-sharp:not(.btn-outline):active, .btn.purple-sharp:not(.btn-outline).active, .open > .btn.purple-sharp:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #61527b; border-color: #5c4e75; } .btn.purple-sharp:not(.btn-outline):active:hover, .btn.purple-sharp:not(.btn-outline):active:focus, .btn.purple-sharp:not(.btn-outline):active.focus, .btn.purple-sharp:not(.btn-outline).active:hover, .btn.purple-sharp:not(.btn-outline).active:focus, .btn.purple-sharp:not(.btn-outline).active.focus, .open > .btn.purple-sharp:not(.btn-outline).dropdown-toggle:hover, .open > .btn.purple-sharp:not(.btn-outline).dropdown-toggle:focus, .open > .btn.purple-sharp:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #504465; border-color: #3d344d; } .btn.purple-sharp:not(.btn-outline):active, .btn.purple-sharp:not(.btn-outline).active, .open > .btn.purple-sharp:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.purple-sharp:not(.btn-outline).disabled:hover, .btn.purple-sharp:not(.btn-outline).disabled:focus, .btn.purple-sharp:not(.btn-outline).disabled.focus, .btn.purple-sharp:not(.btn-outline)[disabled]:hover, .btn.purple-sharp:not(.btn-outline)[disabled]:focus, .btn.purple-sharp:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.purple-sharp:not(.btn-outline):hover, fieldset[disabled] .btn.purple-sharp:not(.btn-outline):focus, fieldset[disabled] .btn.purple-sharp:not(.btn-outline).focus { background-color: #796799; border-color: #796799; } .btn.purple-sharp:not(.btn-outline) .badge { color: #796799; background-color: #ffffff; } .btn.btn-outline.purple-sharp { border-color: #796799; color: #796799; background: none; } .btn.btn-outline.purple-sharp:hover, .btn.btn-outline.purple-sharp:active, .btn.btn-outline.purple-sharp:active:hover, .btn.btn-outline.purple-sharp:active:focus, .btn.btn-outline.purple-sharp:focus, .btn.btn-outline.purple-sharp.active { border-color: #796799; color: #ffffff; background-color: #796799; } .btn.purple-sharp-stripe { border-left: 4px solid #796799 !important; } .btn.purple-soft:not(.btn-outline) { color: #ffffff; background-color: #8877a9; border-color: #8877a9; } .btn.purple-soft:not(.btn-outline):focus, .btn.purple-soft:not(.btn-outline).focus { color: #ffffff; background-color: #6e5c91; border-color: #4a3e62; } .btn.purple-soft:not(.btn-outline):hover { color: #ffffff; background-color: #6e5c91; border-color: #69588b; } .btn.purple-soft:not(.btn-outline):active, .btn.purple-soft:not(.btn-outline).active, .open > .btn.purple-soft:not(.btn-outline).dropdown-toggle { color: #ffffff; background-color: #6e5c91; border-color: #69588b; } .btn.purple-soft:not(.btn-outline):active:hover, .btn.purple-soft:not(.btn-outline):active:focus, .btn.purple-soft:not(.btn-outline):active.focus, .btn.purple-soft:not(.btn-outline).active:hover, .btn.purple-soft:not(.btn-outline).active:focus, .btn.purple-soft:not(.btn-outline).active.focus, .open > .btn.purple-soft:not(.btn-outline).dropdown-toggle:hover, .open > .btn.purple-soft:not(.btn-outline).dropdown-toggle:focus, .open > .btn.purple-soft:not(.btn-outline).dropdown-toggle.focus { color: #ffffff; background-color: #5d4e7b; border-color: #4a3e62; } .btn.purple-soft:not(.btn-outline):active, .btn.purple-soft:not(.btn-outline).active, .open > .btn.purple-soft:not(.btn-outline).dropdown-toggle { background-image: none; } .btn.purple-soft:not(.btn-outline).disabled:hover, .btn.purple-soft:not(.btn-outline).disabled:focus, .btn.purple-soft:not(.btn-outline).disabled.focus, .btn.purple-soft:not(.btn-outline)[disabled]:hover, .btn.purple-soft:not(.btn-outline)[disabled]:focus, .btn.purple-soft:not(.btn-outline)[disabled].focus, fieldset[disabled] .btn.purple-soft:not(.btn-outline):hover, fieldset[disabled] .btn.purple-soft:not(.btn-outline):focus, fieldset[disabled] .btn.purple-soft:not(.btn-outline).focus { background-color: #8877a9; border-color: #8877a9; } .btn.purple-soft:not(.btn-outline) .badge { color: #8877a9; background-color: #ffffff; } .btn.btn-outline.purple-soft { border-color: #8877a9; color: #8877a9; background: none; } .btn.btn-outline.purple-soft:hover, .btn.btn-outline.purple-soft:active, .btn.btn-outline.purple-soft:active:hover, .btn.btn-outline.purple-soft:active:focus, .btn.btn-outline.purple-soft:focus, .btn.btn-outline.purple-soft.active { border-color: #8877a9; color: #ffffff; background-color: #8877a9; } .btn.purple-soft-stripe { border-left: 4px solid #8877a9 !important; } /* Circle Buttons */ .btn-circle { border-radius: 25px !important; overflow: hidden; } .btn-circle-right { border-radius: 0 25px 25px 0 !important; } .btn-circle-left { border-radius: 25px 0 0 25px !important; } .btn-circle-bottom { border-radius: 0 0 25px 25px !important; } .btn-circle-top { border-radius: 25px 25px 0 0 !important; } .btn-icon-only { height: 34px; width: 34px; text-align: center; padding-left: 0; padding-right: 0; } .btn-icon-only > [class^="icon-"], .btn-icon-only > i { text-align: center; margin-top: 2px; } .btn-group.btn-group-circle > .btn:first-child { border-radius: 25px 0 0 25px !important; } .btn-group.btn-group-circle > .btn:last-child { border-radius: 0 25px 25px 0 !important; } .btn-group.btn-group-devided > .btn { margin-right: 5px; } .btn-group.btn-group-devided > .btn:last-child { margin-right: 0; } .btn-group-vertical.btn-group-vertical-circle > .btn:first-child { border-radius: 25px 25px 0 0 !important; } .btn-group-vertical.btn-group-vertical-circle > .btn:last-child { border-radius: 0 0 25px 25px !important; } /*** Image Carousel ***/ .carousel.image-carousel .carousel-inner { padding-top: 0; padding-bottom: 0; } .carousel.image-carousel .carousel-control i { position: absolute; top: 40%; } .carousel.image-carousel.image-carousel-hoverable .carousel-control i { display: none; } .carousel.image-carousel.image-carousel-hoverable:hover .carousel-control i { display: inline-block; } .carousel.image-carousel .carousel-control.left i { left: 10px; } .carousel.image-carousel .carousel-control.right i { right: 10px; } .carousel.image-carousel .carousel-indicators { margin-top: 10px; bottom: -7px; } .carousel.image-carousel .carousel-indicators li { background-color: #666; } .carousel.image-carousel .carousel-indicators li.active { background-color: #666; } .carousel.image-carousel .carousel-caption { position: absolute; right: 0; bottom: 0; left: 0; padding: 15px 15px 25px 15px; background: #333333; background: rgba(0, 0, 0, 0.75); } .carousel.image-carousel .carousel-caption h4, .carousel.image-carousel .carousel-caption h3, .carousel.image-carousel .carousel-caption h2, .carousel.image-carousel .carousel-caption p { text-align: left; line-height: 20px; color: #ffffff; } .carousel.image-carousel .carousel-caption h4, .carousel.image-carousel .carousel-caption h3, .carousel.image-carousel .carousel-caption h2 { margin: 0 0 5px; } .carousel.image-carousel .carousel-caption h4 a, .carousel.image-carousel .carousel-caption h3 a, .carousel.image-carousel .carousel-caption h2 a { color: #aaa; } .carousel.image-carousel .carousel-caption p { margin-bottom: 0; } .carousel.image-carousel .carousel-caption .item { margin: 0; } /*** Charts and statistics ***/ .chart, .pie, .bars { overflow: hidden; height: 300px; width: 100%; font-family: "Open Sans", sans-serif !important; font-size: 14px; } /*** Statistic lists ***/ .item-list.table .percent { width: 30px; float: right; margin-right: 10px; margin-top: 3px; } /*** Chart tooltips ***/ .chart-tooltip { clear: both; z-index: 100; background-color: #736e6e !important; padding: 5px !important; color: #fff; } .chart-tooltip .label { clear: both; display: block; margin-bottom: 2px; } /*** Mini chart containers ***/ .bar-chart, .line-chart { display: none; } /*** Chats ***/ .chats { margin: 0; padding: 0; margin-top: -15px; } .chats li { list-style: none; padding: 5px 0; margin: 10px auto; font-size: 12px; } .chats li .body { display: block; } .chats li .avatar { height: 45px; width: 45px; -webkit-border-radius: 50% !important; -moz-border-radius: 50% !important; border-radius: 50% !important; } .chats li.in .avatar { float: left; margin-right: 10px; } .chats li.out .avatar { float: right; margin-left: 10px; } .chats li .name { color: #3590c1; font-size: 13px; font-weight: 400; } .chats li .datetime { color: #333; font-size: 13px; font-weight: 400; } .chats li .message { display: block; padding: 5px; position: relative; } .chats li.in .message { text-align: left; border-left: 2px solid #1BBC9B; margin-left: 65px; background: #fafafa; } .chats li.in .message .arrow { display: block; position: absolute; top: 5px; left: -8px; width: 0; height: 0; border-top: 8px solid transparent; border-bottom: 8px solid transparent; border-right: 8px solid #1BBC9B; } .chats li.out .message { border-right: 2px solid #F3565D; margin-right: 65px; background: #fafafa; text-align: right; } .chats li.out .message .arrow { display: block; position: absolute; top: 5px; right: -8px; border-top: 8px solid transparent; border-bottom: 8px solid transparent; border-left: 8px solid #F3565D; } .chats li.out .name, .chats li.out .datetime { text-align: right; } .chat-form { margin-top: 15px; padding: 10px; background-color: #e9eff3; overflow: hidden; clear: both; } .chat-form .input-cont { margin-right: 40px; } .chat-form .input-cont .form-control { border: 1px solid #ddd; width: 100% !important; margin-top: 0; background-color: #fff !important; } .chat-form .input-cont .form-control:focus { border: 1px solid #4b8df9 !important; } .chat-form .btn-cont { margin-top: -41px; position: relative; float: right; width: 44px; } .chat-form .btn-cont .arrow { position: absolute; top: 17px; right: 43px; border-top: 8px solid transparent; border-bottom: 8px solid transparent; border-right: 8px solid #4d90fe; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .chat-form .btn-cont .btn { margin-top: 7px; } .chat-form .btn-cont:hover .arrow { border-right-color: #0362fd; transition: all 0.3s; } .chat-form .btn-cont:hover .btn { background-color: #0362fd; transition: all 0.3s; } /*** Customized Bootstrap Close Icon ***/ .close { display: inline-block; margin-top: 0px; margin-right: 0px; width: 9px; height: 9px; background-repeat: no-repeat !important; text-indent: -10000px; outline: none; background-image: url("img/remove-icon-small.png") !important; } /*** Customized Bootstrap Dropdowns ***/ /*** Dropdowns ***/ .dropup.open > .dropdown-toggle, .dropdown.open > .dropdown-toggle { border-color: #ddd; } /*** Dropdown Menu ***/ /*rtl:ignore*/ .dropdown-menu { box-shadow: 5px 5px rgba(102, 102, 102, 0.1); } .dropdown-menu { left: 0/*rtl:auto*/; min-width: 175px; position: absolute; z-index: 1000; display: none; float: left; list-style: none; text-shadow: none; padding: 0px; background-color: #ffffff; margin: 10px 0px 0px 0px; border: 1px solid #eee; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .dropdown-menu li.divider { background: #f1f3f6; } .dropdown-menu li.header { padding: 8px 14px 2px 14px; } .dropdown-menu > li > a { padding: 8px 16px; color: #6f6f6f; text-decoration: none; display: block; clear: both; font-weight: 300; line-height: 18px; white-space: nowrap; } .dropdown-menu > li > a > [class^="fa-"], .dropdown-menu > li > a > [class*=" fa-"] { color: #888; } .dropdown-menu > li > a > [class^="icon-"], .dropdown-menu > li > a > [class*=" icon-"] { color: #666; } .dropdown-menu > li > a > [class^="glyphicon-"], .dropdown-menu > li > a > [class*=" glyphicon-"] { color: #888; } .dropdown-menu > li:hover > a, .dropdown-menu > li.active > a, .dropdown-menu > li.active:hover > a { text-decoration: none; background-image: none; background-color: #f6f6f6; color: #555; filter: none; } .dropdown-menu.bottom-up { top: auto; bottom: 100%; margin-bottom: 2px; } .dropdown-menu.bottom-up:before, .dropdown-menu.bottom-up:after { display: none; } .dropdown-menu > li:first-child:hover > a { border-radius: 4px 4px 0px 0px; } .dropdown-menu > li:last-child:hover > a { border-radius: 0px 0px 4px 4px; } .dropdown-hover:hover > .dropdown-menu { display: block; } .dropdown > .dropdown-menu, .dropdown-toggle > .dropdown-menu, .btn-group > .dropdown-menu { margin-top: 10px; } .dropdown > .dropdown-menu:before, .dropdown-toggle > .dropdown-menu:before, .btn-group > .dropdown-menu:before { position: absolute; top: -8px; left: 9px; right: auto; display: inline-block !important; border-right: 8px solid transparent; border-bottom: 8px solid #e0e0e0; border-left: 8px solid transparent; content: ''; } .dropdown > .dropdown-menu:after, .dropdown-toggle > .dropdown-menu:after, .btn-group > .dropdown-menu:after { position: absolute; top: -7px; left: 10px; right: auto; display: inline-block !important; border-right: 7px solid transparent; border-bottom: 7px solid #fff; border-left: 7px solid transparent; content: ''; } .dropdown > .dropdown-menu.pull-left:before, .dropdown-toggle > .dropdown-menu.pull-left:before, .btn-group > .dropdown-menu.pull-left:before { left: auto; right: 9px; } .dropdown > .dropdown-menu.pull-left:after, .dropdown-toggle > .dropdown-menu.pull-left:after, .btn-group > .dropdown-menu.pull-left:after { left: auto; right: 10px; } .dropdown > .dropdown-menu.pull-right:before, .dropdown-toggle > .dropdown-menu.pull-right:before, .btn-group > .dropdown-menu.pull-right:before { left: auto; right: 9px; } .dropdown > .dropdown-menu.pull-right:after, .dropdown-toggle > .dropdown-menu.pull-right:after, .btn-group > .dropdown-menu.pull-right:after { left: auto; right: 10px; } .dropdown.dropup > .dropdown-menu, .dropdown-toggle.dropup > .dropdown-menu, .btn-group.dropup > .dropdown-menu { margin-top: 0px; margin-bottom: 10px; } .dropdown.dropup > .dropdown-menu:after, .dropdown.dropup > .dropdown-menu:before, .dropdown-toggle.dropup > .dropdown-menu:after, .dropdown-toggle.dropup > .dropdown-menu:before, .btn-group.dropup > .dropdown-menu:after, .btn-group.dropup > .dropdown-menu:before { display: none !important; } .dropdown-toggle:after { display: none; } /* Dropdown submenu support for Bootsrap 3 */ .dropdown-submenu { position: relative; } .dropdown-submenu > .dropdown-menu { top: 5px; left: 100%; margin-top: -6px; margin-left: -1px; } .dropdown-submenu > a:after { position: absolute; display: inline-block; font-size: 14px; right: 7px; top: 7px; font-family: FontAwesome; height: auto; content: "\f105"; font-weight: 300; } .dropdown-submenu:hover > .dropdown-menu { display: block; } .dropdown-submenu:hover > a:after { border-left-color: #ffffff; } .dropdown-submenu.pull-left { float: none; } .dropdown-submenu.pull-left > .dropdown-menu { left: -100%; margin-left: 10px; } .dropup .dropdown-submenu > .dropdown-menu { top: auto; bottom: 0; margin-top: 0; margin-bottom: -2px; } .nav.pull-right > li > .dropdown-menu, .nav > li > .dropdown-menu.pull-right { right: 0; left: auto; } .nav.pull-right > li > .dropdown-menu:before, .nav > li > .dropdown-menu.pull-right:before { right: 12px; left: auto; } .nav.pull-right > li > .dropdown-menu:after, .nav > li > .dropdown-menu.pull-right:after { right: 13px; left: auto; } .nav.pull-right > li > .dropdown-menu .dropdown-menu, .nav > li > .dropdown-menu.pull-right .dropdown-menu { right: 100%; left: auto; margin-right: -1px; margin-left: 0; } @media (max-width: 767px) { /* 767px */ .navbar-nav .open .dropdown-menu { position: absolute; float: left; width: auto; margin-top: 0; background-color: #ffffff; border: 1px solid #efefef; box-shadow: 5px 5px rgba(102, 102, 102, 0.1); } .navbar-nav .open .dropdown-menu > li > a { padding: 6px 0 6px 13px; color: #333; } .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:active { background-color: #eee; } } /*** Dropdown Checkboxes ***/ .dropdown-content { padding: 10px; } .dropdown-content form { margin: 0; } .dropdown.inline .dropdown-menu { display: inline-block; position: relative; } .dropdown-radiobuttons, .dropdown-checkboxes { padding: 5px; } .dropdown-radiobuttons label, .dropdown-checkboxes label { display: block; font-weight: 300; color: #333; margin-bottom: 4px; margin-top: 4px; } .dropdown-radiobuttons label .radio, .dropdown-checkboxes label .radio { margin-right: 3px; } /*-------------------------------------------------- [Dropdown Menu v2] ----------------------------------------------------*/ .dropdown-menu-v2 { top: 100%; right: 0; z-index: 1001; display: none; float: left; min-width: 225px; padding: 20px 0; margin: 25px 0 0; font-size: 13px; text-align: left; list-style: none; position: absolute; background: #242b31; -webkit-border-radius: 2px; -moz-border-radius: 2px; -ms-border-radius: 2px; -o-border-radius: 2px; border-radius: 2px; -webkit-background-clip: padding-box; background-clip: padding-box; transition-duration: 300ms; transition-property: all; transition-timing-function: cubic-bezier(0.7, 1, 0.7, 1); } .dropdown-menu-v2:before { top: -10px; right: 0; width: 0; height: 0; content: ' '; position: absolute; border-style: solid; display: inline-block; border-width: 0 0 15px 15px; border-color: transparent transparent #242b31 transparent; } .dropdown-menu-v2 > li > a { clear: both; color: #606e7a; display: block; font-weight: 600; padding: 8px 20px; position: relative; white-space: nowrap; line-height: 1.42857143; text-transform: uppercase; } .dropdown-menu-v2 > li > a:hover, .dropdown-menu-v2 > li > a:focus { background: #21282e; text-decoration: none; color: #009dc7; } .dropdown-menu-v2 .active > a, .dropdown-menu-v2 .active > a:hover, .dropdown-menu-v2 .active > a:focus, .dropdown-menu-v2 .active > a, .dropdown-menu-v2 .active > a:hover, .dropdown-menu-v2 .active > a:focus, .dropdown-menu-v2 .active > a, .dropdown-menu-v2 .active > a:hover, .dropdown-menu-v2 .active > a:focus { outline: 0; text-decoration: none; background-color: #21282e; color: #009dc7; } .dropdown-menu-v2 .disabled > a, .dropdown-menu-v2 .disabled > a:hover, .dropdown-menu-v2 .disabled > a:focus, .dropdown-menu-v2 .disabled > a, .dropdown-menu-v2 .disabled > a:hover, .dropdown-menu-v2 .disabled > a:focus, .dropdown-menu-v2 .disabled > a, .dropdown-menu-v2 .disabled > a:hover, .dropdown-menu-v2 .disabled > a:focus { color: #009dc7; } .dropdown-menu-v2 .disabled > a:hover, .dropdown-menu-v2 .disabled > a:focus, .dropdown-menu-v2 .disabled > a:hover, .dropdown-menu-v2 .disabled > a:focus { text-decoration: none; cursor: not-allowed; background-color: transparent; background-image: none; } .dropdown-menu-v2 .divider { height: 1px; margin: 9px 0; overflow: hidden; background: #2e353c; } .dropdown-menu-v2 .badge { top: 8px; right: 10px; position: absolute; } .dropdown-menu-v2.pull-right { right: 0; left: auto; } .open > .dropdown-menu-v2 { display: block; } .pull-right > .dropdown-menu-v2 { right: 0; left: auto; } /*** System feeds ***/ .feeds { margin: 0px; padding: 0px; list-style: none; } .feeds li { background-color: #fafafa; color: #82949a; margin-bottom: 7px; } .feeds li:before, .feeds li:after { display: table; line-height: 0; content: ""; } .feeds li:after { clear: both; } .feeds li:last-child { margin-bottom: 0px; } .feeds li .col1 { float: left; width: 100%; clear: both; } .feeds li .col1 > .cont { float: left; margin-right: 75px; overflow: hidden; } .feeds li .col1 > .cont > .cont-col1 { float: left; margin-right: -100%; } .feeds li .col1 > .cont > .cont-col1 > .label { display: inline-block; padding: 5px 4px 6px 5px; vertical-align: middle; text-align: center; } .feeds li .col1 > .cont > .cont-col1 > .label > i { text-align: center; font-size: 14px; } .feeds li .col1 > .cont > .cont-col2 { float: left; width: 100%; } .feeds li .col1 > .cont > .cont-col2 > .desc { margin-left: 35px; padding-top: 4px; padding-bottom: 5px; overflow: hidden; } .feeds li .col2 { float: left; width: 75px; margin-left: -75px; } .feeds li .col2 > .date { padding: 4px 9px 5px 4px; text-align: right; font-style: italic; color: #c1cbd0; } /*** Form Layouts ****/ /* Static info */ .static-info { margin-bottom: 10px; } .static-info .name { font-size: 14px; } .static-info .value { font-size: 14px; font-weight: 600; } .static-info.align-reverse .name, .static-info.align-reverse .value { text-align: right; } /* Help blocks */ .help-block { margin-top: 5px; margin-bottom: 5px; } .help-inline { font-size: 13px; color: #737373; display: inline-block; padding: 5px; } .form-inline input { margin-bottom: 0px !important; } /* Control Label */ .control-label { color: #999999; margin-top: 1px; font-weight: normal; } .control-label .required, .form-group .required { color: #e02222; font-size: 12px; padding-left: 2px; } .form { padding: 0 !important; } .portlet-form .form-body, .form .form-body { padding: 20px; } .portlet.light .portlet-form .form-body, .portlet.light .form .form-body { padding-left: 0; padding-right: 0; } .portlet-form .form-actions, .form .form-actions { padding: 20px 20px; margin: 0; background-color: #f5f5f5; border-top: 1px solid #e7ecf1; *zoom: 1; } .portlet.light .portlet-form .form-actions, .portlet.light .form .form-actions { background: none; padding-left: 0; padding-right: 0; } .portlet-form .form-actions.noborder, .form .form-actions.noborder { border-top: 0; } .portlet .portlet-form .form-actions, .portlet .form .form-actions { -webkit-border-radius: 0 0 4px 4px; -moz-border-radius: 0 0 4px 4px; -ms-border-radius: 0 0 4px 4px; -o-border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px; } .portlet-form .form-actions:before, .portlet-form .form-actions:after, .form .form-actions:before, .form .form-actions:after { content: " "; display: table; } .portlet-form .form-actions:after, .form .form-actions:after { clear: both; } .portlet-form .form-actions.right, .form .form-actions.right { padding-left: 0; padding-right: 20px; text-align: right; } .portlet.light .portlet-form .form-actions.right, .portlet.light .form .form-actions.right { padding-right: 0; } .portlet-form .form-actions.left, .form .form-actions.left { padding-left: 20px; padding-right: 0; text-align: left; } .portlet.light .portlet-form .form-actions.left, .portlet.light .form .form-actions.left { padding-left: 0; } .portlet-form .form-actions.nobg, .form .form-actions.nobg { background-color: transparent; } .portlet-form .form-actions.top, .form .form-actions.top { margin-top: 0; margin-bottom: 20px; border-top: 0; border-bottom: 1px solid #e7ecf1; } .portlet.light .portlet-form .form-actions.top, .portlet.light .form .form-actions.top { background: none; } .portlet-form .form-actions .btn-set, .form .form-actions .btn-set { display: inline-block; } @media (max-width: 767px) { .portlet-form .form-actions, .form .form-actions { /* 767px */ } .portlet-form .form-actions .btn-set, .form .form-actions .btn-set { margin-bottom: 3px; margin-top: 3px; float: left !important; } } .portlet-form .form-section, .form .form-section { margin: 30px 0px 30px 0px; padding-bottom: 5px; border-bottom: 1px solid #e7ecf1; } .form-fit .portlet-form .form-section, .form-fit .form .form-section { margin-left: 20px; margin-right: 20px; } /* Checkboxes */ .checkbox, .form-horizontal .checkbox { padding: 0; } .checkbox > label, .form-horizontal .checkbox > label { padding-left: 0; } .checkbox-list > label { display: block; } .checkbox-list > label.checkbox-inline { display: inline-block; } .checkbox-list > label.checkbox-inline:first-child { padding-left: 0; } /* Radio buttons */ .radio-list > label { display: block; } .radio-list > label.radio-inline { display: inline-block; } .radio-list > label.radio-inline:first-child { padding-left: 0; } /* Radio buttons in horizontal forms */ .form-horizontal .radio-list .radio { padding-top: 1px; } .form-horizontal .radio-list > label { margin-bottom: 0; } .form-horizontal .radio > span { margin-top: 2px; } /* Rows seperated form layout */ .form .form-row-seperated .portlet-body { padding: 0; } .form .form-row-seperated .form-group { margin: 0; border-bottom: 1px solid #efefef; padding: 15px 0; } .form .form-row-seperated .form-group.last { border-bottom: 0; margin-bottom: 0; padding-bottom: 13px; } .form .form-row-seperated .form-group .help-block { margin-bottom: 0; } .form .form-row-seperated .form-body { padding: 0; } .form .form-row-seperated .form-actions { padding-left: 15px !important; padding-right: 15px !important; } /* Form bordered */ .form .form-bordered .form-group { margin: 0; border-bottom: 1px solid #efefef; } .form .form-bordered .form-group > div { padding: 15px; border-left: 1px solid #efefef; } @media (max-width: 991px) { .form .form-bordered .form-group > div { /* 991px */ border-left: 0; } } .form .form-bordered .form-group.last { border-bottom: 0; } .form .form-bordered .form-group .control-label { padding-top: 20px; } @media (max-width: 991px) { .form .form-bordered .form-group .control-label { /* 991px */ padding-top: 10px; } } .form .form-bordered .form-group .help-block { margin-bottom: 0; } .form .form-bordered .form-group .form-control { margin: 0; } .form .form-bordered .form-body { margin: 0; padding: 0; } .form .form-bordered .form-actions { margin-top: 0; padding-left: 16px !important; padding-right: 16px !important; } @media (max-width: 991px) { .form .form-bordered .form-actions { /* 991px */ padding-left: 15px !important; padding-right: 15px !important; } } /* Horizontal bordered form */ .form .form-horizontal.form-bordered.form-row-stripped .form-group:nth-child(even) { background-color: #fcfcfc; } .form .form-horizontal.form-bordered.form-row-stripped .form-control { background: #fff !important; } .form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) { background-color: #fcfcfc; } .form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) > div { background-color: #ffffff; } .form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) { background-color: #fcfcfc; } /* Horizontal form small input issue */ .form-horizontal .form-group .input-sm { margin-top: 3px; } /*** Forms ***/ .form-control { outline: none !important; box-shadow: none !important; } .form-control.height-auto { height: auto; } .input-group-addon > i { color: #c5cdda; } /*** Custom color buttons ***/ .form-control.white { border-color: #ffffff; } .form-control.white:focus { border-color: #e6e6e6; } .form-control.focus-white:focus { border-color: #ffffff; } .form-control.default { border-color: #e1e5ec; } .form-control.default:focus { border-color: #c2cad8; } .form-control.focus-default:focus { border-color: #e1e5ec; } .form-control.dark { border-color: #2f353b; } .form-control.dark:focus { border-color: #181c1f; } .form-control.focus-dark:focus { border-color: #2f353b; } .form-control.blue { border-color: #3598dc; } .form-control.blue:focus { border-color: #217ebd; } .form-control.focus-blue:focus { border-color: #3598dc; } .form-control.blue-madison { border-color: #578ebe; } .form-control.blue-madison:focus { border-color: #3f74a3; } .form-control.focus-blue-madison:focus { border-color: #578ebe; } .form-control.blue-chambray { border-color: #2C3E50; } .form-control.blue-chambray:focus { border-color: #1a252f; } .form-control.focus-blue-chambray:focus { border-color: #2C3E50; } .form-control.blue-ebonyclay { border-color: #22313F; } .form-control.blue-ebonyclay:focus { border-color: #10171e; } .form-control.focus-blue-ebonyclay:focus { border-color: #22313F; } .form-control.blue-hoki { border-color: #67809F; } .form-control.blue-hoki:focus { border-color: #526781; } .form-control.focus-blue-hoki:focus { border-color: #67809F; } .form-control.blue-steel { border-color: #4B77BE; } .form-control.blue-steel:focus { border-color: #395f9d; } .form-control.focus-blue-steel:focus { border-color: #4B77BE; } .form-control.blue-soft { border-color: #4c87b9; } .form-control.blue-soft:focus { border-color: #3b6d97; } .form-control.focus-blue-soft:focus { border-color: #4c87b9; } .form-control.blue-dark { border-color: #5e738b; } .form-control.blue-dark:focus { border-color: #495a6d; } .form-control.focus-blue-dark:focus { border-color: #5e738b; } .form-control.blue-sharp { border-color: #5C9BD1; } .form-control.blue-sharp:focus { border-color: #3782c3; } .form-control.focus-blue-sharp:focus { border-color: #5C9BD1; } .form-control.green { border-color: #32c5d2; } .form-control.green:focus { border-color: #26a1ab; } .form-control.focus-green:focus { border-color: #32c5d2; } .form-control.green-meadow { border-color: #1BBC9B; } .form-control.green-meadow:focus { border-color: #158f76; } .form-control.focus-green-meadow:focus { border-color: #1BBC9B; } .form-control.green-seagreen { border-color: #1BA39C; } .form-control.green-seagreen:focus { border-color: #147772; } .form-control.focus-green-seagreen:focus { border-color: #1BA39C; } .form-control.green-turquoise { border-color: #36D7B7; } .form-control.green-turquoise:focus { border-color: #24b699; } .form-control.focus-green-turquoise:focus { border-color: #36D7B7; } .form-control.green-haze { border-color: #44b6ae; } .form-control.green-haze:focus { border-color: #36918b; } .form-control.focus-green-haze:focus { border-color: #44b6ae; } .form-control.green-jungle { border-color: #26C281; } .form-control.green-jungle:focus { border-color: #1e9765; } .form-control.focus-green-jungle:focus { border-color: #26C281; } .form-control.green-soft { border-color: #3faba4; } .form-control.green-soft:focus { border-color: #318680; } .form-control.focus-green-soft:focus { border-color: #3faba4; } .form-control.green-dark { border-color: #4DB3A2; } .form-control.green-dark:focus { border-color: #3d9082; } .form-control.focus-green-dark:focus { border-color: #4DB3A2; } .form-control.green-sharp { border-color: #2ab4c0; } .form-control.green-sharp:focus { border-color: #218d96; } .form-control.focus-green-sharp:focus { border-color: #2ab4c0; } .form-control.grey { border-color: #E5E5E5; } .form-control.grey:focus { border-color: #cccccc; } .form-control.focus-grey:focus { border-color: #E5E5E5; } .form-control.grey-steel { border-color: #e9edef; } .form-control.grey-steel:focus { border-color: #cbd5da; } .form-control.focus-grey-steel:focus { border-color: #e9edef; } .form-control.grey-cararra { border-color: #fafafa; } .form-control.grey-cararra:focus { border-color: #e1e1e1; } .form-control.focus-grey-cararra:focus { border-color: #fafafa; } .form-control.grey-gallery { border-color: #555555; } .form-control.grey-gallery:focus { border-color: #3c3c3c; } .form-control.focus-grey-gallery:focus { border-color: #555555; } .form-control.grey-cascade { border-color: #95A5A6; } .form-control.grey-cascade:focus { border-color: #798d8f; } .form-control.focus-grey-cascade:focus { border-color: #95A5A6; } .form-control.grey-silver { border-color: #BFBFBF; } .form-control.grey-silver:focus { border-color: #a6a6a6; } .form-control.focus-grey-silver:focus { border-color: #BFBFBF; } .form-control.grey-salsa { border-color: #ACB5C3; } .form-control.grey-salsa:focus { border-color: #8e9bae; } .form-control.focus-grey-salsa:focus { border-color: #ACB5C3; } .form-control.grey-salt { border-color: #bfcad1; } .form-control.grey-salt:focus { border-color: #a1b1bc; } .form-control.focus-grey-salt:focus { border-color: #bfcad1; } .form-control.grey-mint { border-color: #525e64; } .form-control.grey-mint:focus { border-color: #3b4448; } .form-control.focus-grey-mint:focus { border-color: #525e64; } .form-control.red { border-color: #e7505a; } .form-control.red:focus { border-color: #e12330; } .form-control.focus-red:focus { border-color: #e7505a; } .form-control.red-pink { border-color: #E08283; } .form-control.red-pink:focus { border-color: #d6595a; } .form-control.focus-red-pink:focus { border-color: #E08283; } .form-control.red-sunglo { border-color: #E26A6A; } .form-control.red-sunglo:focus { border-color: #da3f3f; } .form-control.focus-red-sunglo:focus { border-color: #E26A6A; } .form-control.red-intense { border-color: #e35b5a; } .form-control.red-intense:focus { border-color: #dc302e; } .form-control.focus-red-intense:focus { border-color: #e35b5a; } .form-control.red-thunderbird { border-color: #D91E18; } .form-control.red-thunderbird:focus { border-color: #ab1813; } .form-control.focus-red-thunderbird:focus { border-color: #D91E18; } .form-control.red-flamingo { border-color: #EF4836; } .form-control.red-flamingo:focus { border-color: #e02612; } .form-control.focus-red-flamingo:focus { border-color: #EF4836; } .form-control.red-soft { border-color: #d05454; } .form-control.red-soft:focus { border-color: #bd3434; } .form-control.focus-red-soft:focus { border-color: #d05454; } .form-control.red-haze { border-color: #f36a5a; } .form-control.red-haze:focus { border-color: #f03f2a; } .form-control.focus-red-haze:focus { border-color: #f36a5a; } .form-control.red-mint { border-color: #e43a45; } .form-control.red-mint:focus { border-color: #cf1c28; } .form-control.focus-red-mint:focus { border-color: #e43a45; } .form-control.yellow { border-color: #c49f47; } .form-control.yellow:focus { border-color: #a48334; } .form-control.focus-yellow:focus { border-color: #c49f47; } .form-control.yellow-gold { border-color: #E87E04; } .form-control.yellow-gold:focus { border-color: #b66303; } .form-control.focus-yellow-gold:focus { border-color: #E87E04; } .form-control.yellow-casablanca { border-color: #f2784b; } .form-control.yellow-casablanca:focus { border-color: #ef541b; } .form-control.focus-yellow-casablanca:focus { border-color: #f2784b; } .form-control.yellow-crusta { border-color: #f3c200; } .form-control.yellow-crusta:focus { border-color: #c09900; } .form-control.focus-yellow-crusta:focus { border-color: #f3c200; } .form-control.yellow-lemon { border-color: #F7CA18; } .form-control.yellow-lemon:focus { border-color: #d5ab07; } .form-control.focus-yellow-lemon:focus { border-color: #F7CA18; } .form-control.yellow-saffron { border-color: #F4D03F; } .form-control.yellow-saffron:focus { border-color: #f1c40f; } .form-control.focus-yellow-saffron:focus { border-color: #F4D03F; } .form-control.yellow-soft { border-color: #c8d046; } .form-control.yellow-soft:focus { border-color: #adb52e; } .form-control.focus-yellow-soft:focus { border-color: #c8d046; } .form-control.yellow-haze { border-color: #c5bf66; } .form-control.yellow-haze:focus { border-color: #b4ad44; } .form-control.focus-yellow-haze:focus { border-color: #c5bf66; } .form-control.yellow-mint { border-color: #c5b96b; } .form-control.yellow-mint:focus { border-color: #b6a747; } .form-control.focus-yellow-mint:focus { border-color: #c5b96b; } .form-control.purple { border-color: #8E44AD; } .form-control.purple:focus { border-color: #703688; } .form-control.focus-purple:focus { border-color: #8E44AD; } .form-control.purple-plum { border-color: #8775a7; } .form-control.purple-plum:focus { border-color: #6d5b8e; } .form-control.focus-purple-plum:focus { border-color: #8775a7; } .form-control.purple-medium { border-color: #BF55EC; } .form-control.purple-medium:focus { border-color: #ae27e7; } .form-control.focus-purple-medium:focus { border-color: #BF55EC; } .form-control.purple-studio { border-color: #8E44AD; } .form-control.purple-studio:focus { border-color: #703688; } .form-control.focus-purple-studio:focus { border-color: #8E44AD; } .form-control.purple-wisteria { border-color: #9B59B6; } .form-control.purple-wisteria:focus { border-color: #804399; } .form-control.focus-purple-wisteria:focus { border-color: #9B59B6; } .form-control.purple-seance { border-color: #9A12B3; } .form-control.purple-seance:focus { border-color: #720d85; } .form-control.focus-purple-seance:focus { border-color: #9A12B3; } .form-control.purple-intense { border-color: #8775a7; } .form-control.purple-intense:focus { border-color: #6d5b8e; } .form-control.focus-purple-intense:focus { border-color: #8775a7; } .form-control.purple-sharp { border-color: #796799; } .form-control.purple-sharp:focus { border-color: #61527b; } .form-control.focus-purple-sharp:focus { border-color: #796799; } .form-control.purple-soft { border-color: #8877a9; } .form-control.purple-soft:focus { border-color: #6e5c91; } .form-control.focus-purple-soft:focus { border-color: #8877a9; } .input-xxs { width: 45px !important; } /* Form uneditable input */ .uneditable-input { padding: 6px 12px; min-width: 206px; font-size: 14px; font-weight: normal; height: 34px; color: #555555; background-color: #fff; border: 1px solid #c2cad8; -webkit-box-shadow: none; box-shadow: none; -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; } .form-control-static { display: inline-block; margin: 0; } /* Form input sizing */ .input-mini { width: 45px !important; } .input-xsmall { width: 80px !important; } .input-small { width: 145px !important; } .input-medium { width: 240px !important; } .input-large { width: 320px !important; } .input-xlarge { width: 420px !important; } @media (max-width: 768px) { /* 768px */ .input-large { width: 250px !important; } .input-xlarge { width: 300px !important; } } .input-inline { display: inline-block; width: auto; vertical-align: middle; } .input-fixed { overflow: hidden; } .input-fixed { overflow: hidden; } .form-group .input-inline { margin-right: 5px; } @media (max-width: 768px) { /* 768px */ .input-lg { width: 250px !important; } .input-xlg { width: 300px !important; } } /* Circle Inputs */ .input-circle { border-radius: 25px !important; } .input-circle-right { border-radius: 0 25px 25px 0 !important; } .input-circle-left { border-radius: 25px 0 0 25px !important; } .input-circle-bottom { border-radius: 0 0 25px 25px !important; } .input-circle-top { border-radius: 25px 25px 0 0 !important; } .mt-radio, .mt-checkbox { display: inline-block; position: relative; padding-left: 30px; margin-bottom: 15px; cursor: pointer; font-size: 14px; webkit-transition: all 0.3s; -moz-transition: all 0.3s; -ms-transition: all 0.3s; -o-transition: all 0.3s; transition: all 0.3s; } .mt-radio.mt-radio-disabled, .mt-radio.mt-checkbox-disabled, .mt-checkbox.mt-radio-disabled, .mt-checkbox.mt-checkbox-disabled { opacity: 0.6 ; filter: alpha(opacity=60) ; } .mt-radio > input, .mt-checkbox > input { position: absolute; z-index: -1; opacity: 0 ; filter: alpha(opacity=0) ; } .mt-radio > span, .mt-checkbox > span { border: 1px solid transparent; position: absolute; top: 0px; left: 0; height: 19px; width: 19px; background: #E6E6E6; } .mt-radio > span:after, .mt-checkbox > span:after { content: ''; position: absolute; display: none; } .mt-radio:hover > input:not([disabled]) ~ span, .mt-radio > input:focus ~ span, .mt-checkbox:hover > input:not([disabled]) ~ span, .mt-checkbox > input:focus ~ span { background: #d9d9d9; webkit-transition: all 0.3s; -moz-transition: all 0.3s; -ms-transition: all 0.3s; -o-transition: all 0.3s; transition: all 0.3s; } .mt-radio > input:checked ~ span, .mt-checkbox > input:checked ~ span { webkit-transition: all 0.3s; -moz-transition: all 0.3s; -ms-transition: all 0.3s; -o-transition: all 0.3s; transition: all 0.3s; background: #d9d9d9; } .mt-radio > input:checked ~ span:after, .mt-checkbox > input:checked ~ span:after { display: block; } .mt-radio:hover > input:not([disabled]):checked ~ span, .mt-radio > input:checked ~ span, .mt-checkbox:hover > input:not([disabled]):checked ~ span, .mt-checkbox > input:checked ~ span { webkit-transition: all 0.3s; -moz-transition: all 0.3s; -ms-transition: all 0.3s; -o-transition: all 0.3s; transition: all 0.3s; background: #d9d9d9; } .mt-radio > input:disabled ~ span, .mt-checkbox > input:disabled ~ span { opacity: 0.6 ; filter: alpha(opacity=60) ; pointer-events: none; } .mt-radio.mt-radio-outline > span, .mt-radio.mt-checkbox-outline > span, .mt-checkbox.mt-radio-outline > span, .mt-checkbox.mt-checkbox-outline > span { border: 1px solid #d9d9d9; background: none; } .mt-radio.mt-radio-outline:hover > input:not([disabled]) ~ span, .mt-radio.mt-radio-outline > input:focus ~ span, .mt-radio.mt-checkbox-outline:hover > input:not([disabled]) ~ span, .mt-radio.mt-checkbox-outline > input:focus ~ span, .mt-checkbox.mt-radio-outline:hover > input:not([disabled]) ~ span, .mt-checkbox.mt-radio-outline > input:focus ~ span, .mt-checkbox.mt-checkbox-outline:hover > input:not([disabled]) ~ span, .mt-checkbox.mt-checkbox-outline > input:focus ~ span { border: 1px solid #d9d9d9; background: none; } .mt-radio.mt-radio-outline > input:checked ~ span, .mt-radio.mt-checkbox-outline > input:checked ~ span, .mt-checkbox.mt-radio-outline > input:checked ~ span, .mt-checkbox.mt-checkbox-outline > input:checked ~ span { border: 1px solid #d9d9d9; background: none; } .mt-radio.mt-radio-outline:hover > input:not([disabled]):checked ~ span, .mt-radio.mt-radio-outline > input:checked ~ span, .mt-radio.mt-checkbox-outline:hover > input:not([disabled]):checked ~ span, .mt-radio.mt-checkbox-outline > input:checked ~ span, .mt-checkbox.mt-radio-outline:hover > input:not([disabled]):checked ~ span, .mt-checkbox.mt-radio-outline > input:checked ~ span, .mt-checkbox.mt-checkbox-outline:hover > input:not([disabled]):checked ~ span, .mt-checkbox.mt-checkbox-outline > input:checked ~ span { border: 1px solid #d9d9d9; background: none; } .mt-radio > span { -webkit-border-radius: 50%!important; -moz-border-radius: 50%!important; -ms-border-radius: 50%!important; -o-border-radius: 50%!important; border-radius: 50%!important; } .mt-radio > span:after { left: 6px; top: 6px; height: 6px; width: 6px; border-radius: 50%; background: #666666; } .mt-radio > input:disabled ~ span:after { background: #666666; } th > .mt-radio.mt-radio-single, td > .mt-radio.mt-radio-single { right: -5px; } .mt-checkbox > span:after { left: 6px; top: 3px; width: 5px; height: 10px; border: solid #666666; border-width: 0 2px 2px 0; transform: rotate(45deg); } .mt-checkbox > input:disabled ~ span:after { border-color: #666666; } .form-inline .mt-checkbox { margin-left: 15px; margin-right: 15px; } th > .mt-checkbox.mt-checkbox-single, td > .mt-checkbox.mt-checkbox-single { right: -5px; } .mt-checkbox-list, .mt-radio-list { padding: 10px 0; } .form-horizontal .form-group .mt-checkbox-list, .form-horizontal .form-group .mt-radio-list { padding-top: 0; } .mt-checkbox-list .mt-checkbox, .mt-checkbox-list .mt-radio, .mt-radio-list .mt-checkbox, .mt-radio-list .mt-radio { display: block; } .mt-checkbox-inline, .mt-radio-inline { padding: 10px 0; } .form-horizontal .form-group .mt-checkbox-inline, .form-horizontal .form-group .mt-radio-inline { padding-top: 8px; } .mt-checkbox-inline .mt-checkbox, .mt-checkbox-inline .mt-radio, .mt-radio-inline .mt-checkbox, .mt-radio-inline .mt-radio { display: inline-block; margin-right: 15px; } .mt-checkbox-inline .mt-checkbox:last-child, .mt-checkbox-inline .mt-radio:last-child, .mt-radio-inline .mt-checkbox:last-child, .mt-radio-inline .mt-radio:last-child { margin-right: 0; } /*** Custom icon buttons ***/ .icon-btn { height: 60px; min-width: 80px; margin: 5px 5px 0 0; border: 1px solid #ddd; padding: 12px 0px 0px 0px; background-color: #fafafa; background-image: none; filter: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; display: inline-block; color: #646464; text-shadow: none; text-align: center; cursor: pointer; position: relative; -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -ms-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease; } .icon-btn:hover { text-decoration: none; border-color: #999; color: #444; text-shadow: 0 1px 0px white; -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -ms-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .icon-btn:hover > .badge { -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -ms-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .icon-btn > div { margin-top: 5px; margin-bottom: 20px; color: #3f444a; font-size: 12px; font-weight: 300; } .icon-btn > .badge { position: absolute; font-size: 11px; font-weight: 300; top: -5px; right: -5px; padding: 3px 6px 3px 6px; color: white; text-shadow: none; border-width: 0; border-style: solid; -webkit-border-radius: 12px; -moz-border-radius: 12px; border-radius: 12px; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .icon-btn > i { font-size: 18px; } .ie8 .icon-btn:hover { filter: none; } /*** Input icons ***/ .input-icon { position: relative; left: 0; } .input-icon > .form-control { padding-left: 33px; } .input-group .input-icon > .form-control { -webkit-border-radius: 4px 0 0 4px; -moz-border-radius: 4px 0 0 4px; -ms-border-radius: 4px 0 0 4px; -o-border-radius: 4px 0 0 4px; border-radius: 4px 0 0 4px; } .input-icon > i { color: #ccc; display: block; position: absolute; margin: 11px 2px 4px 10px; z-index: 3; width: 16px; font-size: 16px; text-align: center; left: 0; } .modal .input-icon > i { z-index: 10055; } .has-success .input-icon > i { color: #36c6d3; } .has-warning .input-icon > i { color: #F1C40F; } .has-info .input-icon > i { color: #659be0; } .has-error .input-icon > i { color: #ed6b75; } .input-icon.right { left: auto; right: 0; } .input-icon.right > .form-control { padding-right: 33px; padding-left: 12px; } .input-group .input-icon.right > .form-control { -webkit-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; -ms-border-radius: 0 4px 4px 0; -o-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0; } .input-icon.right > i { left: auto; right: 8px; float: right; } .input-icon.input-icon-lg > i { margin-top: 16px; } .input-icon.input-icon-sm > i { margin-top: 8px; font-size: 13px; } /*** Customized Bootstrap Labels ***/ .label { text-shadow: none !important; font-size: 14px; font-weight: 300; padding: 3px 6px 3px 6px; color: #fff; font-family: "Open Sans", sans-serif; } .label.label-sm { font-size: 13px; padding: 2px 5px 2px 5px; } h1 .label, h2 .label, h3 .label, h4 .label, h5 .label, h6 .label { font-size: 75%; } /* Labels variants */ .label-default { background-color: #bac3d0; } .label-default[href]:hover, .label-default[href]:focus { background-color: #9ca8bb; } .label-primary { background-color: #337ab7; } .label-primary[href]:hover, .label-primary[href]:focus { background-color: #286090; } .label-success { background-color: #36c6d3; } .label-success[href]:hover, .label-success[href]:focus { background-color: #27a4b0; } .label-info { background-color: #659be0; } .label-info[href]:hover, .label-info[href]:focus { background-color: #3a80d7; } .label-warning { background-color: #F1C40F; } .label-warning[href]:hover, .label-warning[href]:focus { background-color: #c29d0b; } .label-danger { background-color: #ed6b75; } .label-danger[href]:hover, .label-danger[href]:focus { background-color: #e73d4a; } /*** Iconic labels ***/ .label.label-icon { padding: 4px 0px 4px 4px; margin-right: 2px; text-align: center !important; } .label.label-icon > i { font-size: 12px; text-align: center !important; } .ie8 .label.label-icon, .ie9 .label.label-icon { padding: 3px 0px 3px 3px; } /*** Text states ***/ .text-default { color: #bac3d0; } .text-primary { color: #337ab7; } .text-success { color: #36c6d3; } .text-info { color: #659be0; } .text-warning { color: #F1C40F; } .text-danger { color: #ed6b75; } /*** Customized List Group ***/ /* Contextual variants */ .list-group > li:first-child { border-radius-topleft: 4px; border-radius-topright: 4px; } .list-group > li:last-child { border-radius-bottomleft: 4px; border-radius-bottomright: 4px; } .list-group .list-group-item-success { color: #27a4b0; background-color: #abe7ed; } .list-group a.list-group-item-success, .list-group button.list-group-item-success { color: #27a4b0; } .list-group a.list-group-item-success .list-group-item-heading, .list-group button.list-group-item-success .list-group-item-heading { color: inherit; } .list-group a.list-group-item-success:hover, .list-group a.list-group-item-success:focus, .list-group button.list-group-item-success:hover, .list-group button.list-group-item-success:focus { color: #27a4b0; background-color: #96e1e8; } .list-group a.list-group-item-success.active, .list-group a.list-group-item-success.active:hover, .list-group a.list-group-item-success.active:focus, .list-group button.list-group-item-success.active, .list-group button.list-group-item-success.active:hover, .list-group button.list-group-item-success.active:focus { color: #fff; background-color: #27a4b0; border-color: #27a4b0; } .list-group .list-group-item-info { color: #327ad5; background-color: #e0ebf9; } .list-group a.list-group-item-info, .list-group button.list-group-item-info { color: #327ad5; } .list-group a.list-group-item-info .list-group-item-heading, .list-group button.list-group-item-info .list-group-item-heading { color: inherit; } .list-group a.list-group-item-info:hover, .list-group a.list-group-item-info:focus, .list-group button.list-group-item-info:hover, .list-group button.list-group-item-info:focus { color: #327ad5; background-color: #caddf4; } .list-group a.list-group-item-info.active, .list-group a.list-group-item-info.active:hover, .list-group a.list-group-item-info.active:focus, .list-group button.list-group-item-info.active, .list-group button.list-group-item-info.active:hover, .list-group button.list-group-item-info.active:focus { color: #fff; background-color: #327ad5; border-color: #327ad5; } .list-group .list-group-item-warning { color: #c29d0b; background-color: #f9e491; } .list-group a.list-group-item-warning, .list-group button.list-group-item-warning { color: #c29d0b; } .list-group a.list-group-item-warning .list-group-item-heading, .list-group button.list-group-item-warning .list-group-item-heading { color: inherit; } .list-group a.list-group-item-warning:hover, .list-group a.list-group-item-warning:focus, .list-group button.list-group-item-warning:hover, .list-group button.list-group-item-warning:focus { color: #c29d0b; background-color: #f7de79; } .list-group a.list-group-item-warning.active, .list-group a.list-group-item-warning.active:hover, .list-group a.list-group-item-warning.active:focus, .list-group button.list-group-item-warning.active, .list-group button.list-group-item-warning.active:hover, .list-group button.list-group-item-warning.active:focus { color: #fff; background-color: #c29d0b; border-color: #c29d0b; } .list-group .list-group-item-danger { color: #e73d4a; background-color: #fbe1e3; } .list-group a.list-group-item-danger, .list-group button.list-group-item-danger { color: #e73d4a; } .list-group a.list-group-item-danger .list-group-item-heading, .list-group button.list-group-item-danger .list-group-item-heading { color: inherit; } .list-group a.list-group-item-danger:hover, .list-group a.list-group-item-danger:focus, .list-group button.list-group-item-danger:hover, .list-group button.list-group-item-danger:focus { color: #e73d4a; background-color: #f8cace; } .list-group a.list-group-item-danger.active, .list-group a.list-group-item-danger.active:hover, .list-group a.list-group-item-danger.active:focus, .list-group button.list-group-item-danger.active, .list-group button.list-group-item-danger.active:hover, .list-group button.list-group-item-danger.active:focus { color: #fff; background-color: #e73d4a; border-color: #e73d4a; } /*** UI Loading ***/ .loading-message { display: inline-block; min-width: 125px; margin-left: -60px; padding: 10px; margin: 0 auto; color: #000 !important; font-size: 13px; font-weight: 400; text-align: center; vertical-align: middle; } .loading-message.loading-message-boxed { border: 1px solid #ddd; background-color: #eee; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); } .loading-message > span { line-height: 20px; vertical-align: middle; } .page-loading { -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; position: fixed; top: 50%; left: 50%; min-width: 125px; margin-left: -60px; margin-top: -30px; padding: 7px; text-align: center; color: #333; font-size: 13px; border: 1px solid #ddd; background-color: #eee; vertical-align: middle; -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); } .page-loading > span { line-height: 20px; vertical-align: middle; } .page-spinner-bar { position: fixed; z-index: 10051; width: 100px; top: 40%; left: 50%; margin-left: -55px; text-align: center; } .page-spinner-bar > div { margin: 0 5px; width: 18px; height: 18px; background: #eee; border-radius: 100% !important; display: inline-block; -webkit-animation: bounceDelay 1.4s infinite ease-in-out; animation: bounceDelay 1.4s infinite ease-in-out; /* Prevent first frame from flickering when animation starts */ -webkit-animation-fill-mode: both; animation-fill-mode: both; } .page-spinner-bar .bounce1 { -webkit-animation-delay: -0.32s; animation-delay: -0.32s; } .page-spinner-bar .bounce2 { -webkit-animation-delay: -0.16s; animation-delay: -0.16s; } .block-spinner-bar { display: inline-block; width: 80px; text-align: center; } .block-spinner-bar > div { margin: 0 2px; width: 15px; height: 15px; background: #eee; border-radius: 100% !important; display: inline-block; -webkit-animation: bounceDelay 1.4s infinite ease-in-out; animation: bounceDelay 1.4s infinite ease-in-out; /* Prevent first frame from flickering when animation starts */ -webkit-animation-fill-mode: both; animation-fill-mode: both; } .block-spinner-bar .bounce1 { -webkit-animation-delay: -0.32s; animation-delay: -0.32s; } .block-spinner-bar .bounce2 { -webkit-animation-delay: -0.16s; animation-delay: -0.16s; } /*** Metro icons ***/ [class^="m-icon-"] { display: inline-block; width: 14px; height: 14px; margin-top: 3px; line-height: 14px; vertical-align: top; background-image: url(img/syncfusion-icons.png); background-position: 0 0; background-repeat: no-repeat; } [class^="m-icon-big-"] { display: inline-block; width: 30px; height: 30px; margin: 6px; vertical-align: middle; background-image: url(img/syncfusion-icons.png); background-position: 0 0px; background-repeat: no-repeat; } /* large icons */ .btn.m-icon-big { padding: 9px 16px 8px 16px; } .btn.m-icon-big.m-icon-only { padding: 9px 8px 8px 0px; } .btn.m-icon-big [class^="m-icon-big-"] { margin: 0 0 0 10px; } .btn.m-icon-ony > i { margin-left: 0px; } /* default icons */ .btn.m-icon { padding: 7px 14px 7px 14px; } .btn.m-icon [class^="m-icon-"] { margin: 4px 0 0 5px; } .btn.m-icon.m-icon-only { padding: 7px 10px 7px 6px; } /* white icon */ .m-icon-white { background-image: url(img/syncfusion-icons-white.png); } /* Misc */ .m-icon-swapright { background-position: -27px -10px; } .m-icon-swapdown { background-position: -68px -10px; } .m-icon-swapleft { background-position: -8px -10px; } .m-icon-swapup { background-position: -46px -10px; } .m-icon-big-swapright { background-position: -42px -28px; } .m-icon-big-swapdown { background-position: -115px -28px; } .m-icon-big-swapleft { background-position: -6px -28px; } .m-icon-big-swapup { background-position: -78px -28px; } /*** Customized Bootstrap Modal ***/ .modal { z-index: 10050; outline: none; overflow-y: auto !important; /* Fix content shifting to the right on modal open due to scrollbar closed */ } .page-portlet-fullscreen .modal { z-index: 10060; } .modal .modal-header { border-bottom: 1px solid #EFEFEF; } .modal .modal-header h3 { font-weight: 300; } .modal .modal-header .close { margin-top: 0px !important; } .modal.draggable-modal .modal-header { cursor: move; } .modal .modal-dialog { z-index: 10051; } .modal > .loading { position: absolute; top: 50%; left: 50%; margin-top: -22px; margin-left: -22px; } .modal.in .page-loading { display: none; } .modal-open { overflow-y: auto !important; } .modal-open-noscroll { overflow-y: hidden !important; } .modal-backdrop { border: 0; outline: none; } .page-portlet-fullscreen .modal-backdrop { z-index: 10059; } .modal-backdrop, .modal-backdrop.fade.in { background-color: #333 !important; } body[ng-controller] .modal-backdrop { z-index: 10049 !important; } body[ng-controller] .modal { z-index: 10050 !important; } /* Full width modal */ .modal-full.modal-dialog { width: 99%; } @media (max-width: 768px) { .modal-full.modal-dialog { width: auto; } } /*** Notes ***/ .note { margin: 0 0 20px 0; padding: 15px 30px 15px 15px; border-left: 5px solid #eee; -webkit-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; -ms-border-radius: 0 4px 4px 0; -o-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0; } .note h1, .note h2, .note h3, .note h4, .note h5, .note h6 { margin-top: 0; } .note h1 .close, .note h2 .close, .note h3 .close, .note h4 .close, .note h5 .close, .note h6 .close { margin-right: -10px; } .note p { margin: 0; font-size: 13px; } .note p:last-child { margin-bottom: 0; } .note code, .note .highlight { background-color: #fff; } .note.note-default { background-color: white; border-color: #b0c1d2; color: black; } .note.note-default.note-bordered { background-color: #eef1f5; border-color: #c0cedb; } .note.note-default.note-shadow { background-color: #f1f4f7; border-color: #d1dbe4; box-shadow: 5px 5px rgba(212, 221, 230, 0.2); } .note.note-success { background-color: #c0edf1; border-color: #58d0da; color: black; } .note.note-success.note-bordered { background-color: #a7e6ec; border-color: #6dd6df; } .note.note-success.note-shadow { background-color: #abe7ed; border-color: #81dbe3; box-shadow: 5px 5px rgba(134, 221, 228, 0.2); } .note.note-info { background-color: #f5f8fd; border-color: #8bb4e7; color: #010407; } .note.note-info.note-bordered { background-color: #dbe8f8; border-color: #a0c2ec; } .note.note-info.note-shadow { background-color: #e0ebf9; border-color: #b5cff0; box-shadow: 5px 5px rgba(185, 210, 241, 0.2); } .note.note-warning { background-color: #faeaa9; border-color: #f3cc31; color: black; } .note.note-warning.note-bordered { background-color: #f8e38c; border-color: #f4d249; } .note.note-warning.note-shadow { background-color: #f9e491; border-color: #f6d861; box-shadow: 5px 5px rgba(246, 217, 102, 0.2); } .note.note-danger { background-color: #fef7f8; border-color: #f0868e; color: #210406; } .note.note-danger.note-bordered { background-color: #fbdcde; border-color: #f39da3; } .note.note-danger.note-shadow { background-color: #fbe1e3; border-color: #f6b3b8; box-shadow: 5px 5px rgba(246, 184, 189, 0.2); } /*** Customized Bootstrap Pagination ***/ .pagination { margin: 10px 0; } .pagination.pagination-circle > li:first-child > a { border-radius: 25px 0 0 25px !important; } .pagination.pagination-circle > li:last-child > a { border-radius: 0 25px 25px 0 !important; } /*** Customized Bootstrap Panels ***/ .panel { -webkit-box-shadow: none !important; -moz-box-shadow: none !important; box-shadow: none !important; } .panel-group .panel { overflow: visible; } .panel .panel-body { font-size: 13px; } .panel .panel-title > a:hover { text-decoration: none; } .accordion .panel .panel-heading { padding: 0; } .accordion .panel .panel-title { padding: 0; } .accordion .panel .panel-title .accordion-toggle { display: block; padding: 10px 15px; } .accordion .panel .panel-title .accordion-toggle.accordion-toggle-styled { background: url("img/accordion-plusminus.png") no-repeat; background-position: right -19px; margin-right: 15px; } .accordion .panel .panel-title .accordion-toggle.accordion-toggle-styled.collapsed { background-position: right 12px; } /*** Accordions ***/ .panel-heading { background: #eee; } .panel-heading a { text-decoration: none; } .panel-heading a:active, .panel-heading a:focus, .panel-heading a:hover { text-decoration: none; } /*** Customized Bootstrap Popover ***/ /*rtl:ignore*/ .popover { box-shadow: 5px 5px rgba(102, 102, 102, 0.1); padding: 0; } .popover .popover-title { margin: 0 !important; } /*** Portlets ***/ /* Full Screen portlet mode */ .page-portlet-fullscreen { overflow: hidden; } /* Basic portlet */ .portlet { margin-top: 0px; margin-bottom: 25px; padding: 0px; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .portlet.portlet-fullscreen { z-index: 10060; margin: 0; position: fixed; top: 0; left: 0; bottom: 0; right: 0; width: 100%; height: 100%; background: #fff; } .portlet.portlet-fullscreen > .portlet-body { overflow-y: auto; overflow-x: hidden; padding: 0 10px; } .portlet.portlet-fullscreen > .portlet-title { padding: 0 10px; } .portlet > .portlet-title { border-bottom: 1px solid #eee; padding: 0; margin-bottom: 10px; min-height: 41px; -webkit-border-radius: 4px 4px 0 0; -moz-border-radius: 4px 4px 0 0; -ms-border-radius: 4px 4px 0 0; -o-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } .portlet > .portlet-title:before, .portlet > .portlet-title:after { content: " "; display: table; } .portlet > .portlet-title:after { clear: both; } .portlet > .portlet-title > .caption { float: left; display: inline-block; font-size: 18px; line-height: 18px; padding: 10px 0; } .portlet > .portlet-title > .caption.bold { font-weight: 400; } .portlet > .portlet-title > .caption > i { float: left; margin-top: 4px; display: inline-block; font-size: 13px; margin-right: 5px; color: #666; } .portlet > .portlet-title > .caption > i.glyphicon { margin-top: 2px; } .portlet > .portlet-title > .caption > .caption-helper { padding: 0; margin: 0; line-height: 13px; color: #9eacb4; font-size: 13px; font-weight: 400; } .portlet > .portlet-title > .actions { float: right; display: inline-block; padding: 6px 0; } .portlet > .portlet-title > .actions > .dropdown-menu i { color: #555555; } .portlet > .portlet-title > .actions > .btn, .portlet > .portlet-title > .actions > .btn.btn-sm, .portlet > .portlet-title > .actions > .btn-group > .btn, .portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm { padding: 4px 10px; font-size: 13px; line-height: 1.5; } .portlet > .portlet-title > .actions > .btn.btn-default, .portlet > .portlet-title > .actions > .btn.btn-sm.btn-default, .portlet > .portlet-title > .actions > .btn-group > .btn.btn-default, .portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm.btn-default { padding: 3px 9px; } .portlet > .portlet-title > .actions > .btn > i, .portlet > .portlet-title > .actions > .btn.btn-sm > i, .portlet > .portlet-title > .actions > .btn-group > .btn > i, .portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm > i { font-size: 13px; } .portlet > .portlet-title > .actions .btn-icon-only { padding: 5px 7px 3px 7px; } .portlet > .portlet-title > .actions .btn-icon-only.btn-default { padding: 4px 6px 2px 6px; } .portlet > .portlet-title > .actions .btn-icon-only.btn-default > i { font-size: 14px; } .portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen { font-family: FontAwesome; color: #a0a0a0; padding-top: 3px; } .portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen.btn-sm { padding: 3px 3px !important; height: 27px; width: 27px; } .portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen:before { content: "\f065"; } .portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen.on:before { content: "\f066"; } .portlet > .portlet-title > .tools { float: right; display: inline-block; padding: 12px 0 8px 0; } .portlet > .portlet-title > .tools > a { display: inline-block; height: 16px; margin-left: 5px; opacity: 1 ; filter: alpha(opacity=100) ; } .portlet > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon.png); background-repeat: no-repeat; width: 11px; } .portlet > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon.png); background-repeat: no-repeat; width: 12px; } .portlet > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon.png); width: 13px; } .portlet > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon.png); width: 14px; visibility: visible; } .portlet > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon.png); width: 14px; visibility: visible; } .portlet > .portlet-title > .tools > a.fullscreen { display: inline-block; top: -3px; position: relative; font-size: 13px; font-family: FontAwesome; color: #ACACAC; } .portlet > .portlet-title > .tools > a.fullscreen:before { content: "\f065"; } .portlet > .portlet-title > .tools > a.fullscreen.on:before { content: "\f066"; } .portlet > .portlet-title > .tools > a:hover { text-decoration: none; -webkit-transition: all 0.1s ease-in-out; -moz-transition: all 0.1s ease-in-out; -o-transition: all 0.1s ease-in-out; -ms-transition: all 0.1s ease-in-out; transition: all 0.1s ease-in-out; opacity: 0.8 ; filter: alpha(opacity=80) ; } .portlet > .portlet-title > .pagination { float: right; display: inline-block; margin: 2px 0 0 0; border: 0; padding: 4px 0; } .portlet > .portlet-title > .nav-tabs { background: none; margin: 1px 0 0 0; float: right; display: inline-block; border: 0; } .portlet > .portlet-title > .nav-tabs > li { background: none; margin: 0; border: 0; } .portlet > .portlet-title > .nav-tabs > li > a { background: none; margin: 5px 0 0 1px; border: 0; padding: 8px 10px; color: #fff; } .portlet > .portlet-title > .nav-tabs > li.active > a, .portlet > .portlet-title > .nav-tabs > li:hover > a { color: #333; background: #fff; border: 0; } .portlet > .portlet-body { clear: both; -webkit-border-radius: 0 0 4px 4px; -moz-border-radius: 0 0 4px 4px; -ms-border-radius: 0 0 4px 4px; -o-border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px; } .portlet > .portlet-body p { margin-top: 0; } .portlet > .portlet-empty { min-height: 125px; } .portlet.full-height-content { margin-bottom: 0; } /* Portlet background colors */ /* Side bordered portlet */ .portlet.bordered { border-left: 2px solid #e6e9ec !important; } .portlet.bordered > .portlet-title { border-bottom: 0; } /* Solid colored portlet */ .portlet.solid { padding: 0 10px 10px 10px; border: 0px; } .portlet.solid > .portlet-title { border-bottom: 0; margin-bottom: 10px; } .portlet.solid > .portlet-title > .caption { padding: 16px 0 2px 0; } .portlet.solid > .portlet-title > .actions { padding: 12px 0 6px 0; } .portlet.solid > .portlet-title > .tools { padding: 14px 0 6px 0; } /* Solid bordered portlet */ .portlet.solid.bordered > .portlet-title { margin-bottom: 10px; } /* Box portlet */ .portlet.box { padding: 0px !important; } .portlet.box > .portlet-title { border-bottom: 0; padding: 0 10px; margin-bottom: 0; color: #fff; } .portlet.box > .portlet-title > .caption { padding: 11px 0 9px 0; } .portlet.box > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.box > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.box > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.box > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.box > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.box > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box > .portlet-title > .actions { padding: 7px 0 5px 0; } .portlet.box > .portlet-body { background-color: #fff; padding: 15px; } /* Light Portlet */ .portlet.light { padding: 12px 20px 15px 20px; background-color: #fff; } .portlet.light.bordered { border: 1px solid #e7ecf1 !important; } .portlet.light.bordered > .portlet-title { border-bottom: 1px solid #eef1f5; } .portlet.light.bg-inverse { background: #f1f4f7; } .portlet.light > .portlet-title { padding: 0; min-height: 48px; } .portlet.light > .portlet-title > .caption { color: #666; padding: 10px 0; } .portlet.light > .portlet-title > .caption > .caption-subject { font-size: 16px; } .portlet.light > .portlet-title > .caption > i { color: #777; font-size: 15px; font-weight: 300; margin-top: 3px; } .portlet.light > .portlet-title > .caption.caption-md > .caption-subject { font-size: 15px; } .portlet.light > .portlet-title > .caption.caption-md > i { font-size: 14px; } .portlet.light > .portlet-title > .actions { padding: 6px 0 14px 0; } .portlet.light > .portlet-title > .actions .btn-default { color: #666; } .portlet.light > .portlet-title > .actions .btn-icon-only { height: 27px; width: 27px; } .portlet.light > .portlet-title > .actions .dropdown-menu li > a { color: #555; } .portlet.light > .portlet-title > .inputs { float: right; display: inline-block; padding: 4px 0; } .portlet.light > .portlet-title > .inputs > .portlet-input .input-icon > i { font-size: 14px; margin-top: 9px; } .portlet.light > .portlet-title > .inputs > .portlet-input .input-icon > .form-control { height: 30px; padding: 2px 26px 3px 10px; font-size: 13px; } .portlet.light > .portlet-title > .inputs > .portlet-input > .form-control { height: 30px; padding: 3px 10px; font-size: 13px; } .portlet.light > .portlet-title > .pagination { padding: 2px 0 13px 0; } .portlet.light > .portlet-title > .tools { padding: 10px 0 13px 0; margin-top: 2px; } .portlet.light > .portlet-title > .nav-tabs > li { margin: 0; padding: 0; } .portlet.light > .portlet-title > .nav-tabs > li > a { margin: 0; padding: 12px 13px 13px 13px; font-size: 13px; color: #666; } .portlet.light > .portlet-title > .nav-tabs > li.active > a, .portlet.light > .portlet-title > .nav-tabs > li:hover > a { margin: 0; background: none; color: #333; } .portlet.light.form-fit { padding: 0; } .portlet.light.form-fit > .portlet-title { padding: 17px 20px 10px 20px; margin-bottom: 0; } .portlet.light .portlet-body { padding-top: 8px; } .portlet.light.portlet-fullscreen > .portlet-body { padding: 8px 0; } .portlet.light.portlet-fit { padding: 0; } .portlet.light.portlet-fit > .portlet-title { padding: 15px 20px 10px 20px; } .portlet.light.portlet-fit > .portlet-body { padding: 10px 20px 20px 20px; } .portlet.light.portlet-fit.portlet-form > .portlet-body { padding: 0; } .portlet.light.portlet-fit.portlet-form > .portlet-body { padding: 0; } .portlet.light.portlet-fit.portlet-form > .portlet-body .form-actions { background: none; } .portlet.light.portlet-datatable.portlet-fit > .portlet-body { padding-top: 10px; padding-bottom: 25px; } .tab-pane > p:last-child { margin-bottom: 0px; } /* Reverse aligned tabs */ .tabs-reversed > li { float: right; margin-right: 0; } .tabs-reversed > li > a { margin-right: 0; } /* jQuery UI Draggable Portlets */ .portlet-sortable:not(.portlet-fullscreen) > .portlet-title { cursor: move; } .portlet-sortable-placeholder { border: 2px dashed #eee; margin-bottom: 25px; } .portlet-sortable-empty { box-shadow: none !important; height: 45px; } .portlet-collapsed { display: none; } @media (max-width: 991px) { /* 991px */ .portlet-collapsed-on-mobile { display: none; } } /*** Custom colored portlets ***/ .portlet > .portlet-body.white, .portlet.white { background-color: #ffffff; } .portlet.solid.white > .portlet-title, .portlet.solid.white > .portlet-body { border: 0; color: #666; } .portlet.solid.white > .portlet-title > .caption { font-weight: 400; } .portlet.solid.white > .portlet-title > .caption > i { color: #666; } .portlet.solid.white > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.white > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.white > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.white > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.white > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.white > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.white { border: 1px solid white; border-top: 0; } .portlet.box.white > .portlet-title { background-color: #ffffff; } .portlet.box.white > .portlet-title > .caption { color: #666; } .portlet.box.white > .portlet-title > .caption > i { color: #666; } .portlet.box.white > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid white; color: white; } .portlet.box.white > .portlet-title > .actions .btn-default > i { color: white; } .portlet.box.white > .portlet-title > .actions .btn-default:hover, .portlet.box.white > .portlet-title > .actions .btn-default:focus, .portlet.box.white > .portlet-title > .actions .btn-default:active, .portlet.box.white > .portlet-title > .actions .btn-default.active { border: 1px solid white; color: white; } .portlet > .portlet-body.default, .portlet.default { background-color: #e1e5ec; } .portlet.solid.default > .portlet-title, .portlet.solid.default > .portlet-body { border: 0; color: #666; } .portlet.solid.default > .portlet-title > .caption { font-weight: 400; } .portlet.solid.default > .portlet-title > .caption > i { color: #666; } .portlet.solid.default > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.default > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.default > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.default > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.default > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.default > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.default { border: 1px solid white; border-top: 0; } .portlet.box.default > .portlet-title { background-color: #e1e5ec; } .portlet.box.default > .portlet-title > .caption { color: #666; } .portlet.box.default > .portlet-title > .caption > i { color: #666; } .portlet.box.default > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid white; color: white; } .portlet.box.default > .portlet-title > .actions .btn-default > i { color: white; } .portlet.box.default > .portlet-title > .actions .btn-default:hover, .portlet.box.default > .portlet-title > .actions .btn-default:focus, .portlet.box.default > .portlet-title > .actions .btn-default:active, .portlet.box.default > .portlet-title > .actions .btn-default.active { border: 1px solid white; color: white; } .portlet > .portlet-body.dark, .portlet.dark { background-color: #2f353b; } .portlet.solid.dark > .portlet-title, .portlet.solid.dark > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.dark > .portlet-title > .caption { font-weight: 400; } .portlet.solid.dark > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.dark > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.dark > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.dark > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.dark > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.dark > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.dark > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.dark { border: 1px solid #464f57; border-top: 0; } .portlet.box.dark > .portlet-title { background-color: #2f353b; } .portlet.box.dark > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.dark > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.dark > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #616d79; color: #6c7a88; } .portlet.box.dark > .portlet-title > .actions .btn-default > i { color: #738290; } .portlet.box.dark > .portlet-title > .actions .btn-default:hover, .portlet.box.dark > .portlet-title > .actions .btn-default:focus, .portlet.box.dark > .portlet-title > .actions .btn-default:active, .portlet.box.dark > .portlet-title > .actions .btn-default.active { border: 1px solid #798794; color: #8793a0; } .portlet > .portlet-body.blue, .portlet.blue { background-color: #3598dc; } .portlet.solid.blue > .portlet-title, .portlet.solid.blue > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.blue > .portlet-title > .caption { font-weight: 400; } .portlet.solid.blue > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.blue > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.blue > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.blue > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.blue > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.blue > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.blue > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.blue { border: 1px solid #60aee4; border-top: 0; } .portlet.box.blue > .portlet-title { background-color: #3598dc; } .portlet.box.blue > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.blue > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.blue > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #95c9ed; color: #aad4f0; } .portlet.box.blue > .portlet-title > .actions .btn-default > i { color: #b7daf3; } .portlet.box.blue > .portlet-title > .actions .btn-default:hover, .portlet.box.blue > .portlet-title > .actions .btn-default:focus, .portlet.box.blue > .portlet-title > .actions .btn-default:active, .portlet.box.blue > .portlet-title > .actions .btn-default.active { border: 1px solid #c0dff4; color: #d6eaf8; } .portlet > .portlet-body.blue-madison, .portlet.blue-madison { background-color: #578ebe; } .portlet.solid.blue-madison > .portlet-title, .portlet.solid.blue-madison > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.blue-madison > .portlet-title > .caption { font-weight: 400; } .portlet.solid.blue-madison > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.blue-madison > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.blue-madison > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.blue-madison > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.blue-madison > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.blue-madison > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.blue-madison > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.blue-madison { border: 1px solid #7ca7cc; border-top: 0; } .portlet.box.blue-madison > .portlet-title { background-color: #578ebe; } .portlet.box.blue-madison > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.blue-madison > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.blue-madison > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #a8c4dd; color: #bad1e4; } .portlet.box.blue-madison > .portlet-title > .actions .btn-default > i { color: #c5d8e9; } .portlet.box.blue-madison > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-madison > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-madison > .portlet-title > .actions .btn-default:active, .portlet.box.blue-madison > .portlet-title > .actions .btn-default.active { border: 1px solid #cdddec; color: #dfeaf3; } .portlet > .portlet-body.blue-chambray, .portlet.blue-chambray { background-color: #2C3E50; } .portlet.solid.blue-chambray > .portlet-title, .portlet.solid.blue-chambray > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.blue-chambray > .portlet-title > .caption { font-weight: 400; } .portlet.solid.blue-chambray > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.blue-chambray > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.blue-chambray > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.blue-chambray > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.blue-chambray > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.blue-chambray > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.blue-chambray > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.blue-chambray { border: 1px solid #3e5871; border-top: 0; } .portlet.box.blue-chambray > .portlet-title { background-color: #2C3E50; } .portlet.box.blue-chambray > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.blue-chambray > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.blue-chambray > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #547698; color: #5f83a7; } .portlet.box.blue-chambray > .portlet-title > .actions .btn-default > i { color: #698bac; } .portlet.box.blue-chambray > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default:active, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default.active { border: 1px solid #6f90b0; color: #809cb9; } .portlet > .portlet-body.blue-ebonyclay, .portlet.blue-ebonyclay { background-color: #22313F; } .portlet.solid.blue-ebonyclay > .portlet-title, .portlet.solid.blue-ebonyclay > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.blue-ebonyclay > .portlet-title > .caption { font-weight: 400; } .portlet.solid.blue-ebonyclay > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.blue-ebonyclay { border: 1px solid #344b60; border-top: 0; } .portlet.box.blue-ebonyclay > .portlet-title { background-color: #22313F; } .portlet.box.blue-ebonyclay > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.blue-ebonyclay > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #496a88; color: #527798; } .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default > i { color: #587ea2; } .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:active, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default.active { border: 1px solid #5d83a7; color: #6d90b0; } .portlet > .portlet-body.blue-hoki, .portlet.blue-hoki { background-color: #67809F; } .portlet.solid.blue-hoki > .portlet-title, .portlet.solid.blue-hoki > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.blue-hoki > .portlet-title > .caption { font-weight: 400; } .portlet.solid.blue-hoki > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.blue-hoki > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.blue-hoki > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.blue-hoki > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.blue-hoki > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.blue-hoki > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.blue-hoki > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.blue-hoki { border: 1px solid #869ab3; border-top: 0; } .portlet.box.blue-hoki > .portlet-title { background-color: #67809F; } .portlet.box.blue-hoki > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.blue-hoki > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.blue-hoki > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #acb9ca; color: #bbc7d4; } .portlet.box.blue-hoki > .portlet-title > .actions .btn-default > i { color: #c5ceda; } .portlet.box.blue-hoki > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default:active, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default.active { border: 1px solid #cbd4de; color: #dbe1e8; } .portlet > .portlet-body.blue-steel, .portlet.blue-steel { background-color: #4B77BE; } .portlet.solid.blue-steel > .portlet-title, .portlet.solid.blue-steel > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.blue-steel > .portlet-title > .caption { font-weight: 400; } .portlet.solid.blue-steel > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.blue-steel > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.blue-steel > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.blue-steel > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.blue-steel > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.blue-steel > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.blue-steel > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.blue-steel { border: 1px solid #7093cc; border-top: 0; } .portlet.box.blue-steel > .portlet-title { background-color: #4B77BE; } .portlet.box.blue-steel > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.blue-steel > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.blue-steel > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #9db5dc; color: #b0c3e3; } .portlet.box.blue-steel > .portlet-title > .actions .btn-default > i { color: #bbcce7; } .portlet.box.blue-steel > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-steel > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-steel > .portlet-title > .actions .btn-default:active, .portlet.box.blue-steel > .portlet-title > .actions .btn-default.active { border: 1px solid #c3d2e9; color: #d6e0f0; } .portlet > .portlet-body.blue-soft, .portlet.blue-soft { background-color: #4c87b9; } .portlet.solid.blue-soft > .portlet-title, .portlet.solid.blue-soft > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.blue-soft > .portlet-title > .caption { font-weight: 400; } .portlet.solid.blue-soft > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.blue-soft > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.blue-soft > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.blue-soft > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.blue-soft > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.blue-soft > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.blue-soft > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.blue-soft { border: 1px solid #71a0c7; border-top: 0; } .portlet.box.blue-soft > .portlet-title { background-color: #4c87b9; } .portlet.box.blue-soft > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.blue-soft > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.blue-soft > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #9dbdd9; color: #afc9e0; } .portlet.box.blue-soft > .portlet-title > .actions .btn-default > i { color: #bad1e4; } .portlet.box.blue-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-soft > .portlet-title > .actions .btn-default:active, .portlet.box.blue-soft > .portlet-title > .actions .btn-default.active { border: 1px solid #c1d6e7; color: #d4e2ee; } .portlet > .portlet-body.blue-dark, .portlet.blue-dark { background-color: #5e738b; } .portlet.solid.blue-dark > .portlet-title, .portlet.solid.blue-dark > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.blue-dark > .portlet-title > .caption { font-weight: 400; } .portlet.solid.blue-dark > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.blue-dark > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.blue-dark > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.blue-dark > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.blue-dark > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.blue-dark > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.blue-dark > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.blue-dark { border: 1px solid #788da4; border-top: 0; } .portlet.box.blue-dark > .portlet-title { background-color: #5e738b; } .portlet.box.blue-dark > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.blue-dark > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.blue-dark > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #9dacbd; color: #acb8c7; } .portlet.box.blue-dark > .portlet-title > .actions .btn-default > i { color: #b5c0cd; } .portlet.box.blue-dark > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-dark > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-dark > .portlet-title > .actions .btn-default:active, .portlet.box.blue-dark > .portlet-title > .actions .btn-default.active { border: 1px solid #bbc5d1; color: #cad2db; } .portlet > .portlet-body.blue-sharp, .portlet.blue-sharp { background-color: #5C9BD1; } .portlet.solid.blue-sharp > .portlet-title, .portlet.solid.blue-sharp > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.blue-sharp > .portlet-title > .caption { font-weight: 400; } .portlet.solid.blue-sharp > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.blue-sharp > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.blue-sharp > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.blue-sharp > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.blue-sharp > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.blue-sharp > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.blue-sharp > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.blue-sharp { border: 1px solid #84b3dc; border-top: 0; } .portlet.box.blue-sharp > .portlet-title { background-color: #5C9BD1; } .portlet.box.blue-sharp > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.blue-sharp > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.blue-sharp > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #b4d1ea; color: #c7ddef; } .portlet.box.blue-sharp > .portlet-title > .actions .btn-default > i { color: #d3e4f3; } .portlet.box.blue-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default.active { border: 1px solid #dbe9f5; color: #eff5fb; } .portlet > .portlet-body.green, .portlet.green { background-color: #32c5d2; } .portlet.solid.green > .portlet-title, .portlet.solid.green > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.green > .portlet-title > .caption { font-weight: 400; } .portlet.solid.green > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.green > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.green > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.green > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.green > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.green > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.green > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.green { border: 1px solid #5cd1db; border-top: 0; } .portlet.box.green > .portlet-title { background-color: #32c5d2; } .portlet.box.green > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.green > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.green > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #8edfe6; color: #a3e5eb; } .portlet.box.green > .portlet-title > .actions .btn-default > i { color: #afe8ee; } .portlet.box.green > .portlet-title > .actions .btn-default:hover, .portlet.box.green > .portlet-title > .actions .btn-default:focus, .portlet.box.green > .portlet-title > .actions .btn-default:active, .portlet.box.green > .portlet-title > .actions .btn-default.active { border: 1px solid #b8ebef; color: #cdf1f4; } .portlet > .portlet-body.green-meadow, .portlet.green-meadow { background-color: #1BBC9B; } .portlet.solid.green-meadow > .portlet-title, .portlet.solid.green-meadow > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.green-meadow > .portlet-title > .caption { font-weight: 400; } .portlet.solid.green-meadow > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.green-meadow > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.green-meadow > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.green-meadow > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.green-meadow > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.green-meadow > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.green-meadow > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.green-meadow { border: 1px solid #2ae0bb; border-top: 0; } .portlet.box.green-meadow > .portlet-title { background-color: #1BBC9B; } .portlet.box.green-meadow > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.green-meadow > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.green-meadow > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #5fe8cc; color: #75ebd3; } .portlet.box.green-meadow > .portlet-title > .actions .btn-default > i { color: #83edd7; } .portlet.box.green-meadow > .portlet-title > .actions .btn-default:hover, .portlet.box.green-meadow > .portlet-title > .actions .btn-default:focus, .portlet.box.green-meadow > .portlet-title > .actions .btn-default:active, .portlet.box.green-meadow > .portlet-title > .actions .btn-default.active { border: 1px solid #8ceeda; color: #a2f2e1; } .portlet > .portlet-body.green-seagreen, .portlet.green-seagreen { background-color: #1BA39C; } .portlet.solid.green-seagreen > .portlet-title, .portlet.solid.green-seagreen > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.green-seagreen > .portlet-title > .caption { font-weight: 400; } .portlet.solid.green-seagreen > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.green-seagreen > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.green-seagreen > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.green-seagreen > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.green-seagreen > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.green-seagreen > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.green-seagreen > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.green-seagreen { border: 1px solid #22cfc6; border-top: 0; } .portlet.box.green-seagreen > .portlet-title { background-color: #1BA39C; } .portlet.box.green-seagreen > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.green-seagreen > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.green-seagreen > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #4de1da; color: #63e5de; } .portlet.box.green-seagreen > .portlet-title > .actions .btn-default > i { color: #70e7e1; } .portlet.box.green-seagreen > .portlet-title > .actions .btn-default:hover, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default:focus, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default:active, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default.active { border: 1px solid #78e9e3; color: #8eece8; } .portlet > .portlet-body.green-turquoise, .portlet.green-turquoise { background-color: #36D7B7; } .portlet.solid.green-turquoise > .portlet-title, .portlet.solid.green-turquoise > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.green-turquoise > .portlet-title > .caption { font-weight: 400; } .portlet.solid.green-turquoise > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.green-turquoise > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.green-turquoise > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.green-turquoise > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.green-turquoise > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.green-turquoise > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.green-turquoise > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.green-turquoise { border: 1px solid #61dfc6; border-top: 0; } .portlet.box.green-turquoise > .portlet-title { background-color: #36D7B7; } .portlet.box.green-turquoise > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.green-turquoise > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.green-turquoise > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #94ead9; color: #a9eee0; } .portlet.box.green-turquoise > .portlet-title > .actions .btn-default > i { color: #b6f0e5; } .portlet.box.green-turquoise > .portlet-title > .actions .btn-default:hover, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default:focus, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default:active, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default.active { border: 1px solid #bef2e8; color: #d3f6ef; } .portlet > .portlet-body.green-haze, .portlet.green-haze { background-color: #44b6ae; } .portlet.solid.green-haze > .portlet-title, .portlet.solid.green-haze > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.green-haze > .portlet-title > .caption { font-weight: 400; } .portlet.solid.green-haze > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.green-haze > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.green-haze > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.green-haze > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.green-haze > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.green-haze > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.green-haze > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.green-haze { border: 1px solid #67c6bf; border-top: 0; } .portlet.box.green-haze > .portlet-title { background-color: #44b6ae; } .portlet.box.green-haze > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.green-haze > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.green-haze > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #93d7d2; color: #a6deda; } .portlet.box.green-haze > .portlet-title > .actions .btn-default > i { color: #b1e2de; } .portlet.box.green-haze > .portlet-title > .actions .btn-default:hover, .portlet.box.green-haze > .portlet-title > .actions .btn-default:focus, .portlet.box.green-haze > .portlet-title > .actions .btn-default:active, .portlet.box.green-haze > .portlet-title > .actions .btn-default.active { border: 1px solid #b9e5e2; color: #cbece9; } .portlet > .portlet-body.green-jungle, .portlet.green-jungle { background-color: #26C281; } .portlet.solid.green-jungle > .portlet-title, .portlet.solid.green-jungle > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.green-jungle > .portlet-title > .caption { font-weight: 400; } .portlet.solid.green-jungle > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.green-jungle > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.green-jungle > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.green-jungle > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.green-jungle > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.green-jungle > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.green-jungle > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.green-jungle { border: 1px solid #41da9a; border-top: 0; } .portlet.box.green-jungle > .portlet-title { background-color: #26C281; } .portlet.box.green-jungle > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.green-jungle > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.green-jungle > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #74e4b5; color: #8ae8c1; } .portlet.box.green-jungle > .portlet-title > .actions .btn-default > i { color: #96ebc8; } .portlet.box.green-jungle > .portlet-title > .actions .btn-default:hover, .portlet.box.green-jungle > .portlet-title > .actions .btn-default:focus, .portlet.box.green-jungle > .portlet-title > .actions .btn-default:active, .portlet.box.green-jungle > .portlet-title > .actions .btn-default.active { border: 1px solid #9feccc; color: #b4f0d7; } .portlet > .portlet-body.green-soft, .portlet.green-soft { background-color: #3faba4; } .portlet.solid.green-soft > .portlet-title, .portlet.solid.green-soft > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.green-soft > .portlet-title > .caption { font-weight: 400; } .portlet.solid.green-soft > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.green-soft > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.green-soft > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.green-soft > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.green-soft > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.green-soft > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.green-soft > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.green-soft { border: 1px solid #5bc2bc; border-top: 0; } .portlet.box.green-soft > .portlet-title { background-color: #3faba4; } .portlet.box.green-soft > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.green-soft > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.green-soft > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #87d3ce; color: #9adad6; } .portlet.box.green-soft > .portlet-title > .actions .btn-default > i { color: #a5deda; } .portlet.box.green-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.green-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.green-soft > .portlet-title > .actions .btn-default:active, .portlet.box.green-soft > .portlet-title > .actions .btn-default.active { border: 1px solid #ade1dd; color: #bfe7e5; } .portlet > .portlet-body.green-dark, .portlet.green-dark { background-color: #4DB3A2; } .portlet.solid.green-dark > .portlet-title, .portlet.solid.green-dark > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.green-dark > .portlet-title > .caption { font-weight: 400; } .portlet.solid.green-dark > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.green-dark > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.green-dark > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.green-dark > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.green-dark > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.green-dark > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.green-dark > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.green-dark { border: 1px solid #71c2b5; border-top: 0; } .portlet.box.green-dark > .portlet-title { background-color: #4DB3A2; } .portlet.box.green-dark > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.green-dark > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.green-dark > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #9cd5cb; color: #addcd4; } .portlet.box.green-dark > .portlet-title > .actions .btn-default > i { color: #b8e1da; } .portlet.box.green-dark > .portlet-title > .actions .btn-default:hover, .portlet.box.green-dark > .portlet-title > .actions .btn-default:focus, .portlet.box.green-dark > .portlet-title > .actions .btn-default:active, .portlet.box.green-dark > .portlet-title > .actions .btn-default.active { border: 1px solid #bfe4de; color: #d1ebe7; } .portlet > .portlet-body.green-sharp, .portlet.green-sharp { background-color: #2ab4c0; } .portlet.solid.green-sharp > .portlet-title, .portlet.solid.green-sharp > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.green-sharp > .portlet-title > .caption { font-weight: 400; } .portlet.solid.green-sharp > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.green-sharp > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.green-sharp > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.green-sharp > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.green-sharp > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.green-sharp > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.green-sharp > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.green-sharp { border: 1px solid #46cbd7; border-top: 0; } .portlet.box.green-sharp > .portlet-title { background-color: #2ab4c0; } .portlet.box.green-sharp > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.green-sharp > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.green-sharp > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #79d9e2; color: #8edfe6; } .portlet.box.green-sharp > .portlet-title > .actions .btn-default > i { color: #9ae3e9; } .portlet.box.green-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.green-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.green-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.green-sharp > .portlet-title > .actions .btn-default.active { border: 1px solid #a2e5eb; color: #b7ebef; } .portlet > .portlet-body.grey, .portlet.grey { background-color: #E5E5E5; } .portlet.solid.grey > .portlet-title, .portlet.solid.grey > .portlet-body { border: 0; color: #333333; } .portlet.solid.grey > .portlet-title > .caption { font-weight: 400; } .portlet.solid.grey > .portlet-title > .caption > i { color: #333333; } .portlet.solid.grey > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.grey > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.grey > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.grey > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.grey > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.grey > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.grey { border: 1px solid white; border-top: 0; } .portlet.box.grey > .portlet-title { background-color: #E5E5E5; } .portlet.box.grey > .portlet-title > .caption { color: #333333; } .portlet.box.grey > .portlet-title > .caption > i { color: #333333; } .portlet.box.grey > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid white; color: white; } .portlet.box.grey > .portlet-title > .actions .btn-default > i { color: white; } .portlet.box.grey > .portlet-title > .actions .btn-default:hover, .portlet.box.grey > .portlet-title > .actions .btn-default:focus, .portlet.box.grey > .portlet-title > .actions .btn-default:active, .portlet.box.grey > .portlet-title > .actions .btn-default.active { border: 1px solid white; color: white; } .portlet > .portlet-body.grey-steel, .portlet.grey-steel { background-color: #e9edef; } .portlet.solid.grey-steel > .portlet-title, .portlet.solid.grey-steel > .portlet-body { border: 0; color: #80898e; } .portlet.solid.grey-steel > .portlet-title > .caption { font-weight: 400; } .portlet.solid.grey-steel > .portlet-title > .caption > i { color: #80898e; } .portlet.solid.grey-steel > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.grey-steel > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.grey-steel > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.grey-steel > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.grey-steel > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.grey-steel > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.grey-steel { border: 1px solid white; border-top: 0; } .portlet.box.grey-steel > .portlet-title { background-color: #e9edef; } .portlet.box.grey-steel > .portlet-title > .caption { color: #80898e; } .portlet.box.grey-steel > .portlet-title > .caption > i { color: #80898e; } .portlet.box.grey-steel > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid white; color: white; } .portlet.box.grey-steel > .portlet-title > .actions .btn-default > i { color: white; } .portlet.box.grey-steel > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-steel > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-steel > .portlet-title > .actions .btn-default:active, .portlet.box.grey-steel > .portlet-title > .actions .btn-default.active { border: 1px solid white; color: white; } .portlet > .portlet-body.grey-cararra, .portlet.grey-cararra { background-color: #fafafa; } .portlet.solid.grey-cararra > .portlet-title, .portlet.solid.grey-cararra > .portlet-body { border: 0; color: #333333; } .portlet.solid.grey-cararra > .portlet-title > .caption { font-weight: 400; } .portlet.solid.grey-cararra > .portlet-title > .caption > i { color: #333333; } .portlet.solid.grey-cararra > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.grey-cararra > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.grey-cararra > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.grey-cararra > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.grey-cararra > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.grey-cararra > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.grey-cararra { border: 1px solid white; border-top: 0; } .portlet.box.grey-cararra > .portlet-title { background-color: #fafafa; } .portlet.box.grey-cararra > .portlet-title > .caption { color: #333333; } .portlet.box.grey-cararra > .portlet-title > .caption > i { color: #333333; } .portlet.box.grey-cararra > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid white; color: white; } .portlet.box.grey-cararra > .portlet-title > .actions .btn-default > i { color: white; } .portlet.box.grey-cararra > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default:active, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default.active { border: 1px solid white; color: white; } .portlet > .portlet-body.grey-gallery, .portlet.grey-gallery { background-color: #555555; } .portlet.solid.grey-gallery > .portlet-title, .portlet.solid.grey-gallery > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.grey-gallery > .portlet-title > .caption { font-weight: 400; } .portlet.solid.grey-gallery > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.grey-gallery > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.grey-gallery > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.grey-gallery > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.grey-gallery > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.grey-gallery > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.grey-gallery > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.grey-gallery { border: 1px solid #6f6f6f; border-top: 0; } .portlet.box.grey-gallery > .portlet-title { background-color: #555555; } .portlet.box.grey-gallery > .portlet-title > .caption { color: #ffffff; } .portlet.box.grey-gallery > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.grey-gallery > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #8d8d8d; color: #9a9a9a; } .portlet.box.grey-gallery > .portlet-title > .actions .btn-default > i { color: #a2a2a2; } .portlet.box.grey-gallery > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default:active, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default.active { border: 1px solid #a7a7a7; color: #b3b3b3; } .portlet > .portlet-body.grey-cascade, .portlet.grey-cascade { background-color: #95A5A6; } .portlet.solid.grey-cascade > .portlet-title, .portlet.solid.grey-cascade > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.grey-cascade > .portlet-title > .caption { font-weight: 400; } .portlet.solid.grey-cascade > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.grey-cascade > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.grey-cascade > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.grey-cascade > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.grey-cascade > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.grey-cascade > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.grey-cascade > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.grey-cascade { border: 1px solid #b1bdbd; border-top: 0; } .portlet.box.grey-cascade > .portlet-title { background-color: #95A5A6; } .portlet.box.grey-cascade > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.grey-cascade > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.grey-cascade > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #d2d9d9; color: #e0e5e5; } .portlet.box.grey-cascade > .portlet-title > .actions .btn-default > i { color: #e8ecec; } .portlet.box.grey-cascade > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default:active, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default.active { border: 1px solid #eef0f0; color: #fcfcfc; } .portlet > .portlet-body.grey-silver, .portlet.grey-silver { background-color: #BFBFBF; } .portlet.solid.grey-silver > .portlet-title, .portlet.solid.grey-silver > .portlet-body { border: 0; color: #FAFCFB; } .portlet.solid.grey-silver > .portlet-title > .caption { font-weight: 400; } .portlet.solid.grey-silver > .portlet-title > .caption > i { color: #FAFCFB; } .portlet.solid.grey-silver > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.grey-silver > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.grey-silver > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.grey-silver > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.grey-silver > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.grey-silver > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.grey-silver { border: 1px solid #d9d9d9; border-top: 0; } .portlet.box.grey-silver > .portlet-title { background-color: #BFBFBF; } .portlet.box.grey-silver > .portlet-title > .caption { color: #FAFCFB; } .portlet.box.grey-silver > .portlet-title > .caption > i { color: #FAFCFB; } .portlet.box.grey-silver > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #f7f7f7; color: white; } .portlet.box.grey-silver > .portlet-title > .actions .btn-default > i { color: white; } .portlet.box.grey-silver > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-silver > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-silver > .portlet-title > .actions .btn-default:active, .portlet.box.grey-silver > .portlet-title > .actions .btn-default.active { border: 1px solid white; color: white; } .portlet > .portlet-body.grey-salsa, .portlet.grey-salsa { background-color: #ACB5C3; } .portlet.solid.grey-salsa > .portlet-title, .portlet.solid.grey-salsa > .portlet-body { border: 0; color: #FAFCFB; } .portlet.solid.grey-salsa > .portlet-title > .caption { font-weight: 400; } .portlet.solid.grey-salsa > .portlet-title > .caption > i { color: #FAFCFB; } .portlet.solid.grey-salsa > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.grey-salsa > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.grey-salsa > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.grey-salsa > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.grey-salsa > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.grey-salsa > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.grey-salsa { border: 1px solid #cacfd8; border-top: 0; } .portlet.box.grey-salsa > .portlet-title { background-color: #ACB5C3; } .portlet.box.grey-salsa > .portlet-title > .caption { color: #FAFCFB; } .portlet.box.grey-salsa > .portlet-title > .caption > i { color: #FAFCFB; } .portlet.box.grey-salsa > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #edeff2; color: #fcfcfd; } .portlet.box.grey-salsa > .portlet-title > .actions .btn-default > i { color: white; } .portlet.box.grey-salsa > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default:active, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default.active { border: 1px solid white; color: white; } .portlet > .portlet-body.grey-salt, .portlet.grey-salt { background-color: #bfcad1; } .portlet.solid.grey-salt > .portlet-title, .portlet.solid.grey-salt > .portlet-body { border: 0; color: #FAFCFB; } .portlet.solid.grey-salt > .portlet-title > .caption { font-weight: 400; } .portlet.solid.grey-salt > .portlet-title > .caption > i { color: #FAFCFB; } .portlet.solid.grey-salt > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.grey-salt > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.grey-salt > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.grey-salt > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.grey-salt > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.grey-salt > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.grey-salt { border: 1px solid #dde3e6; border-top: 0; } .portlet.box.grey-salt > .portlet-title { background-color: #bfcad1; } .portlet.box.grey-salt > .portlet-title > .caption { color: #FAFCFB; } .portlet.box.grey-salt > .portlet-title > .caption > i { color: #FAFCFB; } .portlet.box.grey-salt > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid white; color: white; } .portlet.box.grey-salt > .portlet-title > .actions .btn-default > i { color: white; } .portlet.box.grey-salt > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-salt > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-salt > .portlet-title > .actions .btn-default:active, .portlet.box.grey-salt > .portlet-title > .actions .btn-default.active { border: 1px solid white; color: white; } .portlet > .portlet-body.grey-mint, .portlet.grey-mint { background-color: #525e64; } .portlet.solid.grey-mint > .portlet-title, .portlet.solid.grey-mint > .portlet-body { border: 0; color: #FFFFFF; } .portlet.solid.grey-mint > .portlet-title > .caption { font-weight: 400; } .portlet.solid.grey-mint > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.solid.grey-mint > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.grey-mint > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.grey-mint > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.grey-mint > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.grey-mint > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.grey-mint > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.grey-mint { border: 1px solid #697880; border-top: 0; } .portlet.box.grey-mint > .portlet-title { background-color: #525e64; } .portlet.box.grey-mint > .portlet-title > .caption { color: #FFFFFF; } .portlet.box.grey-mint > .portlet-title > .caption > i { color: #FFFFFF; } .portlet.box.grey-mint > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #88979e; color: #96a3a9; } .portlet.box.grey-mint > .portlet-title > .actions .btn-default > i { color: #9faab0; } .portlet.box.grey-mint > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-mint > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-mint > .portlet-title > .actions .btn-default:active, .portlet.box.grey-mint > .portlet-title > .actions .btn-default.active { border: 1px solid #a4afb5; color: #b2bcc0; } .portlet > .portlet-body.red, .portlet.red { background-color: #e7505a; } .portlet.solid.red > .portlet-title, .portlet.solid.red > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.red > .portlet-title > .caption { font-weight: 400; } .portlet.solid.red > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.red > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.red > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.red > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.red > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.red > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.red > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.red { border: 1px solid #ed7d84; border-top: 0; } .portlet.box.red > .portlet-title { background-color: #e7505a; } .portlet.box.red > .portlet-title > .caption { color: #ffffff; } .portlet.box.red > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.red > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #f5b3b7; color: #f8c9cc; } .portlet.box.red > .portlet-title > .actions .btn-default > i { color: #f9d7d9; } .portlet.box.red > .portlet-title > .actions .btn-default:hover, .portlet.box.red > .portlet-title > .actions .btn-default:focus, .portlet.box.red > .portlet-title > .actions .btn-default:active, .portlet.box.red > .portlet-title > .actions .btn-default.active { border: 1px solid #fbe0e1; color: #fef6f6; } .portlet > .portlet-body.red-pink, .portlet.red-pink { background-color: #E08283; } .portlet.solid.red-pink > .portlet-title, .portlet.solid.red-pink > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.red-pink > .portlet-title > .caption { font-weight: 400; } .portlet.solid.red-pink > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.red-pink > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.red-pink > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.red-pink > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.red-pink > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.red-pink > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.red-pink > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.red-pink { border: 1px solid #eaabac; border-top: 0; } .portlet.box.red-pink > .portlet-title { background-color: #E08283; } .portlet.box.red-pink > .portlet-title > .caption { color: #ffffff; } .portlet.box.red-pink > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.red-pink > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #f6dcdc; color: #fbf0f0; } .portlet.box.red-pink > .portlet-title > .actions .btn-default > i { color: #fefdfd; } .portlet.box.red-pink > .portlet-title > .actions .btn-default:hover, .portlet.box.red-pink > .portlet-title > .actions .btn-default:focus, .portlet.box.red-pink > .portlet-title > .actions .btn-default:active, .portlet.box.red-pink > .portlet-title > .actions .btn-default.active { border: 1px solid white; color: white; } .portlet > .portlet-body.red-sunglo, .portlet.red-sunglo { background-color: #E26A6A; } .portlet.solid.red-sunglo > .portlet-title, .portlet.solid.red-sunglo > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.red-sunglo > .portlet-title > .caption { font-weight: 400; } .portlet.solid.red-sunglo > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.red-sunglo > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.red-sunglo > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.red-sunglo > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.red-sunglo > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.red-sunglo > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.red-sunglo > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.red-sunglo { border: 1px solid #ea9595; border-top: 0; } .portlet.box.red-sunglo > .portlet-title { background-color: #E26A6A; } .portlet.box.red-sunglo > .portlet-title > .caption { color: #ffffff; } .portlet.box.red-sunglo > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.red-sunglo > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #f4c8c8; color: #f8dddd; } .portlet.box.red-sunglo > .portlet-title > .actions .btn-default > i { color: #fbeaea; } .portlet.box.red-sunglo > .portlet-title > .actions .btn-default:hover, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default:focus, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default:active, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default.active { border: 1px solid #fdf3f3; color: white; } .portlet > .portlet-body.red-intense, .portlet.red-intense { background-color: #e35b5a; } .portlet.solid.red-intense > .portlet-title, .portlet.solid.red-intense > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.red-intense > .portlet-title > .caption { font-weight: 400; } .portlet.solid.red-intense > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.red-intense > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.red-intense > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.red-intense > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.red-intense > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.red-intense > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.red-intense > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.red-intense { border: 1px solid #ea8686; border-top: 0; } .portlet.box.red-intense > .portlet-title { background-color: #e35b5a; } .portlet.box.red-intense > .portlet-title > .caption { color: #ffffff; } .portlet.box.red-intense > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.red-intense > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #f3baba; color: #f7d0d0; } .portlet.box.red-intense > .portlet-title > .actions .btn-default > i { color: #f9dddd; } .portlet.box.red-intense > .portlet-title > .actions .btn-default:hover, .portlet.box.red-intense > .portlet-title > .actions .btn-default:focus, .portlet.box.red-intense > .portlet-title > .actions .btn-default:active, .portlet.box.red-intense > .portlet-title > .actions .btn-default.active { border: 1px solid #fbe6e6; color: #fefbfb; } .portlet > .portlet-body.red-thunderbird, .portlet.red-thunderbird { background-color: #D91E18; } .portlet.solid.red-thunderbird > .portlet-title, .portlet.solid.red-thunderbird > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.red-thunderbird > .portlet-title > .caption { font-weight: 400; } .portlet.solid.red-thunderbird > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.red-thunderbird > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.red-thunderbird > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.red-thunderbird > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.red-thunderbird > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.red-thunderbird > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.red-thunderbird > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.red-thunderbird { border: 1px solid #e9403b; border-top: 0; } .portlet.box.red-thunderbird > .portlet-title { background-color: #D91E18; } .portlet.box.red-thunderbird > .portlet-title > .caption { color: #ffffff; } .portlet.box.red-thunderbird > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #ef7672; color: #f28c89; } .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default > i { color: #f39997; } .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:hover, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:focus, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:active, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default.active { border: 1px solid #f4a2a0; color: #f7b9b7; } .portlet > .portlet-body.red-flamingo, .portlet.red-flamingo { background-color: #EF4836; } .portlet.solid.red-flamingo > .portlet-title, .portlet.solid.red-flamingo > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.red-flamingo > .portlet-title > .caption { font-weight: 400; } .portlet.solid.red-flamingo > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.red-flamingo > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.red-flamingo > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.red-flamingo > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.red-flamingo > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.red-flamingo > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.red-flamingo > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.red-flamingo { border: 1px solid #f37365; border-top: 0; } .portlet.box.red-flamingo > .portlet-title { background-color: #EF4836; } .portlet.box.red-flamingo > .portlet-title > .caption { color: #ffffff; } .portlet.box.red-flamingo > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.red-flamingo > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #f7a79e; color: #f9bcb6; } .portlet.box.red-flamingo > .portlet-title > .actions .btn-default > i { color: #fac9c4; } .portlet.box.red-flamingo > .portlet-title > .actions .btn-default:hover, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default:focus, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default:active, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default.active { border: 1px solid #fbd2cd; color: #fde7e5; } .portlet > .portlet-body.red-soft, .portlet.red-soft { background-color: #d05454; } .portlet.solid.red-soft > .portlet-title, .portlet.solid.red-soft > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.red-soft > .portlet-title > .caption { font-weight: 400; } .portlet.solid.red-soft > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.red-soft > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.red-soft > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.red-soft > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.red-soft > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.red-soft > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.red-soft > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.red-soft { border: 1px solid #db7c7c; border-top: 0; } .portlet.box.red-soft > .portlet-title { background-color: #d05454; } .portlet.box.red-soft > .portlet-title > .caption { color: #ffffff; } .portlet.box.red-soft > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.red-soft > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #e8acac; color: #eec0c0; } .portlet.box.red-soft > .portlet-title > .actions .btn-default > i { color: #f1cccc; } .portlet.box.red-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.red-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.red-soft > .portlet-title > .actions .btn-default:active, .portlet.box.red-soft > .portlet-title > .actions .btn-default.active { border: 1px solid #f3d4d4; color: #f9e8e8; } .portlet > .portlet-body.red-haze, .portlet.red-haze { background-color: #f36a5a; } .portlet.solid.red-haze > .portlet-title, .portlet.solid.red-haze > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.red-haze > .portlet-title > .caption { font-weight: 400; } .portlet.solid.red-haze > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.red-haze > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.red-haze > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.red-haze > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.red-haze > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.red-haze > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.red-haze > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.red-haze { border: 1px solid #f6958a; border-top: 0; } .portlet.box.red-haze > .portlet-title { background-color: #f36a5a; } .portlet.box.red-haze > .portlet-title > .caption { color: #ffffff; } .portlet.box.red-haze > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.red-haze > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #fbc8c3; color: #fcdeda; } .portlet.box.red-haze > .portlet-title > .actions .btn-default > i { color: #fdebe9; } .portlet.box.red-haze > .portlet-title > .actions .btn-default:hover, .portlet.box.red-haze > .portlet-title > .actions .btn-default:focus, .portlet.box.red-haze > .portlet-title > .actions .btn-default:active, .portlet.box.red-haze > .portlet-title > .actions .btn-default.active { border: 1px solid #fef3f2; color: white; } .portlet > .portlet-body.red-mint, .portlet.red-mint { background-color: #e43a45; } .portlet.solid.red-mint > .portlet-title, .portlet.solid.red-mint > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.red-mint > .portlet-title > .caption { font-weight: 400; } .portlet.solid.red-mint > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.red-mint > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.red-mint > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.red-mint > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.red-mint > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.red-mint > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.red-mint > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.red-mint { border: 1px solid #ea676f; border-top: 0; } .portlet.box.red-mint > .portlet-title { background-color: #e43a45; } .portlet.box.red-mint > .portlet-title > .caption { color: #ffffff; } .portlet.box.red-mint > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.red-mint > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #f29da2; color: #f5b3b7; } .portlet.box.red-mint > .portlet-title > .actions .btn-default > i { color: #f6c1c4; } .portlet.box.red-mint > .portlet-title > .actions .btn-default:hover, .portlet.box.red-mint > .portlet-title > .actions .btn-default:focus, .portlet.box.red-mint > .portlet-title > .actions .btn-default:active, .portlet.box.red-mint > .portlet-title > .actions .btn-default.active { border: 1px solid #f8cacd; color: #fbe0e2; } .portlet > .portlet-body.yellow, .portlet.yellow { background-color: #c49f47; } .portlet.solid.yellow > .portlet-title, .portlet.solid.yellow > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.yellow > .portlet-title > .caption { font-weight: 400; } .portlet.solid.yellow > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.yellow > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.yellow > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.yellow > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.yellow > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.yellow > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.yellow > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.yellow { border: 1px solid #d0b36e; border-top: 0; } .portlet.box.yellow > .portlet-title { background-color: #c49f47; } .portlet.box.yellow > .portlet-title > .caption { color: #ffffff; } .portlet.box.yellow > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.yellow > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #dfcb9c; color: #e5d5af; } .portlet.box.yellow > .portlet-title > .actions .btn-default > i { color: #e9dbbb; } .portlet.box.yellow > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow > .portlet-title > .actions .btn-default:active, .portlet.box.yellow > .portlet-title > .actions .btn-default.active { border: 1px solid #ecdfc3; color: #f2ead6; } .portlet > .portlet-body.yellow-gold, .portlet.yellow-gold { background-color: #E87E04; } .portlet.solid.yellow-gold > .portlet-title, .portlet.solid.yellow-gold > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.yellow-gold > .portlet-title > .caption { font-weight: 400; } .portlet.solid.yellow-gold > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.yellow-gold > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.yellow-gold > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.yellow-gold > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.yellow-gold > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.yellow-gold > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.yellow-gold > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.yellow-gold { border: 1px solid #fb9724; border-top: 0; } .portlet.box.yellow-gold > .portlet-title { background-color: #E87E04; } .portlet.box.yellow-gold > .portlet-title > .caption { color: #ffffff; } .portlet.box.yellow-gold > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.yellow-gold > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #fcb460; color: #fdbf79; } .portlet.box.yellow-gold > .portlet-title > .actions .btn-default > i { color: #fdc788; } .portlet.box.yellow-gold > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default.active { border: 1px solid #fdcb92; color: #fed7ab; } .portlet > .portlet-body.yellow-casablanca, .portlet.yellow-casablanca { background-color: #f2784b; } .portlet.solid.yellow-casablanca > .portlet-title, .portlet.solid.yellow-casablanca > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.yellow-casablanca > .portlet-title > .caption { font-weight: 400; } .portlet.solid.yellow-casablanca > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.yellow-casablanca > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.yellow-casablanca > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.yellow-casablanca > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.yellow-casablanca > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.yellow-casablanca > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.yellow-casablanca > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.yellow-casablanca { border: 1px solid #f59c7b; border-top: 0; } .portlet.box.yellow-casablanca > .portlet-title { background-color: #f2784b; } .portlet.box.yellow-casablanca > .portlet-title > .caption { color: #ffffff; } .portlet.box.yellow-casablanca > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #fac6b4; color: #fbd8cb; } .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default > i { color: #fce3da; } .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default.active { border: 1px solid #fdeae3; color: #fffcfb; } .portlet > .portlet-body.yellow-crusta, .portlet.yellow-crusta { background-color: #f3c200; } .portlet.solid.yellow-crusta > .portlet-title, .portlet.solid.yellow-crusta > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.yellow-crusta > .portlet-title > .caption { font-weight: 400; } .portlet.solid.yellow-crusta > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.yellow-crusta > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.yellow-crusta > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.yellow-crusta > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.yellow-crusta > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.yellow-crusta > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.yellow-crusta > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.yellow-crusta { border: 1px solid #ffd327; border-top: 0; } .portlet.box.yellow-crusta > .portlet-title { background-color: #f3c200; } .portlet.box.yellow-crusta > .portlet-title > .caption { color: #ffffff; } .portlet.box.yellow-crusta > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #ffe064; color: #ffe57e; } .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default > i { color: #ffe88d; } .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default.active { border: 1px solid #ffea97; color: #ffefb1; } .portlet > .portlet-body.yellow-lemon, .portlet.yellow-lemon { background-color: #F7CA18; } .portlet.solid.yellow-lemon > .portlet-title, .portlet.solid.yellow-lemon > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.yellow-lemon > .portlet-title > .caption { font-weight: 400; } .portlet.solid.yellow-lemon > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.yellow-lemon > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.yellow-lemon > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.yellow-lemon > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.yellow-lemon > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.yellow-lemon > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.yellow-lemon > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.yellow-lemon { border: 1px solid #f9d549; border-top: 0; } .portlet.box.yellow-lemon > .portlet-title { background-color: #F7CA18; } .portlet.box.yellow-lemon > .portlet-title > .caption { color: #ffffff; } .portlet.box.yellow-lemon > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #fbe384; color: #fce99d; } .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default > i { color: #fcecac; } .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default.active { border: 1px solid #fceeb6; color: #fdf4ce; } .portlet > .portlet-body.yellow-saffron, .portlet.yellow-saffron { background-color: #F4D03F; } .portlet.solid.yellow-saffron > .portlet-title, .portlet.solid.yellow-saffron > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.yellow-saffron > .portlet-title > .caption { font-weight: 400; } .portlet.solid.yellow-saffron > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.yellow-saffron > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.yellow-saffron > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.yellow-saffron > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.yellow-saffron > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.yellow-saffron > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.yellow-saffron > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.yellow-saffron { border: 1px solid #f7dc6f; border-top: 0; } .portlet.box.yellow-saffron > .portlet-title { background-color: #F4D03F; } .portlet.box.yellow-saffron > .portlet-title > .caption { color: #ffffff; } .portlet.box.yellow-saffron > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #faeaa9; color: #fbf0c1; } .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default > i { color: #fcf3d0; } .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default.active { border: 1px solid #fdf6d9; color: #fefcf1; } .portlet > .portlet-body.yellow-soft, .portlet.yellow-soft { background-color: #c8d046; } .portlet.solid.yellow-soft > .portlet-title, .portlet.solid.yellow-soft > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.yellow-soft > .portlet-title > .caption { font-weight: 400; } .portlet.solid.yellow-soft > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.yellow-soft > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.yellow-soft > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.yellow-soft > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.yellow-soft > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.yellow-soft > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.yellow-soft > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.yellow-soft { border: 1px solid #d4da6f; border-top: 0; } .portlet.box.yellow-soft > .portlet-title { background-color: #c8d046; } .portlet.box.yellow-soft > .portlet-title > .caption { color: #ffffff; } .portlet.box.yellow-soft > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.yellow-soft > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #e3e79f; color: #e9ecb4; } .portlet.box.yellow-soft > .portlet-title > .actions .btn-default > i { color: #ecefc0; } .portlet.box.yellow-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-soft > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-soft > .portlet-title > .actions .btn-default.active { border: 1px solid #eff1c8; color: #f5f6dc; } .portlet > .portlet-body.yellow-haze, .portlet.yellow-haze { background-color: #c5bf66; } .portlet.solid.yellow-haze > .portlet-title, .portlet.solid.yellow-haze > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.yellow-haze > .portlet-title > .caption { font-weight: 400; } .portlet.solid.yellow-haze > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.yellow-haze > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.yellow-haze > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.yellow-haze > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.yellow-haze > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.yellow-haze > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.yellow-haze > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.yellow-haze { border: 1px solid #d3ce8b; border-top: 0; } .portlet.box.yellow-haze > .portlet-title { background-color: #c5bf66; } .portlet.box.yellow-haze > .portlet-title > .caption { color: #ffffff; } .portlet.box.yellow-haze > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.yellow-haze > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #e4e1b7; color: #ebe9ca; } .portlet.box.yellow-haze > .portlet-title > .actions .btn-default > i { color: #efedd5; } .portlet.box.yellow-haze > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-haze > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-haze > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-haze > .portlet-title > .actions .btn-default.active { border: 1px solid #f2f1dc; color: #f9f8ef; } .portlet > .portlet-body.yellow-mint, .portlet.yellow-mint { background-color: #c5b96b; } .portlet.solid.yellow-mint > .portlet-title, .portlet.solid.yellow-mint > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.yellow-mint > .portlet-title > .caption { font-weight: 400; } .portlet.solid.yellow-mint > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.yellow-mint > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.yellow-mint > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.yellow-mint > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.yellow-mint > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.yellow-mint > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.yellow-mint > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.yellow-mint { border: 1px solid #d3ca90; border-top: 0; } .portlet.box.yellow-mint > .portlet-title { background-color: #c5b96b; } .portlet.box.yellow-mint > .portlet-title > .caption { color: #ffffff; } .portlet.box.yellow-mint > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.yellow-mint > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #e5dfbc; color: #ece8ce; } .portlet.box.yellow-mint > .portlet-title > .actions .btn-default > i { color: #f0edd9; } .portlet.box.yellow-mint > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-mint > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-mint > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-mint > .portlet-title > .actions .btn-default.active { border: 1px solid #f3f0e0; color: #faf9f3; } .portlet > .portlet-body.purple, .portlet.purple { background-color: #8E44AD; } .portlet.solid.purple > .portlet-title, .portlet.solid.purple > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.purple > .portlet-title > .caption { font-weight: 400; } .portlet.solid.purple > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.purple > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.purple > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.purple > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.purple > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.purple > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.purple > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.purple { border: 1px solid #a563c1; border-top: 0; } .portlet.box.purple > .portlet-title { background-color: #8E44AD; } .portlet.box.purple > .portlet-title > .caption { color: #ffffff; } .portlet.box.purple > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.purple > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #bf8ed3; color: #c9a1da; } .portlet.box.purple > .portlet-title > .actions .btn-default > i { color: #cfacde; } .portlet.box.purple > .portlet-title > .actions .btn-default:hover, .portlet.box.purple > .portlet-title > .actions .btn-default:focus, .portlet.box.purple > .portlet-title > .actions .btn-default:active, .portlet.box.purple > .portlet-title > .actions .btn-default.active { border: 1px solid #d4b3e1; color: #dec5e8; } .portlet > .portlet-body.purple-plum, .portlet.purple-plum { background-color: #8775a7; } .portlet.solid.purple-plum > .portlet-title, .portlet.solid.purple-plum > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.purple-plum > .portlet-title > .caption { font-weight: 400; } .portlet.solid.purple-plum > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.purple-plum > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.purple-plum > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.purple-plum > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.purple-plum > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.purple-plum > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.purple-plum > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.purple-plum { border: 1px solid #a294bb; border-top: 0; } .portlet.box.purple-plum > .portlet-title { background-color: #8775a7; } .portlet.box.purple-plum > .portlet-title > .caption { color: #ffffff; } .portlet.box.purple-plum > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.purple-plum > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #c3bad3; color: #d0c9dd; } .portlet.box.purple-plum > .portlet-title > .actions .btn-default > i { color: #d8d2e3; } .portlet.box.purple-plum > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-plum > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-plum > .portlet-title > .actions .btn-default:active, .portlet.box.purple-plum > .portlet-title > .actions .btn-default.active { border: 1px solid #ded9e7; color: #ebe8f0; } .portlet > .portlet-body.purple-medium, .portlet.purple-medium { background-color: #BF55EC; } .portlet.solid.purple-medium > .portlet-title, .portlet.solid.purple-medium > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.purple-medium > .portlet-title > .caption { font-weight: 400; } .portlet.solid.purple-medium > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.purple-medium > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.purple-medium > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.purple-medium > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.purple-medium > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.purple-medium > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.purple-medium > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.purple-medium { border: 1px solid #d083f1; border-top: 0; } .portlet.box.purple-medium > .portlet-title { background-color: #BF55EC; } .portlet.box.purple-medium > .portlet-title > .caption { color: #ffffff; } .portlet.box.purple-medium > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.purple-medium > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #e5baf7; color: #eed1fa; } .portlet.box.purple-medium > .portlet-title > .actions .btn-default > i { color: #f3dffb; } .portlet.box.purple-medium > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-medium > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-medium > .portlet-title > .actions .btn-default:active, .portlet.box.purple-medium > .portlet-title > .actions .btn-default.active { border: 1px solid #f6e8fc; color: white; } .portlet > .portlet-body.purple-studio, .portlet.purple-studio { background-color: #8E44AD; } .portlet.solid.purple-studio > .portlet-title, .portlet.solid.purple-studio > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.purple-studio > .portlet-title > .caption { font-weight: 400; } .portlet.solid.purple-studio > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.purple-studio > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.purple-studio > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.purple-studio > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.purple-studio > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.purple-studio > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.purple-studio > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.purple-studio { border: 1px solid #a563c1; border-top: 0; } .portlet.box.purple-studio > .portlet-title { background-color: #8E44AD; } .portlet.box.purple-studio > .portlet-title > .caption { color: #ffffff; } .portlet.box.purple-studio > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.purple-studio > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #bf8ed3; color: #c9a1da; } .portlet.box.purple-studio > .portlet-title > .actions .btn-default > i { color: #cfacde; } .portlet.box.purple-studio > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-studio > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-studio > .portlet-title > .actions .btn-default:active, .portlet.box.purple-studio > .portlet-title > .actions .btn-default.active { border: 1px solid #d4b3e1; color: #dec5e8; } .portlet > .portlet-body.purple-wisteria, .portlet.purple-wisteria { background-color: #9B59B6; } .portlet.solid.purple-wisteria > .portlet-title, .portlet.solid.purple-wisteria > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.purple-wisteria > .portlet-title > .caption { font-weight: 400; } .portlet.solid.purple-wisteria > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.purple-wisteria > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.purple-wisteria > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.purple-wisteria > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.purple-wisteria > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.purple-wisteria > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.purple-wisteria > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.purple-wisteria { border: 1px solid #b07cc6; border-top: 0; } .portlet.box.purple-wisteria > .portlet-title { background-color: #9B59B6; } .portlet.box.purple-wisteria > .portlet-title > .caption { color: #ffffff; } .portlet.box.purple-wisteria > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #caa7d8; color: #d5b9e0; } .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default > i { color: #dbc3e5; } .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:active, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default.active { border: 1px solid #dfcae8; color: #eadcf0; } .portlet > .portlet-body.purple-seance, .portlet.purple-seance { background-color: #9A12B3; } .portlet.solid.purple-seance > .portlet-title, .portlet.solid.purple-seance > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.purple-seance > .portlet-title > .caption { font-weight: 400; } .portlet.solid.purple-seance > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.purple-seance > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.purple-seance > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.purple-seance > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.purple-seance > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.purple-seance > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.purple-seance > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.purple-seance { border: 1px solid #c217e1; border-top: 0; } .portlet.box.purple-seance > .portlet-title { background-color: #9A12B3; } .portlet.box.purple-seance > .portlet-title > .caption { color: #ffffff; } .portlet.box.purple-seance > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.purple-seance > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #d349ed; color: #d960ef; } .portlet.box.purple-seance > .portlet-title > .actions .btn-default > i { color: #dc6ef0; } .portlet.box.purple-seance > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-seance > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-seance > .portlet-title > .actions .btn-default:active, .portlet.box.purple-seance > .portlet-title > .actions .btn-default.active { border: 1px solid #de77f1; color: #e48ef4; } .portlet > .portlet-body.purple-intense, .portlet.purple-intense { background-color: #8775a7; } .portlet.solid.purple-intense > .portlet-title, .portlet.solid.purple-intense > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.purple-intense > .portlet-title > .caption { font-weight: 400; } .portlet.solid.purple-intense > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.purple-intense > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.purple-intense > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.purple-intense > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.purple-intense > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.purple-intense > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.purple-intense > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.purple-intense { border: 1px solid #a294bb; border-top: 0; } .portlet.box.purple-intense > .portlet-title { background-color: #8775a7; } .portlet.box.purple-intense > .portlet-title > .caption { color: #ffffff; } .portlet.box.purple-intense > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.purple-intense > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #c3bad3; color: #d0c9dd; } .portlet.box.purple-intense > .portlet-title > .actions .btn-default > i { color: #d8d2e3; } .portlet.box.purple-intense > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-intense > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-intense > .portlet-title > .actions .btn-default:active, .portlet.box.purple-intense > .portlet-title > .actions .btn-default.active { border: 1px solid #ded9e7; color: #ebe8f0; } .portlet > .portlet-body.purple-sharp, .portlet.purple-sharp { background-color: #796799; } .portlet.solid.purple-sharp > .portlet-title, .portlet.solid.purple-sharp > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.purple-sharp > .portlet-title > .caption { font-weight: 400; } .portlet.solid.purple-sharp > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.purple-sharp > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.purple-sharp > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.purple-sharp > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.purple-sharp > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.purple-sharp > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.purple-sharp > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.purple-sharp { border: 1px solid #9486ad; border-top: 0; } .portlet.box.purple-sharp > .portlet-title { background-color: #796799; } .portlet.box.purple-sharp > .portlet-title > .caption { color: #ffffff; } .portlet.box.purple-sharp > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.purple-sharp > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #b4aac6; color: #c2b9d0; } .portlet.box.purple-sharp > .portlet-title > .actions .btn-default > i { color: #cac3d6; } .portlet.box.purple-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default.active { border: 1px solid #cfc9db; color: #ddd8e5; } .portlet > .portlet-body.purple-soft, .portlet.purple-soft { background-color: #8877a9; } .portlet.solid.purple-soft > .portlet-title, .portlet.solid.purple-soft > .portlet-body { border: 0; color: #ffffff; } .portlet.solid.purple-soft > .portlet-title > .caption { font-weight: 400; } .portlet.solid.purple-soft > .portlet-title > .caption > i { color: #ffffff; } .portlet.solid.purple-soft > .portlet-title > .tools > a.remove { background-image: url(img/portlet-remove-icon-white.png); } .portlet.solid.purple-soft > .portlet-title > .tools > a.config { background-image: url(img/portlet-config-icon-white.png); } .portlet.solid.purple-soft > .portlet-title > .tools > a.reload { background-image: url(img/portlet-reload-icon-white.png); } .portlet.solid.purple-soft > .portlet-title > .tools > a.expand { background-image: url(img/portlet-expand-icon-white.png); } .portlet.solid.purple-soft > .portlet-title > .tools > a.collapse { background-image: url(img/portlet-collapse-icon-white.png); } .portlet.solid.purple-soft > .portlet-title > .tools > a.fullscreen { color: #fdfdfd; } .portlet.box.purple-soft { border: 1px solid #a396bd; border-top: 0; } .portlet.box.purple-soft > .portlet-title { background-color: #8877a9; } .portlet.box.purple-soft > .portlet-title > .caption { color: #ffffff; } .portlet.box.purple-soft > .portlet-title > .caption > i { color: #ffffff; } .portlet.box.purple-soft > .portlet-title > .actions .btn-default { background: transparent !important; background-color: transparent !important; border: 1px solid #c4bcd4; color: #d2cbde; } .portlet.box.purple-soft > .portlet-title > .actions .btn-default > i { color: #dad5e4; } .portlet.box.purple-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-soft > .portlet-title > .actions .btn-default:active, .portlet.box.purple-soft > .portlet-title > .actions .btn-default.active { border: 1px solid #dfdbe8; color: #edebf2; } /*** Customized Progress Bars ***/ .progress { border: 0; background-image: none; filter: none; box-shadow: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .progress.progress-sm { height: 12px; } .page-md .progress { text-indent: -99999px; } /* Custom colors */ .progress-bar.white { background: #ffffff !important; color: #666 !important; } .progress-bar.default { background: #e1e5ec !important; color: #666 !important; } .progress-bar.dark { background: #2f353b !important; color: #FFFFFF !important; } .progress-bar.blue { background: #3598dc !important; color: #FFFFFF !important; } .progress-bar.blue-madison { background: #578ebe !important; color: #FFFFFF !important; } .progress-bar.blue-chambray { background: #2C3E50 !important; color: #FFFFFF !important; } .progress-bar.blue-ebonyclay { background: #22313F !important; color: #FFFFFF !important; } .progress-bar.blue-hoki { background: #67809F !important; color: #FFFFFF !important; } .progress-bar.blue-steel { background: #4B77BE !important; color: #FFFFFF !important; } .progress-bar.blue-soft { background: #4c87b9 !important; color: #FFFFFF !important; } .progress-bar.blue-dark { background: #5e738b !important; color: #FFFFFF !important; } .progress-bar.blue-sharp { background: #5C9BD1 !important; color: #FFFFFF !important; } .progress-bar.green { background: #32c5d2 !important; color: #FFFFFF !important; } .progress-bar.green-meadow { background: #1BBC9B !important; color: #FFFFFF !important; } .progress-bar.green-seagreen { background: #1BA39C !important; color: #FFFFFF !important; } .progress-bar.green-turquoise { background: #36D7B7 !important; color: #FFFFFF !important; } .progress-bar.green-haze { background: #44b6ae !important; color: #FFFFFF !important; } .progress-bar.green-jungle { background: #26C281 !important; color: #FFFFFF !important; } .progress-bar.green-soft { background: #3faba4 !important; color: #FFFFFF !important; } .progress-bar.green-dark { background: #4DB3A2 !important; color: #FFFFFF !important; } .progress-bar.green-sharp { background: #2ab4c0 !important; color: #FFFFFF !important; } .progress-bar.grey { background: #E5E5E5 !important; color: #333333 !important; } .progress-bar.grey-steel { background: #e9edef !important; color: #80898e !important; } .progress-bar.grey-cararra { background: #fafafa !important; color: #333333 !important; } .progress-bar.grey-gallery { background: #555555 !important; color: #ffffff !important; } .progress-bar.grey-cascade { background: #95A5A6 !important; color: #FFFFFF !important; } .progress-bar.grey-silver { background: #BFBFBF !important; color: #FAFCFB !important; } .progress-bar.grey-salsa { background: #ACB5C3 !important; color: #FAFCFB !important; } .progress-bar.grey-salt { background: #bfcad1 !important; color: #FAFCFB !important; } .progress-bar.grey-mint { background: #525e64 !important; color: #FFFFFF !important; } .progress-bar.red { background: #e7505a !important; color: #ffffff !important; } .progress-bar.red-pink { background: #E08283 !important; color: #ffffff !important; } .progress-bar.red-sunglo { background: #E26A6A !important; color: #ffffff !important; } .progress-bar.red-intense { background: #e35b5a !important; color: #ffffff !important; } .progress-bar.red-thunderbird { background: #D91E18 !important; color: #ffffff !important; } .progress-bar.red-flamingo { background: #EF4836 !important; color: #ffffff !important; } .progress-bar.red-soft { background: #d05454 !important; color: #ffffff !important; } .progress-bar.red-haze { background: #f36a5a !important; color: #ffffff !important; } .progress-bar.red-mint { background: #e43a45 !important; color: #ffffff !important; } .progress-bar.yellow { background: #c49f47 !important; color: #ffffff !important; } .progress-bar.yellow-gold { background: #E87E04 !important; color: #ffffff !important; } .progress-bar.yellow-casablanca { background: #f2784b !important; color: #ffffff !important; } .progress-bar.yellow-crusta { background: #f3c200 !important; color: #ffffff !important; } .progress-bar.yellow-lemon { background: #F7CA18 !important; color: #ffffff !important; } .progress-bar.yellow-saffron { background: #F4D03F !important; color: #ffffff !important; } .progress-bar.yellow-soft { background: #c8d046 !important; color: #ffffff !important; } .progress-bar.yellow-haze { background: #c5bf66 !important; color: #ffffff !important; } .progress-bar.yellow-mint { background: #c5b96b !important; color: #ffffff !important; } .progress-bar.purple { background: #8E44AD !important; color: #ffffff !important; } .progress-bar.purple-plum { background: #8775a7 !important; color: #ffffff !important; } .progress-bar.purple-medium { background: #BF55EC !important; color: #ffffff !important; } .progress-bar.purple-studio { background: #8E44AD !important; color: #ffffff !important; } .progress-bar.purple-wisteria { background: #9B59B6 !important; color: #ffffff !important; } .progress-bar.purple-seance { background: #9A12B3 !important; color: #ffffff !important; } .progress-bar.purple-intense { background: #8775a7 !important; color: #ffffff !important; } .progress-bar.purple-sharp { background: #796799 !important; color: #ffffff !important; } .progress-bar.purple-soft { background: #8877a9 !important; color: #ffffff !important; } /*** Dashboard Stats ***/ .dashboard-stat { display: block; margin-bottom: 25px; overflow: hidden; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .dashboard-stat:before, .dashboard-stat:after { content: " "; display: table; } .dashboard-stat:after { clear: both; } .portlet .dashboard-stat:last-child { margin-bottom: 0; } .dashboard-stat .visual { width: 80px; height: 80px; display: block; float: left; padding-top: 10px; padding-left: 15px; margin-bottom: 15px; font-size: 35px; line-height: 35px; } .dashboard-stat .visual > i { margin-left: -35px; font-size: 110px; line-height: 110px; } .dashboard-stat .details { position: absolute; right: 15px; padding-right: 15px; } .dashboard-stat .details .number { padding-top: 25px; text-align: right; font-size: 34px; line-height: 36px; letter-spacing: -1px; margin-bottom: 0px; font-weight: 300; } .dashboard-stat .details .desc { text-align: right; font-size: 16px; letter-spacing: 0px; font-weight: 300; } .dashboard-stat .more { clear: both; display: block; padding: 6px 10px 6px 10px; position: relative; text-transform: uppercase; font-weight: 300; font-size: 11px; opacity: 0.7; filter: alpha(opacity=70); } .dashboard-stat .more:hover { text-decoration: none; opacity: 0.9; filter: alpha(opacity=90); } .dashboard-stat .more > i { display: inline-block; margin-top: 1px; float: right; } .dashboard-stat.dashboard-stat-v2 .visual { padding-top: 35px; margin-bottom: 40px; } .dashboard-stat.white { background-color: #ffffff; } .dashboard-stat.white.dashboard-stat-light:hover { background-color: whitesmoke; } .dashboard-stat.white .visual > i { color: #666; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.white .details .number { color: #666; } .dashboard-stat.white .details .desc { color: #666; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.white .more { color: #666; background-color: whitesmoke; } .dashboard-stat.default { background-color: #e1e5ec; } .dashboard-stat.default.dashboard-stat-light:hover { background-color: #d5dae4; } .dashboard-stat.default .visual > i { color: #666; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.default .details .number { color: #666; } .dashboard-stat.default .details .desc { color: #666; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.default .more { color: #666; background-color: #d5dae4; } .dashboard-stat.dark { background-color: #2f353b; } .dashboard-stat.dark.dashboard-stat-light:hover { background-color: #262b30; } .dashboard-stat.dark .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.dark .details .number { color: #FFFFFF; } .dashboard-stat.dark .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.dark .more { color: #FFFFFF; background-color: #262b30; } .dashboard-stat.blue { background-color: #3598dc; } .dashboard-stat.blue.dashboard-stat-light:hover { background-color: #258fd7; } .dashboard-stat.blue .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.blue .details .number { color: #FFFFFF; } .dashboard-stat.blue .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.blue .more { color: #FFFFFF; background-color: #258fd7; } .dashboard-stat.blue-madison { background-color: #578ebe; } .dashboard-stat.blue-madison.dashboard-stat-light:hover { background-color: #4884b8; } .dashboard-stat.blue-madison .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.blue-madison .details .number { color: #FFFFFF; } .dashboard-stat.blue-madison .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.blue-madison .more { color: #FFFFFF; background-color: #4884b8; } .dashboard-stat.blue-chambray { background-color: #2C3E50; } .dashboard-stat.blue-chambray.dashboard-stat-light:hover { background-color: #253443; } .dashboard-stat.blue-chambray .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.blue-chambray .details .number { color: #FFFFFF; } .dashboard-stat.blue-chambray .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.blue-chambray .more { color: #FFFFFF; background-color: #253443; } .dashboard-stat.blue-ebonyclay { background-color: #22313F; } .dashboard-stat.blue-ebonyclay.dashboard-stat-light:hover { background-color: #1b2732; } .dashboard-stat.blue-ebonyclay .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.blue-ebonyclay .details .number { color: #FFFFFF; } .dashboard-stat.blue-ebonyclay .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.blue-ebonyclay .more { color: #FFFFFF; background-color: #1b2732; } .dashboard-stat.blue-hoki { background-color: #67809F; } .dashboard-stat.blue-hoki.dashboard-stat-light:hover { background-color: #5e7694; } .dashboard-stat.blue-hoki .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.blue-hoki .details .number { color: #FFFFFF; } .dashboard-stat.blue-hoki .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.blue-hoki .more { color: #FFFFFF; background-color: #5e7694; } .dashboard-stat.blue-steel { background-color: #4B77BE; } .dashboard-stat.blue-steel.dashboard-stat-light:hover { background-color: #416db4; } .dashboard-stat.blue-steel .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.blue-steel .details .number { color: #FFFFFF; } .dashboard-stat.blue-steel .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.blue-steel .more { color: #FFFFFF; background-color: #416db4; } .dashboard-stat.blue-soft { background-color: #4c87b9; } .dashboard-stat.blue-soft.dashboard-stat-light:hover { background-color: #447dad; } .dashboard-stat.blue-soft .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.blue-soft .details .number { color: #FFFFFF; } .dashboard-stat.blue-soft .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.blue-soft .more { color: #FFFFFF; background-color: #447dad; } .dashboard-stat.blue-dark { background-color: #5e738b; } .dashboard-stat.blue-dark.dashboard-stat-light:hover { background-color: #56697f; } .dashboard-stat.blue-dark .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.blue-dark .details .number { color: #FFFFFF; } .dashboard-stat.blue-dark .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.blue-dark .more { color: #FFFFFF; background-color: #56697f; } .dashboard-stat.blue-sharp { background-color: #5C9BD1; } .dashboard-stat.blue-sharp.dashboard-stat-light:hover { background-color: #4c91cd; } .dashboard-stat.blue-sharp .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.blue-sharp .details .number { color: #FFFFFF; } .dashboard-stat.blue-sharp .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.blue-sharp .more { color: #FFFFFF; background-color: #4c91cd; } .dashboard-stat.green { background-color: #32c5d2; } .dashboard-stat.green.dashboard-stat-light:hover { background-color: #2bb8c4; } .dashboard-stat.green .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.green .details .number { color: #FFFFFF; } .dashboard-stat.green .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.green .more { color: #FFFFFF; background-color: #2bb8c4; } .dashboard-stat.green-meadow { background-color: #1BBC9B; } .dashboard-stat.green-meadow.dashboard-stat-light:hover { background-color: #18aa8c; } .dashboard-stat.green-meadow .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.green-meadow .details .number { color: #FFFFFF; } .dashboard-stat.green-meadow .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.green-meadow .more { color: #FFFFFF; background-color: #18aa8c; } .dashboard-stat.green-seagreen { background-color: #1BA39C; } .dashboard-stat.green-seagreen.dashboard-stat-light:hover { background-color: #18918b; } .dashboard-stat.green-seagreen .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.green-seagreen .details .number { color: #FFFFFF; } .dashboard-stat.green-seagreen .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.green-seagreen .more { color: #FFFFFF; background-color: #18918b; } .dashboard-stat.green-turquoise { background-color: #36D7B7; } .dashboard-stat.green-turquoise.dashboard-stat-light:hover { background-color: #29cfae; } .dashboard-stat.green-turquoise .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.green-turquoise .details .number { color: #FFFFFF; } .dashboard-stat.green-turquoise .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.green-turquoise .more { color: #FFFFFF; background-color: #29cfae; } .dashboard-stat.green-haze { background-color: #44b6ae; } .dashboard-stat.green-haze.dashboard-stat-light:hover { background-color: #3ea7a0; } .dashboard-stat.green-haze .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.green-haze .details .number { color: #FFFFFF; } .dashboard-stat.green-haze .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.green-haze .more { color: #FFFFFF; background-color: #3ea7a0; } .dashboard-stat.green-jungle { background-color: #26C281; } .dashboard-stat.green-jungle.dashboard-stat-light:hover { background-color: #23b176; } .dashboard-stat.green-jungle .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.green-jungle .details .number { color: #FFFFFF; } .dashboard-stat.green-jungle .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.green-jungle .more { color: #FFFFFF; background-color: #23b176; } .dashboard-stat.green-soft { background-color: #3faba4; } .dashboard-stat.green-soft.dashboard-stat-light:hover { background-color: #3a9c96; } .dashboard-stat.green-soft .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.green-soft .details .number { color: #FFFFFF; } .dashboard-stat.green-soft .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.green-soft .more { color: #FFFFFF; background-color: #3a9c96; } .dashboard-stat.green-dark { background-color: #4DB3A2; } .dashboard-stat.green-dark.dashboard-stat-light:hover { background-color: #46a595; } .dashboard-stat.green-dark .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.green-dark .details .number { color: #FFFFFF; } .dashboard-stat.green-dark .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.green-dark .more { color: #FFFFFF; background-color: #46a595; } .dashboard-stat.green-sharp { background-color: #2ab4c0; } .dashboard-stat.green-sharp.dashboard-stat-light:hover { background-color: #26a4af; } .dashboard-stat.green-sharp .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.green-sharp .details .number { color: #FFFFFF; } .dashboard-stat.green-sharp .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.green-sharp .more { color: #FFFFFF; background-color: #26a4af; } .dashboard-stat.grey { background-color: #E5E5E5; } .dashboard-stat.grey.dashboard-stat-light:hover { background-color: #dbdbdb; } .dashboard-stat.grey .visual > i { color: #333333; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.grey .details .number { color: #333333; } .dashboard-stat.grey .details .desc { color: #333333; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.grey .more { color: #333333; background-color: #dbdbdb; } .dashboard-stat.grey-steel { background-color: #e9edef; } .dashboard-stat.grey-steel.dashboard-stat-light:hover { background-color: #dde3e6; } .dashboard-stat.grey-steel .visual > i { color: #80898e; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.grey-steel .details .number { color: #80898e; } .dashboard-stat.grey-steel .details .desc { color: #80898e; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.grey-steel .more { color: #80898e; background-color: #dde3e6; } .dashboard-stat.grey-cararra { background-color: #fafafa; } .dashboard-stat.grey-cararra.dashboard-stat-light:hover { background-color: #f0f0f0; } .dashboard-stat.grey-cararra .visual > i { color: #333333; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.grey-cararra .details .number { color: #333333; } .dashboard-stat.grey-cararra .details .desc { color: #333333; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.grey-cararra .more { color: #333333; background-color: #f0f0f0; } .dashboard-stat.grey-gallery { background-color: #555555; } .dashboard-stat.grey-gallery.dashboard-stat-light:hover { background-color: #4b4b4b; } .dashboard-stat.grey-gallery .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.grey-gallery .details .number { color: #ffffff; } .dashboard-stat.grey-gallery .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.grey-gallery .more { color: #ffffff; background-color: #4b4b4b; } .dashboard-stat.grey-cascade { background-color: #95A5A6; } .dashboard-stat.grey-cascade.dashboard-stat-light:hover { background-color: #8a9c9d; } .dashboard-stat.grey-cascade .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.grey-cascade .details .number { color: #FFFFFF; } .dashboard-stat.grey-cascade .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.grey-cascade .more { color: #FFFFFF; background-color: #8a9c9d; } .dashboard-stat.grey-silver { background-color: #BFBFBF; } .dashboard-stat.grey-silver.dashboard-stat-light:hover { background-color: #b5b5b5; } .dashboard-stat.grey-silver .visual > i { color: #FAFCFB; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.grey-silver .details .number { color: #FAFCFB; } .dashboard-stat.grey-silver .details .desc { color: #FAFCFB; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.grey-silver .more { color: #FAFCFB; background-color: #b5b5b5; } .dashboard-stat.grey-salsa { background-color: #ACB5C3; } .dashboard-stat.grey-salsa.dashboard-stat-light:hover { background-color: #a0aaba; } .dashboard-stat.grey-salsa .visual > i { color: #FAFCFB; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.grey-salsa .details .number { color: #FAFCFB; } .dashboard-stat.grey-salsa .details .desc { color: #FAFCFB; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.grey-salsa .more { color: #FAFCFB; background-color: #a0aaba; } .dashboard-stat.grey-salt { background-color: #bfcad1; } .dashboard-stat.grey-salt.dashboard-stat-light:hover { background-color: #b3c0c8; } .dashboard-stat.grey-salt .visual > i { color: #FAFCFB; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.grey-salt .details .number { color: #FAFCFB; } .dashboard-stat.grey-salt .details .desc { color: #FAFCFB; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.grey-salt .more { color: #FAFCFB; background-color: #b3c0c8; } .dashboard-stat.grey-mint { background-color: #525e64; } .dashboard-stat.grey-mint.dashboard-stat-light:hover { background-color: #495359; } .dashboard-stat.grey-mint .visual > i { color: #FFFFFF; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.grey-mint .details .number { color: #FFFFFF; } .dashboard-stat.grey-mint .details .desc { color: #FFFFFF; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.grey-mint .more { color: #FFFFFF; background-color: #495359; } .dashboard-stat.red { background-color: #e7505a; } .dashboard-stat.red.dashboard-stat-light:hover { background-color: #e53e49; } .dashboard-stat.red .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.red .details .number { color: #ffffff; } .dashboard-stat.red .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.red .more { color: #ffffff; background-color: #e53e49; } .dashboard-stat.red-pink { background-color: #E08283; } .dashboard-stat.red-pink.dashboard-stat-light:hover { background-color: #dc7273; } .dashboard-stat.red-pink .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.red-pink .details .number { color: #ffffff; } .dashboard-stat.red-pink .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.red-pink .more { color: #ffffff; background-color: #dc7273; } .dashboard-stat.red-sunglo { background-color: #E26A6A; } .dashboard-stat.red-sunglo.dashboard-stat-light:hover { background-color: #df5959; } .dashboard-stat.red-sunglo .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.red-sunglo .details .number { color: #ffffff; } .dashboard-stat.red-sunglo .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.red-sunglo .more { color: #ffffff; background-color: #df5959; } .dashboard-stat.red-intense { background-color: #e35b5a; } .dashboard-stat.red-intense.dashboard-stat-light:hover { background-color: #e04a49; } .dashboard-stat.red-intense .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.red-intense .details .number { color: #ffffff; } .dashboard-stat.red-intense .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.red-intense .more { color: #ffffff; background-color: #e04a49; } .dashboard-stat.red-thunderbird { background-color: #D91E18; } .dashboard-stat.red-thunderbird.dashboard-stat-light:hover { background-color: #c71b16; } .dashboard-stat.red-thunderbird .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.red-thunderbird .details .number { color: #ffffff; } .dashboard-stat.red-thunderbird .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.red-thunderbird .more { color: #ffffff; background-color: #c71b16; } .dashboard-stat.red-flamingo { background-color: #EF4836; } .dashboard-stat.red-flamingo.dashboard-stat-light:hover { background-color: #ed3723; } .dashboard-stat.red-flamingo .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.red-flamingo .details .number { color: #ffffff; } .dashboard-stat.red-flamingo .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.red-flamingo .more { color: #ffffff; background-color: #ed3723; } .dashboard-stat.red-soft { background-color: #d05454; } .dashboard-stat.red-soft.dashboard-stat-light:hover { background-color: #cc4444; } .dashboard-stat.red-soft .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.red-soft .details .number { color: #ffffff; } .dashboard-stat.red-soft .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.red-soft .more { color: #ffffff; background-color: #cc4444; } .dashboard-stat.red-haze { background-color: #f36a5a; } .dashboard-stat.red-haze.dashboard-stat-light:hover { background-color: #f25947; } .dashboard-stat.red-haze .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.red-haze .details .number { color: #ffffff; } .dashboard-stat.red-haze .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.red-haze .more { color: #ffffff; background-color: #f25947; } .dashboard-stat.red-mint { background-color: #e43a45; } .dashboard-stat.red-mint.dashboard-stat-light:hover { background-color: #e22834; } .dashboard-stat.red-mint .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.red-mint .details .number { color: #ffffff; } .dashboard-stat.red-mint .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.red-mint .more { color: #ffffff; background-color: #e22834; } .dashboard-stat.yellow { background-color: #c49f47; } .dashboard-stat.yellow.dashboard-stat-light:hover { background-color: #bb953c; } .dashboard-stat.yellow .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.yellow .details .number { color: #ffffff; } .dashboard-stat.yellow .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.yellow .more { color: #ffffff; background-color: #bb953c; } .dashboard-stat.yellow-gold { background-color: #E87E04; } .dashboard-stat.yellow-gold.dashboard-stat-light:hover { background-color: #d47304; } .dashboard-stat.yellow-gold .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.yellow-gold .details .number { color: #ffffff; } .dashboard-stat.yellow-gold .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.yellow-gold .more { color: #ffffff; background-color: #d47304; } .dashboard-stat.yellow-casablanca { background-color: #f2784b; } .dashboard-stat.yellow-casablanca.dashboard-stat-light:hover { background-color: #f16a38; } .dashboard-stat.yellow-casablanca .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.yellow-casablanca .details .number { color: #ffffff; } .dashboard-stat.yellow-casablanca .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.yellow-casablanca .more { color: #ffffff; background-color: #f16a38; } .dashboard-stat.yellow-crusta { background-color: #f3c200; } .dashboard-stat.yellow-crusta.dashboard-stat-light:hover { background-color: #dfb200; } .dashboard-stat.yellow-crusta .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.yellow-crusta .details .number { color: #ffffff; } .dashboard-stat.yellow-crusta .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.yellow-crusta .more { color: #ffffff; background-color: #dfb200; } .dashboard-stat.yellow-lemon { background-color: #F7CA18; } .dashboard-stat.yellow-lemon.dashboard-stat-light:hover { background-color: #f2c308; } .dashboard-stat.yellow-lemon .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.yellow-lemon .details .number { color: #ffffff; } .dashboard-stat.yellow-lemon .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.yellow-lemon .more { color: #ffffff; background-color: #f2c308; } .dashboard-stat.yellow-saffron { background-color: #F4D03F; } .dashboard-stat.yellow-saffron.dashboard-stat-light:hover { background-color: #f3cb2c; } .dashboard-stat.yellow-saffron .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.yellow-saffron .details .number { color: #ffffff; } .dashboard-stat.yellow-saffron .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.yellow-saffron .more { color: #ffffff; background-color: #f3cb2c; } .dashboard-stat.yellow-soft { background-color: #c8d046; } .dashboard-stat.yellow-soft.dashboard-stat-light:hover { background-color: #c3cc36; } .dashboard-stat.yellow-soft .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.yellow-soft .details .number { color: #ffffff; } .dashboard-stat.yellow-soft .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.yellow-soft .more { color: #ffffff; background-color: #c3cc36; } .dashboard-stat.yellow-haze { background-color: #c5bf66; } .dashboard-stat.yellow-haze.dashboard-stat-light:hover { background-color: #bfb957; } .dashboard-stat.yellow-haze .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.yellow-haze .details .number { color: #ffffff; } .dashboard-stat.yellow-haze .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.yellow-haze .more { color: #ffffff; background-color: #bfb957; } .dashboard-stat.yellow-mint { background-color: #c5b96b; } .dashboard-stat.yellow-mint.dashboard-stat-light:hover { background-color: #bfb25c; } .dashboard-stat.yellow-mint .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.yellow-mint .details .number { color: #ffffff; } .dashboard-stat.yellow-mint .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.yellow-mint .more { color: #ffffff; background-color: #bfb25c; } .dashboard-stat.purple { background-color: #8E44AD; } .dashboard-stat.purple.dashboard-stat-light:hover { background-color: #823e9e; } .dashboard-stat.purple .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.purple .details .number { color: #ffffff; } .dashboard-stat.purple .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.purple .more { color: #ffffff; background-color: #823e9e; } .dashboard-stat.purple-plum { background-color: #8775a7; } .dashboard-stat.purple-plum.dashboard-stat-light:hover { background-color: #7c699f; } .dashboard-stat.purple-plum .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.purple-plum .details .number { color: #ffffff; } .dashboard-stat.purple-plum .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.purple-plum .more { color: #ffffff; background-color: #7c699f; } .dashboard-stat.purple-medium { background-color: #BF55EC; } .dashboard-stat.purple-medium.dashboard-stat-light:hover { background-color: #b843ea; } .dashboard-stat.purple-medium .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.purple-medium .details .number { color: #ffffff; } .dashboard-stat.purple-medium .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.purple-medium .more { color: #ffffff; background-color: #b843ea; } .dashboard-stat.purple-studio { background-color: #8E44AD; } .dashboard-stat.purple-studio.dashboard-stat-light:hover { background-color: #823e9e; } .dashboard-stat.purple-studio .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.purple-studio .details .number { color: #ffffff; } .dashboard-stat.purple-studio .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.purple-studio .more { color: #ffffff; background-color: #823e9e; } .dashboard-stat.purple-wisteria { background-color: #9B59B6; } .dashboard-stat.purple-wisteria.dashboard-stat-light:hover { background-color: #924dae; } .dashboard-stat.purple-wisteria .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.purple-wisteria .details .number { color: #ffffff; } .dashboard-stat.purple-wisteria .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.purple-wisteria .more { color: #ffffff; background-color: #924dae; } .dashboard-stat.purple-seance { background-color: #9A12B3; } .dashboard-stat.purple-seance.dashboard-stat-light:hover { background-color: #8a10a0; } .dashboard-stat.purple-seance .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.purple-seance .details .number { color: #ffffff; } .dashboard-stat.purple-seance .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.purple-seance .more { color: #ffffff; background-color: #8a10a0; } .dashboard-stat.purple-intense { background-color: #8775a7; } .dashboard-stat.purple-intense.dashboard-stat-light:hover { background-color: #7c699f; } .dashboard-stat.purple-intense .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.purple-intense .details .number { color: #ffffff; } .dashboard-stat.purple-intense .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.purple-intense .more { color: #ffffff; background-color: #7c699f; } .dashboard-stat.purple-sharp { background-color: #796799; } .dashboard-stat.purple-sharp.dashboard-stat-light:hover { background-color: #6f5f8d; } .dashboard-stat.purple-sharp .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.purple-sharp .details .number { color: #ffffff; } .dashboard-stat.purple-sharp .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.purple-sharp .more { color: #ffffff; background-color: #6f5f8d; } .dashboard-stat.purple-soft { background-color: #8877a9; } .dashboard-stat.purple-soft.dashboard-stat-light:hover { background-color: #7d6ba1; } .dashboard-stat.purple-soft .visual > i { color: #ffffff; opacity: 0.1; filter: alpha(opacity=10); } .dashboard-stat.purple-soft .details .number { color: #ffffff; } .dashboard-stat.purple-soft .details .desc { color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .dashboard-stat.purple-soft .more { color: #ffffff; background-color: #7d6ba1; } .dashboard-stat-light { padding-bottom: 20px; margin-bottom: 20px; } .dashboard-stat-light .details { margin-bottom: 5px; } .dashboard-stat-light .details .number { font-weight: 300; margin-bottom: 0px; } /*** Dashboard Stats 2 ***/ .dashboard-stat2 { -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; background: #fff; padding: 15px 15px 30px 15px; margin-bottom: 20px; } .dashboard-stat2.bordered { border: 1px solid #e7ecf1; } .dashboard-stat2 .display { margin-bottom: 20px; } .dashboard-stat2 .display:before, .dashboard-stat2 .display:after { content: " "; display: table; } .dashboard-stat2 .display:after { clear: both; } .dashboard-stat2 .display .number { float: left; display: inline-block; } .dashboard-stat2 .display .number h3 { margin: 0 0 2px 0; padding: 0; font-size: 30px; font-weight: 400; } .dashboard-stat2 .display .number h3 > small { font-size: 23px; } .dashboard-stat2 .display .number small { font-size: 14px; color: #AAB5BC; font-weight: 600; text-transform: uppercase; } .dashboard-stat2 .display .icon { display: inline-block; float: right; padding: 7px 0 0 0; } .dashboard-stat2 .display .icon > i { color: #cbd4e0; font-size: 26px; } .dashboard-stat2 .progress-info { clear: both; } .dashboard-stat2 .progress-info .progress { margin: 0; height: 4px; clear: both; display: block; } .dashboard-stat2 .progress-info .status { margin-top: 5px; font-size: 11px; color: #AAB5BC; font-weight: 600; text-transform: uppercase; } .dashboard-stat2 .progress-info .status .status-title { float: left; display: inline-block; } .dashboard-stat2 .progress-info .status .status-number { float: right; display: inline-block; } /*** Text Stats ***/ .text-stat h3 { margin-top: 5px; margin-bottom: 0px; font-size: 18px; } .text-stat span { font-size: 13px !important; } @media (max-width: 767px) { /* 767px */ .text-stat { margin-top: 20px; } } /*** Social Icons ***/ .social-icons { padding: 0; margin: 0; } .social-icons:before, .social-icons:after { content: " "; display: table; } .social-icons:after { clear: both; } .social-icons li { float: left; display: inline; list-style: none; margin-right: 5px; margin-bottom: 5px; text-indent: -9999px; } .social-icons li > a { -webkit-border-radius: 2px; -moz-border-radius: 2px; -ms-border-radius: 2px; -o-border-radius: 2px; border-radius: 2px; width: 28px; height: 28px; display: block; background-position: 0 0; background-repeat: no-repeat; transition: all 0.3s ease-in-out; -o-transition: all 0.3s ease-in-out; -ms-transition: all 0.3s ease-in-out; -moz-transition: all 0.3s ease-in-out; -webkit-transition: all 0.3s ease-in-out; } .social-icons li:hover > a { background-position: 0 -38px; } .social-icons li .amazon { background: url(img/social/amazon.png) no-repeat; } .social-icons li .behance { background: url(img/social/behance.png) no-repeat; } .social-icons li .blogger { background: url(img/social/blogger.png) no-repeat; } .social-icons li .deviantart { background: url(img/social/deviantart.png) no-repeat; } .social-icons li .dribbble { background: url(img/social/dribbble.png) no-repeat; } .social-icons li .dropbox { background: url(img/social/dropbox.png) no-repeat; } .social-icons li .evernote { background: url(img/social/evernote.png) no-repeat; } .social-icons li .facebook { background: url(img/social/facebook.png) no-repeat; } .social-icons li .forrst { background: url(img/social/forrst.png) no-repeat; } .social-icons li .github { background: url(img/social/github.png) no-repeat; } .social-icons li .googleplus { background: url(img/social/googleplus.png) no-repeat; } .social-icons li .jolicloud { background: url(img/social/jolicloud.png) no-repeat; } .social-icons li .last-fm { background: url(img/social/last-fm.png) no-repeat; } .social-icons li .linkedin { background: url(img/social/linkedin.png) no-repeat; } .social-icons li .picasa { background: url(img/social/picasa.png) no-repeat; } .social-icons li .pintrest { background: url(img/social/pintrest.png) no-repeat; } .social-icons li .rss { background: url(img/social/rss.png) no-repeat; } .social-icons li .skype { background: url(img/social/skype.png) no-repeat; } .social-icons li .spotify { background: url(img/social/spotify.png) no-repeat; } .social-icons li .stumbleupon { background: url(img/social/stumbleupon.png) no-repeat; } .social-icons li .tumblr { background: url(img/social/tumblr.png) no-repeat; } .social-icons li .twitter { background: url(img/social/twitter.png) no-repeat; } .social-icons li .vimeo { background: url(img/social/vimeo.png) no-repeat; } .social-icons li .wordpress { background: url(img/social/wordpress.png) no-repeat; } .social-icons li .xing { background: url(img/social/xing.png) no-repeat; } .social-icons li .yahoo { background: url(img/social/yahoo.png) no-repeat; } .social-icons li .youtube { background: url(img/social/youtube.png) no-repeat; } .social-icons li .vk { background: url(img/social/vk.png) no-repeat; } .social-icons li .instagram { background: url(img/social/instagram.png) no-repeat; } .social-icons li .reddit { background: url(img/social/reddit.png) no-repeat; } .social-icons li .aboutme { background: url(img/social/aboutme.png) no-repeat; } .social-icons li .flickr { background: url(img/social/flickr.png) no-repeat; } .social-icons li .foursquare { background: url(img/social/foursquare.png) no-repeat; } .social-icons li .gravatar { background: url(img/social/gravatar.png) no-repeat; } .social-icons li .klout { background: url(img/social/klout.png) no-repeat; } .social-icons li .myspace { background: url(img/social/myspace.png) no-repeat; } .social-icons li .quora { background: url(img/social/quora.png) no-repeat; } .social-icons.social-icons-color > li > a { opacity: 0.7; background-position: 0 -38px !important; } .social-icons.social-icons-color > li > a:hover { opacity: 1; } .social-icons.social-icons-circle > li > a { border-radius: 25px !important; } /*** Inline Social Icons ***/ .social-icon { display: inline-block !important; width: 28px; height: 28px; background-position: 0 0; background-repeat: no-repeat; -webkit-border-radius: 2px; -moz-border-radius: 2px; -ms-border-radius: 2px; -o-border-radius: 2px; border-radius: 2px; transition: all 0.3s ease-in-out; -o-transition: all 0.3s ease-in-out; -ms-transition: all 0.3s ease-in-out; -moz-transition: all 0.3s ease-in-out; -webkit-transition: all 0.3s ease-in-out; } .social-icon.social-icon-circle { border-radius: 25px !important; } .social-icon.amazon { background: url(img/social/amazon.png) no-repeat; } .social-icon.behance { background: url(img/social/behance.png) no-repeat; } .social-icon.blogger { background: url(img/social/blogger.png) no-repeat; } .social-icon.deviantart { background: url(img/social/deviantart.png) no-repeat; } .social-icon.dribbble { background: url(img/social/dribbble.png) no-repeat; } .social-icon.dropbox { background: url(img/social/dropbox.png) no-repeat; } .social-icon.evernote { background: url(img/social/evernote.png) no-repeat; } .social-icon.facebook { background: url(img/social/facebook.png) no-repeat; } .social-icon.forrst { background: url(img/social/forrst.png) no-repeat; } .social-icon.github { background: url(img/social/github.png) no-repeat; } .social-icon.googleplus { background: url(img/social/googleplus.png) no-repeat; } .social-icon.jolicloud { background: url(img/social/jolicloud.png) no-repeat; } .social-icon.last-fm { background: url(img/social/last-fm.png) no-repeat; } .social-icon.linkedin { background: url(img/social/linkedin.png) no-repeat; } .social-icon.picasa { background: url(img/social/picasa.png) no-repeat; } .social-icon.pintrest { background: url(img/social/pintrest.png) no-repeat; } .social-icon.rss { background: url(img/social/rss.png) no-repeat; } .social-icon.skype { background: url(img/social/skype.png) no-repeat; } .social-icon.spotify { background: url(img/social/spotify.png) no-repeat; } .social-icon.stumbleupon { background: url(img/social/stumbleupon.png) no-repeat; } .social-icon.tumblr { background: url(img/social/tumblr.png) no-repeat; } .social-icon.twitter { background: url(img/social/twitter.png) no-repeat; } .social-icon.vimeo { background: url(img/social/vimeo.png) no-repeat; } .social-icon.wordpress { background: url(img/social/wordpress.png) no-repeat; } .social-icon.xing { background: url(img/social/xing.png) no-repeat; } .social-icon.yahoo { background: url(img/social/yahoo.png) no-repeat; } .social-icon.youtube { background: url(img/social/youtube.png) no-repeat; } .social-icon.vk { background: url(img/social/vk.png) no-repeat; } .social-icon.instagram { background: url(img/social/instagram.png) no-repeat; } .social-icon.reddit { background: url(img/social/reddit.png) no-repeat; } .social-icon.aboutme { background: url(img/social/aboutme.png) no-repeat; } .social-icon.flickr { background: url(img/social/flickr.png) no-repeat; } .social-icon.foursquare { background: url(img/social/foursquare.png) no-repeat; } .social-icon.gravatar { background: url(img/social/gravatar.png) no-repeat; } .social-icon.klout { background: url(img/social/klout.png) no-repeat; } .social-icon.myspace { background: url(img/social/myspace.png) no-repeat; } .social-icon.quora { background: url(img/social/quora.png) no-repeat; } .social-icon:hover { background-position: 0 -38px; } .social-icon-color { opacity: 0.7; background-position: 0 -38px !important; } .social-icon-color:hover { opacity: 1; } /*** Scrollable Tables ***/ .table-scrollable { width: 100%; overflow-x: auto; overflow-y: hidden; border: 1px solid #e7ecf1; margin: 10px 0 !important; } .DTS .table-scrollable { border: 0; } .table-scrollable.table-scrollable-borderless { border: 0; } .table-scrollable > .table { width: 100% !important; margin: 0 !important; margin-bottom: 0; background-color: #fff; } .table-scrollable > .table > thead > tr > th, .table-scrollable > .table > tbody > tr > th, .table-scrollable > .table > tfoot > tr > th, .table-scrollable > .table > tfoot > tr > th, .table-scrollable > .table > tfoot > tr > td { white-space: nowrap; } .table-scrollable > .table-bordered { border: 0; } .table-scrollable > .table-bordered > thead > tr > th:first-child, .table-scrollable > .table-bordered > tbody > tr > th:first-child, .table-scrollable > .table-bordered > tfoot > tr > th:first-child, .table-scrollable > .table-bordered > thead > tr > td:first-child, .table-scrollable > .table-bordered > tbody > tr > td:first-child, .table-scrollable > .table-bordered > tfoot > tr > td:first-child { border-left: 0; } .table-scrollable > .table-bordered > thead > tr > th:last-child, .table-scrollable > .table-bordered > tbody > tr > th:last-child, .table-scrollable > .table-bordered > tfoot > tr > th:last-child, .table-scrollable > .table-bordered > thead > tr > td:last-child, .table-scrollable > .table-bordered > tbody > tr > td:last-child, .table-scrollable > .table-bordered > tfoot > tr > td:last-child { border-right: 0; } .table-scrollable > .table-bordered > thead > tr:last-child > th, .table-scrollable > .table-bordered > tbody > tr:last-child > th, .table-scrollable > .table-bordered > tfoot > tr:last-child > th, .table-scrollable > .table-bordered > thead > tr:last-child > td, .table-scrollable > .table-bordered > tbody > tr:last-child > td, .table-scrollable > .table-bordered > tfoot > tr:last-child > td { border-bottom: 0; } /*** Customized Bootstrap Tables ***/ .table td, .table th { font-size: 14px; } .table.table-bordered thead > tr > th { border-bottom: 0; } .table td .img-responsive { width: 100%; } /*** Responsive Flip Scroll Tables ***/ .flip-scroll table { width: 100%; } @media only screen and (max-width: 768px) { /* 768px */ .flip-scroll .flip-content:after { visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; } .flip-scroll * html .flip-content { zoom: 1; } .flip-scroll *:first-child + html .flip-content { zoom: 1; } .flip-scroll table { width: 100%; border-collapse: collapse; border-spacing: 0; } .flip-scroll th, .flip-scroll td { margin: 0; vertical-align: top; } .flip-scroll th { text-align: left; border: 0 !important; border-bottom: 1px solid #ddd !important; border-right: 1px solid #ddd !important; font-size: 13px !important; padding: 5px; width: auto !important; } .flip-scroll table { display: block; position: relative; width: 100%; } .flip-scroll thead { display: block; float: left; } .flip-scroll tbody { display: block; width: auto; position: relative; overflow-x: auto; white-space: nowrap; } .flip-scroll .flip-content tbody tr td { font-size: 13px; line-height: 1.483; } .flip-scroll .table-bordered.flip-content tbody tr td { font-size: 13px; line-height: 1.43; } .flip-scroll thead tr { display: block; } .flip-scroll th { display: block; text-align: right; } .flip-scroll tbody tr { display: inline-block; vertical-align: top; margin-left: -5px; } .flip-scroll td { display: block; min-height: 1.25em; text-align: left; border-top: 0 !important; border-left: 0 !important; border-right: 0 !important; } /* sort out borders */ .flip-scroll th { border-bottom: 0; border-left: 0; } .flip-scroll td { border-left: 0; border-right: 0; border-bottom: 0; } .flip-scroll tbody tr { border-left: 1px solid #ddd; } .flip-scroll th:last-child, .flip-scroll td:last-child { border-bottom: 1px solid #ddd; } } /*** Custom tables ***/ .table-toolbar { margin-bottom: 20px; } .table-toolbar:before, .table-toolbar:after { content: " "; display: table; } .table-toolbar:after { clear: both; } .table.table-full-width { width: 100% !important; } .table .btn { margin-top: 0px; margin-left: 0px; margin-right: 5px; } .table thead tr th { font-size: 14px; font-weight: 600; } .table-advance { margin-bottom: 10px !important; } .table-advance thead { color: #3f444a; } .table-advance thead tr th { background-color: #f1f4f7; font-size: 14px; font-weight: 400; color: #3f444a; } .table-advance div.success, .table-advance div.info, .table-advance div.important, .table-advance div.warning, .table-advance div.danger { position: absolute; margin-top: -5px; float: left; width: 2px; height: 30px; margin-right: 20px !important; } .table-advance tr td { border-left-width: 0px; } .table-advance tr td:first-child { border-left-width: 2px !important; } .table-advance tr td.highlight:first-child a { margin-left: 15px; } .table-advance td.highlight div.primary { border-left: 2px solid #337ab7; } .table-advance td.highlight div.success { border-left: 2px solid #36c6d3; } .table-advance td.highlight div.info { border-left: 2px solid #659be0; } .table-advance td.highlight div.warning { border-left: 2px solid #F1C40F; } .table-advance td.highlight div.danger { border-left: 2px solid #ed6b75; } @media (max-width: 767px) { /* 767px */ .table-advance tr > td.highlight:first-child a { margin-left: 8px; } } /*** Light Table ***/ .table.table-light { border: 0 !important; } .table.table-light > thead > tr:hover > th { background: none; } .table.table-light > thead > tr.uppercase { text-transform: uppercase; } .table.table-light > thead > tr > th { font-weight: 600; font-size: 13px; color: #93a2a9; font-family: "Open Sans", sans-serif; border: 0; border-bottom: 1px solid #F2F5F8; } .table.table-light > tbody > tr:last-child > td { border: 0; } .table.table-light > tbody > tr > td { border: 0; border-bottom: 1px solid #F2F5F8; color: #8896a0; vertical-align: middle; } .table.table-light > tbody > tr > td.fit { width: 1px; padding-right: 3px; } .table.table-light > tbody > tr > td .user-pic { display: inline-block; vertical-align: middle; height: 30px; -webkit-border-radius: 100%; -moz-border-radius: 100%; -ms-border-radius: 100%; -o-border-radius: 100%; border-radius: 100%; } .table.table-light.table-hover > tbody > tr > td:hover, .table.table-light.table-hover > tbody > tr > th:hover, .table.table-light.table-hover > tbody > tr:hover > td, .table.table-light.table-hover > tbody > tr:hover > th { background: #f9fafb; } /*** Customized Bootstrap Tabs ***/ /* Tabs and pills */ .nav-tabs, .nav-pills { margin-bottom: 10px; } .nav-tabs > li > a, .nav-pills > li > a { font-size: 14px; -webkit-border-radius: 4px 4px 0 0; -moz-border-radius: 4px 4px 0 0; -ms-border-radius: 4px 4px 0 0; -o-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } .nav-tabs > li > a > .badge, .nav-pills > li > a > .badge { margin-top: -6px; } .nav-tabs > li .dropdown-menu:before, .nav-tabs > li .dropdown-menu:after, .nav-pills > li .dropdown-menu:before, .nav-pills > li .dropdown-menu:after { display: none; } .nav-tabs.nav-tabs-sm > li > a, .nav-tabs.nav-pills-sm > li > a, .nav-pills.nav-tabs-sm > li > a, .nav-pills.nav-pills-sm > li > a { font-size: 13px; } .nav-tabs .dropdown.open > .dropdown-toggle, .nav-pills .dropdown.open > .dropdown-toggle { background: #eee; color: #0d638f; border-color: transparent; } /* Left and right tabs */ .tabs-right.nav-tabs, .tabs-left.nav-tabs { border-bottom: 0; } .tabs-right.nav-tabs > li, .tabs-left.nav-tabs > li { float: none; } .tabs-right.nav-tabs > li > a, .tabs-left.nav-tabs > li > a { margin-right: 0; margin-bottom: 3px; } /* Left tabs */ .tabs-left.nav-tabs { border-right: 1px solid #ddd; } .tabs-left.nav-tabs > li > a { display: block; margin-right: -1px; } .tabs-left.nav-tabs > li > a:hover, .tabs-left.nav-tabs > li > a:focus { -webkit-border-radius: 4px 0 0 4px; -moz-border-radius: 4px 0 0 4px; -ms-border-radius: 4px 0 0 4px; -o-border-radius: 4px 0 0 4px; border-radius: 4px 0 0 4px; border-color: #eeeeee #dddddd #eeeeee #eeeeee; } .tabs-left.nav-tabs > li.active > a, .tabs-left.nav-tabs > li.active > a:hover > li.active > a:focus { -webkit-border-radius: 4px 0 0 4px; -moz-border-radius: 4px 0 0 4px; -ms-border-radius: 4px 0 0 4px; -o-border-radius: 4px 0 0 4px; border-radius: 4px 0 0 4px; border-color: #ddd transparent #ddd #ddd; *border-right-color: #ffffff; } /* Right tabs */ .tabs-right.nav-tabs { border-left: 1px solid #ddd; } .tabs-right.nav-tabs > li > a { display: block; margin-left: -1px; } .tabs-right.nav-tabs > li > a:hover, .tabs-right.nav-tabs > li > a:focus { -webkit-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; -ms-border-radius: 0 4px 4px 0; -o-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0; border-color: #eeeeee #eeeeee #eeeeee #dddddd; } .tabs-right.nav-tabs > li.active > a, .tabs-right.nav-tabs > li.active > a:hover > li.active > a:focus { -webkit-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; -ms-border-radius: 0 4px 4px 0; -o-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0; border-color: #ddd #ddd #ddd transparent; *border-left-color: #ffffff; } /* Below tabs */ .tabs-below > .nav-tabs, .tabs-below > .nav-pills { border-bottom: 0; margin-bottom: 0px; margin-top: 10px; } .tabs-below > .nav-tabs { border-top: 1px solid #ddd; margin-bottom: 0; margin-top: 10px; } .tabs-below > .nav-tabs > li > a { margin-top: -1px; margin-bottom: 0; } .tabs-below > .nav-tabs > li > a:hover, .tabs-below > .nav-tabs > li > a:focus { border-top-color: #ddd; border-bottom-color: transparent; } .tabs-below > .nav-tabs > li > a .dropdown-menu { -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .tabs-below > .nav-tabs .active a, .tabs-below > .nav-tabs .active a:hover .active a:focus { -webkit-border-radius: 0 0 4px 4px; -moz-border-radius: 0 0 4px 4px; -ms-border-radius: 0 0 4px 4px; -o-border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px; border-color: transparent #ddd #ddd #ddd !important; } /*** Custom tabs ***/ /* In BS3.0.0 tabbable class was removed. We had to added it back */ .tabbable:before, .tabbable:after { content: " "; display: table; } .tabbable:after { clear: both; } .tabbable-custom { margin-bottom: 15px; padding: 0px; overflow: hidden; /* justified tabs */ /* boxless tabs */ /* below justified tabs */ /* full width tabs */ /* below tabs */ } .tabbable-custom > .nav-tabs { border: none; margin: 0px; } .tabbable-custom > .nav-tabs > li { margin-right: 2px; border-top: 2px solid transparent; } .tabbable-custom > .nav-tabs > li > a { margin-right: 0; -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; } .tabbable-custom > .nav-tabs > li > a:hover { background: none; border-color: transparent; } .tabbable-custom > .nav-tabs > li.active { border-top: 3px solid #ed6b75; margin-top: 0; position: relative; } .tabbable-custom > .nav-tabs > li.active > a { border-top: none !important; font-weight: 400; -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; } .tabbable-custom > .nav-tabs > li.active > a:hover { -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; border-top: none; background: #fff; border-color: #d4d4d4 #d4d4d4 transparent; } .tabbable-custom > .tab-content { background-color: #fff; border: 1px solid #ddd; padding: 10px; -webkit-border-radius: 0 0 4px 4px; -moz-border-radius: 0 0 4px 4px; -ms-border-radius: 0 0 4px 4px; -o-border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px; } .tabbable-custom.nav-justified > .tab-content { margin-top: -1px; } .tabbable-custom.boxless > .tab-content { padding: 15px 0; border-left: none; border-right: none; border-bottom: none; } .tabbable-custom.tabs-below.nav-justified .tab-content { margin-top: 0px; margin-bottom: -2px; -webkit-border-radius: 4px 4px 0 0; -moz-border-radius: 4px 4px 0 0; -ms-border-radius: 4px 4px 0 0; -o-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } .tabbable-custom.tabbable-full-width > .nav-tabs > li > a { color: #424242; font-size: 15px; padding: 9px 15px; } .tabbable-custom.tabbable-full-width > .tab-content { padding: 15px 0; border-left: none; border-right: none; border-bottom: none; } .tabbable-custom.tabs-below .nav-tabs > li > a { border-top: none; border-bottom: 2px solid transparent; margin-top: -1px; } .tabbable-custom.tabs-below .nav-tabs > li.active { border-top: none; border-bottom: 3px solid #d12610; margin-bottom: 0; position: relative; } .tabbable-custom.tabs-below .nav-tabs > li.active > a { border-bottom: none; } .tabbable-custom.tabs-below .nav-tabs > li.active > a:hover { background: #fff; border-color: #d4d4d4 #d4d4d4 transparent; } .tabbable-custom.tabbable-noborder > .nav-tabs > li > a { border: 0; } .tabbable-custom.tabbable-noborder .tab-content { border: 0; } .portlet:not(.light) .tabbable-line { padding-top: 15px; } .tabbable-line > .nav-tabs { border: none; margin: 0px; } .tabbable-line > .nav-tabs > li { margin: 0; border-bottom: 4px solid transparent; } .tabbable-line > .nav-tabs > li > a { background: none !important; border: 0; margin: 0; padding-left: 15px; padding-right: 15px; color: #737373; } .tabbable-line > .nav-tabs > li > a > i { color: #a6a6a6; } .tabbable-line > .nav-tabs > li.active { background: none; border-bottom: 4px solid #36c6d3; position: relative; } .tabbable-line > .nav-tabs > li.active > a { border: 0; color: #333; } .tabbable-line > .nav-tabs > li.active > a > i { color: #404040; } .tabbable-line > .nav-tabs > li.open, .tabbable-line > .nav-tabs > li:hover { background: none; border-bottom: 4px solid #9fe4ea; } .tabbable-line > .nav-tabs > li.open > a, .tabbable-line > .nav-tabs > li:hover > a { border: 0; background: none !important; color: #333; } .tabbable-line > .nav-tabs > li.open > a > i, .tabbable-line > .nav-tabs > li:hover > a > i { color: #a6a6a6; } .tabbable-line > .nav-tabs > li.open .dropdown-menu, .tabbable-line > .nav-tabs > li:hover .dropdown-menu { margin-top: 0px; } .tabbable-line > .tab-content { margin-top: 0; border: 0; border-top: 1px solid #eef1f5; padding: 30px 0; } .page-container-bg-solid .tabbable-line > .tab-content { border-top: 1px solid #dae2ea; } .portlet .tabbable-line > .tab-content { padding-bottom: 0; } .tabbable-line.tabs-below > .nav-tabs > li { border-top: 4px solid transparent; } .tabbable-line.tabs-below > .nav-tabs > li > a { margin-top: 0; } .tabbable-line.tabs-below > .nav-tabs > li:hover { border-bottom: 0; border-top: 4px solid #fbdcde; } .tabbable-line.tabs-below > .nav-tabs > li.active { margin-bottom: -2px; border-bottom: 0; border-top: 4px solid #ed6b75; } .tabbable-line.tabs-below > .tab-content { margin-top: -10px; border-top: 0; border-bottom: 1px solid #eee; padding-bottom: 15px; } .portlet .tabbable-bordered { margin-top: 20px; } .tabbable-bordered .nav-tabs { margin-bottom: 0; border-bottom: 0; } .tabbable-bordered .tab-content { padding: 30px 20px 20px 20px; border: 1px solid #ddd; background: #ffffff; } /*** Tiles(new in v1.1.1) ***/ .tiles { margin-right: -10px; } .tiles:before, .tiles:after { display: table; content: " "; } .tiles:after { clear: both; } .tiles .tile { display: block; letter-spacing: 0.02em; float: left; height: 135px; width: 135px !important; cursor: pointer; text-decoration: none; color: #ffffff; position: relative; font-weight: 300; font-size: 12px; letter-spacing: 0.02em; line-height: 20px; overflow: hidden; border: 4px solid transparent; margin: 0 10px 10px 0; } .tiles .tile:after, .tiles .tile:before { content: ""; float: left; } .tiles .tile.double { width: 280px !important; } .tiles .tile.double-down { height: 280px !important; } .tiles .tile.double-down i { margin-top: 95px; } .tiles .tile:hover { border-color: #aaa !important; } .tiles .tile:active, .tiles .tile.selected { border-color: #ccc !important; } .tiles .tile.selected .corner:after { content: ""; display: inline-block; border-left: 40px solid transparent; border-bottom: 40px solid transparent; border-right: 40px solid #ccc; position: absolute; top: -3px; right: -3px; } .tiles .tile.selected .check:after { content: ""; font-family: FontAwesome; font-size: 13px; content: "\f00c"; display: inline-block; position: absolute; top: 2px; right: 2px; } .tiles .tile.icon { padding: 0; } .tiles .tile.image .tile-body { padding: 0 !important; } .tiles .tile.image .tile-body > img { width: 100%; height: auto; min-height: 100%; max-width: 100%; } .tiles .tile.image .tile-body h3 { display: inline-block; } .tiles .tile .tile-body { height: 100%; vertical-align: top; padding: 10px 10px; overflow: hidden; position: relative; font-weight: 400; font-size: 12px; color: #000000; color: #ffffff; margin-bottom: 10px; } .tiles .tile .tile-body p { font-weight: 400; font-size: 13px; color: #000000; color: #ffffff; line-height: 20px; overflow: hidden; } .tiles .tile .tile-body p:hover { color: rgba(0, 0, 0, 0.8); } .tiles .tile .tile-body p:active { color: rgba(0, 0, 0, 0.4); } .tiles .tile .tile-body p:hover { color: #ffffff; } .tiles .tile .tile-body img { float: left; margin-right: 10px; } .tiles .tile .tile-body img.pull-right { float: right !important; margin-left: 10px; margin-right: 0px; } .tiles .tile .tile-body > .content { display: inline-block; } .tiles .tile .tile-body > i { margin-top: 17px; display: block; font-size: 56px; line-height: 56px; text-align: center; } .tiles .tile .tile-body h1, .tiles .tile .tile-body h2, .tiles .tile .tile-body h3, .tiles .tile .tile-body h4, .tiles .tile .tile-body h5, .tiles .tile .tile-body h6, .tiles .tile .tile-body p { padding: 0; margin: 0; line-height: 14px; } .tiles .tile .tile-body h1:hover, .tiles .tile .tile-body h2:hover, .tiles .tile .tile-body h3:hover, .tiles .tile .tile-body h4:hover, .tiles .tile .tile-body h5:hover, .tiles .tile .tile-body h6:hover, .tiles .tile .tile-body p:hover { color: #ffffff; } .tiles .tile .tile-body h3, .tiles .tile .tile-body h4 { margin-bottom: 5px; } .tiles .tile .tile-object { position: absolute; bottom: 0; left: 0; right: 0; min-height: 30px; background-color: transparent; *zoom: 1; } .tiles .tile .tile-object:before, .tiles .tile .tile-object:after { display: table; content: ""; } .tiles .tile .tile-object:after { clear: both; } .tiles .tile .tile-object > .name { position: absolute; bottom: 0; left: 0; margin-bottom: 5px; margin-left: 10px; margin-right: 15px; font-weight: 400; font-size: 13px; color: #ffffff; } .tiles .tile .tile-object > .name > i { vertical-align: middle; display: block; font-size: 24px; height: 18px; width: 24px; } .tiles .tile .tile-object > .number { position: absolute; bottom: 0; right: 0; margin-bottom: 0; color: #ffffff; text-align: center; font-weight: 600; font-size: 14px; letter-spacing: 0.01em; line-height: 14px; margin-bottom: 8px; margin-right: 10px; } /*** Custimized Bootstrap Wells ***/ .well { border: 0; padding: 20px; -webkit-box-shadow: none !important; -moz-box-shadow: none !important; box-shadow: none !important; } /*-------------------------------------------------- [Widgets] ----------------------------------------------------*/ /*** Widget Background Colors ***/ .widget-bg-color-purple { background: #9a7caf; } .widget-bg-color-purple-dark { background: #4b365a; } .widget-bg-color-purple-light { background: #674d79; } .widget-bg-color-green { background: #4db3a4; } .widget-bg-color-red { background: #f36a5a; } .widget-bg-color-blue { background: #5b9bd1; } .widget-bg-color-gray { background: #323c45; } .widget-bg-color-gray-dark { background: #144f57; } .widget-bg-color-white { background: #fff; } .widget-bg-color-dark { background: #3e4f5e; } .widget-bg-color-dark-light { background: #8e9daa; } .widget-bg-color-fb { background: #475e98; } .widget-bg-color-tw { background: #55acee; } /*** Widget Title Colors ***/ .widget-title-color-purple { color: #9a7caf; } .widget-title-color-purple-dark { color: #4b365a; } .widget-title-color-purple-light { color: #674d79; } .widget-title-color-green { color: #4db3a4; } .widget-title-color-red { color: #f36a5a; } .widget-title-color-blue { color: #5b9bd1; } .widget-title-color-gray { color: #323c45; } .widget-title-color-gray-dark { color: #144f57; } .widget-title-color-white { color: #fff; } .widget-title-color-dark { color: #3e4f5e; } .widget-title-color-dark-light { color: #8e9daa; } .widget-title-color-fb { color: #475e98; } .widget-title-color-tw { color: #55acee; } .overflow-h { overflow: hidden; } /*** Widget Carousel ***/ .widget-carousel .carousel-indicators { left: -18%; bottom: 10px; margin-left: 0; } .widget-carousel .carousel-indicators-red > li { border-color: #f36a5a; } .widget-carousel .carousel-indicators-red > li.active { background: #f36a5a; } /*** Widget Gradient ***/ .widget-gradient { position: relative; min-height: 350px; overflow: hidden; background-size: cover; background-position: 50% 50%; border-radius: 4px; } .widget-gradient .widget-gradient-body { position: absolute; top: 0; left: 0; right: 0; bottom: 0; width: auto; height: auto; padding: 20px; } .widget-gradient .widget-gradient-body .widget-gradient-title { font-size: 21px; font-weight: 600; color: #fff; margin: 0; } .widget-gradient .widget-gradient-body .widget-gradient-body-actions { position: absolute; right: 20px; bottom: 20px; padding: 0; margin: 0; } .widget-gradient .widget-gradient-body .widget-gradient-body-actions li { font-size: 14px; padding: 0 0 0 8px; } .widget-gradient .widget-gradient-body .widget-gradient-body-actions li:first-child { padding-left: 0; } .widget-gradient .widget-gradient-body .widget-gradient-body-actions li a { color: #fff; } .widget-gradient .widget-gradient-body .widget-gradient-body-actions li a:hover { color: #a1afbb; text-decoration: none; } /*** Widget Gradient ***/ .widget-wrap-img { border-radius: 4px; position: relative; min-height: 350px; padding: 20px; } .widget-wrap-img .widget-wrap-img-title { font-size: 21px; font-weight: 600; color: #3e4f5e; margin: 0 0 20px; } .widget-wrap-img .widget-wrap-img-element { position: absolute; bottom: 0; right: 0; } /*** Widget Tab ***/ .widget-tab { min-height: 420px; border-radius: 4px; } .widget-tab .nav-tabs { margin: 0; border-color: #eff1f3; } .widget-tab .nav-tabs > li { margin: 0 10px; } .widget-tab .nav-tabs > li:first-child { margin-left: 20px; } .widget-tab .nav-tabs > li > a { border: 0; font-weight: bold; color: #8e9daa; text-transform: uppercase; padding: 20px 0; } .widget-tab .nav-tabs > li > a > i { color: #8e9daa; } .widget-tab .nav-tabs > li.open, .widget-tab .nav-tabs > li:hover { border-bottom: 1px solid #f36a5a; } .widget-tab .nav-tabs > li.open > a, .widget-tab .nav-tabs > li:hover > a { border: 0; background: inherit; color: #f36a5a; } .widget-tab .nav-tabs > li.open > a > i, .widget-tab .nav-tabs > li:hover > a > i { color: #f36a5a; } .widget-tab .nav-tabs > li.active { border-bottom: 1px solid #f36a5a; position: relative; } .widget-tab .nav-tabs > li.active > a { border: 0; color: #f36a5a; } .widget-tab .nav-tabs > li.active > a > i { color: #f36a5a; } .widget-tab .tab-content { padding: 20px; color: #8e9daa; } .widget-tab .slimScrollBar { right: 10px !important; margin-top: 17px !important; margin-bottom: 17px !important; } /*** Widget News ***/ .widget-news { overflow: hidden; margin-right: 10px; border-radius: 4px; } .widget-news .widget-news-left-elem { float: left; width: 100px; height: auto; margin-right: 15px; } .widget-news .widget-news-right-body { overflow: hidden; } .widget-news .widget-news-right-body .widget-news-right-body-title { font-size: 16px; font-weight: 600; color: #3e4f5e; margin: 0 0 5px; clear: both; } .widget-news .widget-news-right-body .widget-news-right-body-title .label { float: right; font-weight: 600; background: #a1afbb; border-radius: 3px !important; } .widget-news .widget-news-right-body p { font-size: 13px; } /*** Widget Thumb ***/ .widget-thumb { padding: 20px; border-radius: 4px; } .widget-thumb.bordered { border: 1px solid #e7ecf1; } .widget-thumb .widget-thumb-heading { font-size: 14px; font-weight: bold; color: #8e9daa; margin: 0 0 20px 0; } .widget-thumb .widget-thumb-wrap { overflow: hidden; } .widget-thumb .widget-thumb-wrap .widget-thumb-icon { float: left; width: 60px; height: 60px; display: inline-block; font-size: 20px; line-height: 41px; color: #fff; text-align: center; padding: 10px; margin-right: 15px; } .widget-thumb .widget-thumb-body { overflow: hidden; } .widget-thumb .widget-thumb-body .widget-thumb-subtitle { padding-top: 2px; display: block; font-size: 14px; font-weight: 600; color: #8e9daa; } .widget-thumb .widget-thumb-body .widget-thumb-body-stat { display: block; font-size: 30px; font-weight: 600; color: #3e4f5e; } /*** Widget Socials ***/ .widget-socials { border-radius: 4px; min-height: 250px; padding: 20px; } .widget-socials .widget-socials-title { font-size: 25px; font-weight: 700; line-height: 1.4; color: #fff; margin: 0 0 20px; } .widget-socials .widget-social-subtitle { color: #fff; font-weight: 200; line-height: 1.4; } .widget-socials .widget-social-subtitle a { color: #fff; } .widget-socials .widget-socials-paragraph { display: block; color: #65727d; } .widget-socials .widget-social-icon-fb, .widget-socials .widget-social-icon-tw { font-size: 30px; margin: 30px 0; } .widget-socials .widget-social-icon-fb { color: #2b3f72; } .widget-socials .widget-social-icon-tw { color: #3686c3; } /*** Widget Comments ***/ .widget-comments { min-height: 420px; } /*** Widget Media ***/ .widget-media { border-radius: 4px; border-bottom: 1px solid #f6f9fc; overflow: hidden; padding-bottom: 15px; margin-bottom: 15px; } .widget-media .widget-media-elements { float: left; margin-right: 20px; } .widget-media .widget-media-avatar { width: 55px; height: 55px; display: block; } .widget-media .widget-btn-default { display: inline-block; font-size: 12px; color: #96a2b1; border: 1px solid #ebf0f6; padding: 3px 10px; } .widget-media .widget-btn-default .widget-btn-icon { line-height: 1.5; } .widget-media .widget-btn-default:hover { background: #ebf0f6; text-decoration: none; } .widget-media .widget-btn-red { display: inline-block; font-size: 12px; color: #f36a5a; border: 1px solid #ebf0f6; padding: 3px 10px; } .widget-media .widget-btn-red .widget-btn-icon { line-height: 1.5; } .widget-media .widget-btn-red:hover { color: #fff; background: #f36a5a; text-decoration: none; } .widget-media .widget-btn-blue { display: inline-block; font-size: 12px; color: #fff; border: 1px solid #ebf0f6; padding: 3px 10px; background: #337ab7; } .widget-media .widget-btn-blue .widget-btn-icon { line-height: 1.5; } .widget-media .widget-btn-blue:hover { color: #337ab7; background: #fff; text-decoration: none; } .widget-media .widget-media-body { overflow: hidden; } .widget-media .widget-media-body .widget-media-body-title { font-size: 15px; font-weight: 600; color: #5b9bd1; margin: 0 0 7px; } .widget-media .widget-media-body .widget-media-body-subtitle { font-size: 13px; color: #7e8c9e; } /*** Widget Blog ***/ .widget-blog { border-radius: 4px; background: #fff; padding: 20px; background-position: center center; background-size: cover; padding-top: 30px; } .widget-blog .widget-blog-heading { position: relative; margin-bottom: 30px; } .widget-blog .widget-blog-heading:before { position: absolute; bottom: -15px; left: 50%; width: 50px; height: 1px; border-width: 1px; background: #8e9daa; margin-left: -25px; content: " "; } .widget-blog .widget-blog-title { font-size: 20px; font-weight: 400; color: #3e4f5e; margin: 0 0 15px; } .widget-blog .widget-blog-title a { color: #3e4f5e; } .widget-blog .widget-blog-subtitle { display: block; font-size: 13px; color: #8e9daa; letter-spacing: 3px; } .widget-blog .btn-widget-purple { display: inline-block; font-size: 13px; color: #8e9daa; border: 1px solid #8e9daa; padding: 7px 17px; } .widget-blog .btn-widget-purple:hover { color: #fff; background: #8e9daa; text-decoration: none; } /*** Widget Progress ***/ .widget-progress { min-height: 420px; } .widget-progress .widget-progress-element { border-radius: 4px; overflow: hidden; padding: 30px 10px; } .widget-progress .widget-progress-title { display: block; color: #fff; margin-bottom: 5px; } .widget-progress .progress { height: 3px; background: rgba(255, 255, 255, 0.2); margin-bottom: 0; } /*** Widget Gradient ***/ .widget-map { border-radius: 4px; min-height: 350px; border-radius: 3px; } .widget-map .widget-map-mapplic { border-top-right-radius: 3px; border-top-left-radius: 3px; } .widget-map .widget-map-mapplic .mapplic-container { background: #5b9bd1; } .widget-map .widget-map-mapplic .mapplic-layer.world > img { opacity: .3; } .widget-map .widget-map-body { background: #fff; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; padding: 20px; overflow: hidden; } .widget-map .widget-sparkline-chart { width: 25%; float: left; border-left: 1px solid #e7eff7; padding: 0 15px; } .widget-map .widget-sparkline-chart:first-child { border-left: none; } .widget-map .widget-sparkline-chart .widget-sparkline-title { display: block; font-size: 12px; font-weight: 600; color: #a1afbb; } /* Widget Map for max-width 480px */ @media (max-width: 480px) { /* 480px */ .widget-map .widget-sparkline-chart { width: 50%; border-left: none; margin-top: 10px; margin-bottom: 10px; } } /*** Widget Subscribe ***/ .widget-subscribe { border-radius: 4px; min-height: 250px; overflow: hidden; padding: 30px; } .widget-subscribe .widget-subscribe-no { float: left; font-size: 67px; font-weight: 600; line-height: 1; color: #9a7caf; } .widget-subscribe .widget-subscribe-title { font-size: 25px; font-weight: 700; line-height: 1.4; margin: 0 0 15px 45px; } .widget-subscribe .widget-subscribe-subtitle { font-size: 15px; font-weight: 600; } .widget-subscribe .widget-subscribe-subtitle-link { color: #cab0dd; } .widget-subscribe.widget-subscribe-quote { position: relative; } .widget-subscribe.widget-subscribe-quote:before { position: absolute; top: 2px; font-size: 70px; color: #fff; content: "\201C"; } /* Widget Subscribe for media queries */ @media (max-width: 767px) { /* 767px */ .widget-subscribe.widget-subscribe-border { border-top: 1px solid #f5f8fb; border-bottom: 1px solid #f5f8fb; border-right: none; } } @media (min-width: 768px) { /* 768px */ .widget-subscribe.widget-subscribe-border { border-left: 1px solid #f5f8fb; border-right: 1px solid #f5f8fb; } } @media (min-width: 767px) and (max-width: 991px) { /* 767px & 991px */ .widget-subscribe.widget-subscribe-border { border-left: none; } .widget-subscribe.widget-subscribe-border-top { border-top: 1px solid #f5f8fb; } } /*-------------------------------------------------- [Material Design] ----------------------------------------------------*/ .page-md .widget-bg-color-white, .page-md .widget-map, .page-md .widget-carousel, .page-md .widget-progress-element, .page-md .widget-socials, .page-md .widget-blog { box-shadow: 0px 2px 3px 2px rgba(0, 0, 0, 0.03); } /*** AngularJS Basic Animations ***/ @-webkit-keyframes fadeInUp { 0% { opacity: 0; -webkit-transform: translateY(15px); } 100% { opacity: 1; -webkit-transform: translateY(0); } } @-moz-keyframes fadeInUp { 0% { opacity: 0; -moz-transform: translateY(15px); } 100% { opacity: 1; -moz-transform: translateY(0); } } @-o-keyframes fadeInUp { 0% { opacity: 0; -o-transform: translateY(15px); } 100% { opacity: 1; -o-transform: translateY(0); } } @keyframes fadeInUp { 0% { opacity: 0; transform: translateY(15px); } 100% { opacity: 1; transform: translateY(0); } } .fade-in-up { -webkit-animation: fadeInUp .5s; animation: fadeInUp .5s; } @-webkit-keyframes bounceDelay { 0%, 80%, 100% { -webkit-transform: scale(0); } 40% { -webkit-transform: scale(1); } } @keyframes bounceDelay { 0%, 80%, 100% { transform: scale(0); -webkit-transform: scale(0); } 40% { transform: scale(1); -webkit-transform: scale(1); } } @keyframes input-focus { 0% { left: 20%; width: 20%; } 99% { width: 0; left: 0; opacity: 1; } 100% { opacity: 0; } } .m-heading-1 { margin: 0 0 20px 0; background: #ffffff; padding-left: 15px; border-left: 8px solid #88909a; } .m-heading-1 > h3 { font-size: 20px; color: #3f444a; font-weight: 500; margin: 0 0 15px 0; } .m-heading-1 > h3 > i { font-size: 18px; color: #88909a; } .m-heading-1 > p { color: #5c6873; margin: 10px 0 0 0; } .m-heading-1 > p:first-child { margin-top: 0; } .m-heading-1.m-bordered { border-right: 1px solid #10161c; border-top: 1px solid #10161c; border-bottom: 1px solid #10161c; padding: 15px 15px; } .page-container-bg-solid .m-heading-1.m-bordered { border-right: 0; border-top: 0; border-bottom: 0; } .m-heading-1.m-title-md > h3 { font-size: 18px; margin-bottom: 10px; } .m-heading-1.m-title-md > h3 > i { font-size: 16px; color: #88909a; } .m-heading-1.m-title-md > p { margin: 15px 0; } .m-heading-1.m-title-sm > h3 { font-size: 16px; margin-bottom: 10px; } .m-heading-1.m-title-sm > h3 > i { font-size: 14px; color: #88909a; } .m-heading-1.m-title-sm > p { margin: 10px 0; } @media (max-width: 991px) { /* 991px */ .m-heading-1 { margin: 0px 0; } } /*** Timeline ***/ .timeline { margin: 0; padding: 0; position: relative; margin-bottom: 30px; } .timeline:before { content: ''; position: absolute; display: block; width: 4px; background: #f5f6fa; top: 0px; bottom: 0px; margin-left: 38px; } .timeline .timeline-item { margin: 0; padding: 0; } .timeline .timeline-badge { float: left; position: relative; padding-right: 30px; height: 80px; width: 80px; } .timeline .timeline-badge-userpic { width: 80px; border: 4px #f5f6fa solid; -webkit-border-radius: 50% !important; -moz-border-radius: 50% !important; border-radius: 50% !important; } .timeline .timeline-badge-userpic img { -webkit-border-radius: 50% !important; -moz-border-radius: 50% !important; border-radius: 50% !important; vertical-align: middle !important; } .timeline .timeline-icon { width: 80px; height: 80px; background-color: #f5f6fa; -webkit-border-radius: 50% !important; -moz-border-radius: 50% !important; border-radius: 50% !important; padding-top: 30px; padding-left: 22px; } .timeline .timeline-icon i { font-size: 34px; } .timeline .timeline-body { position: relative; padding: 20px; margin-top: 20px; margin-left: 110px; background-color: #f5f6fa; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .timeline .timeline-body:before, .timeline .timeline-body:after { content: " "; display: table; } .timeline .timeline-body:after { clear: both; } .timeline .timeline-body-arrow { position: absolute; top: 30px; left: -14px; width: 0; height: 0; border-style: solid; border-width: 14px 14px 14px 0; border-color: transparent #f5f6fa transparent transparent; } .timeline .timeline-body-head { margin-bottom: 10px; } .timeline .timeline-body-head-caption { float: left; } .timeline .timeline-body-title { font-size: 16px; font-weight: 600; } .timeline .timeline-body-alerttitle { font-size: 16px; font-weight: 600; } .timeline .timeline-body-time { font-size: 14px; margin-left: 10px; } .timeline .timeline-body-head-actions { float: right; } .timeline .timeline-body-head-actions .btn-group { margin-top: -2px; } .timeline .timeline-body-content { font-size: 14px; margin-top: 35px; } .timeline .timeline-body-img { width: 100px; height: 100px; margin: 5px 20px 0 0px; } .timeline.white-bg:before { background: #fff; } .timeline.white-bg .timeline-badge-userpic { border-color: #fff; } .timeline.white-bg .timeline-icon { background-color: #fff; } .timeline.white-bg .timeline-body { background-color: #fff; } .timeline.white-bg .timeline-body-arrow { border-color: transparent #fff transparent transparent; } @media (max-width: 768px) { .timeline .timeline-body-head-caption { width: 100%; } .timeline .timeline-body-head-actions { float: left; width: 100%; margin-top: 20px; margin-bottom: 20px; } } @media (max-width: 480px) { .timeline:before { margin-left: 28px; } .timeline .timeline-badge { padding-right: 40px; width: 60px; height: 60px; } .timeline .timeline-badge-userpic { width: 60px; } .timeline .timeline-icon { width: 60px; height: 60px; padding-top: 23px; padding-left: 18px; } .timeline .timeline-icon i { font-size: 25px; } .timeline .timeline-body { margin-left: 80px; } .timeline .timeline-body-arrow { top: 17px; } } /*** Timeline 2 ***/ .mt-timeline-2 { position: relative; } .mt-timeline-2 > .mt-timeline-line { position: absolute; z-index: 1; height: 100%; width: 1px; top: 0; left: 50%; border-left: 4px solid; transform: translateX(-2px); } .mt-timeline-2 > .mt-container { position: relative; padding: 0; } .mt-timeline-2 > .mt-container > .mt-item { list-style: none; padding-bottom: 60px; clear: both; } .mt-timeline-2 > .mt-container > .mt-item .timeline-body-img.pull-left { margin-right: 15px; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-icon { width: 70px; height: 70px; background-color: #ccc; border-radius: 50% !important; position: absolute; left: 50%; transform: translateX(-50%); z-index: 5; border: 0; overflow: hidden; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-icon > i { top: 50%; left: 50%; transform: translateY(-50%) translateX(-50%); font-size: 24px; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-icon > img { width: 100%; height: auto; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content { width: 50%; display: inline-block; position: relative; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container { text-align: left; background-color: #f5f6fa; padding: 30px; border: 2px solid; border-color: #d3d7e9; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container:before, .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container:after { content: " "; display: table; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container:after { clear: both; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-author, .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-title { width: 50%; margin-bottom: 15px; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-content-title { opacity: 0.8 ; filter: alpha(opacity=80) ; margin-top: 10px; font-size: 18px; font-weight: 600; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-avatar { width: 40px; height: 40px; border-radius: 50% !important; overflow: hidden; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-avatar > img { width: 100%; height: auto; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-author-name, .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-author-name a { opacity: 0.9 ; filter: alpha(opacity=90) ; font-size: 15px; font-weight: 600; text-decoration: none; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-author-notes { font-size: 12px; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-content { padding-top: 15px; border-top: 1px solid; clear: both; line-height: 1.7em; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-content > p { opacity: 0.7 ; filter: alpha(opacity=70) ; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-content a, .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-content button { font-size: 14px; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .btn { display: inline-block; margin: 0 5px 10px 0; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .btn.pull-right { margin: 0 0 10px 5px; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container:before { content: ''; position: absolute; top: 28px; height: 0; width: 0; border: 10px solid transparent; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) { text-align: left; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container { margin-right: 60px; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-title { float: left; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-author { float: right; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-avatar { float: right; margin-left: 15px; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-author-name, .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-author-notes { text-align: right; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container:before { right: 40px; border-left: 10px solid #d3d7e9; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) { text-align: right; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-icon > i { transform: translateY(-50%) translateX(50%); left: -50%; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container { margin-left: 60px; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container .mt-avatar { float: left; margin-right: 15px; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container .mt-title { float: right; text-align: right; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container .mt-author { float: left; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container .mt-author-name, .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container .mt-author-notes { text-align: left; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container:before { left: 40px; border-right: 10px solid #E9EDEF; } @media (max-width: 991px) { /* 991px */ .mt-timeline-2 > .mt-timeline-line { left: 25px; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-icon { left: 25px; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-icon > i { left: 0; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content { width: 100%; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-title { float: none; text-align: left !important; } .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-author, .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-title { width: 100%; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) { text-align: right; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container { margin-left: 80px; margin-right: 0; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-avatar { float: left; margin-right: 15px; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-title { float: right; text-align: right; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-author { float: left; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-author-name, .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-author-notes { text-align: left; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container:before { left: 70px; border-right: 10px solid #E9EDEF; border-left: none; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container { margin-left: 80px; margin-right: 0; } .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container:before { left: 70px; border-right: 10px solid #E9EDEF; border-left: none; } } @media (max-width: 480px) { .btn.pull-right, .btn-group.pull-right { float: none !important; margin: 0 5px 10px 0 !important; } } @media (max-width: 400px) { .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container .mt-author-notes { clear: both; padding-top: 10px; } } /*** Horizontal Timeline ***/ /* PLUGIN CSS */ .cd-horizontal-timeline { opacity: 0; -webkit-transition: opacity 0.2s; -moz-transition: opacity 0.2s; transition: opacity 0.2s; } .cd-horizontal-timeline::before { /* never visible - this is used in jQuery to check the current MQ */ content: 'mobile'; display: none; } .cd-horizontal-timeline.loaded { /* show the timeline after events position has been set (using JavaScript) */ opacity: 1; } .cd-horizontal-timeline .timeline { position: relative; height: 100px; width: 90%; max-width: 800px; margin: 0 auto; } .cd-horizontal-timeline .events-wrapper { position: relative; height: 100%; margin: 0 40px; overflow: hidden; } .cd-horizontal-timeline .events-wrapper::after, .cd-horizontal-timeline .events-wrapper::before { /* these are used to create a shadow effect at the sides of the timeline */ content: ''; position: absolute; z-index: 2; top: 0; height: 100%; width: 20px; } .cd-horizontal-timeline .events-wrapper::before { left: 0; background-image: -webkit-linear-gradient(left, #f8f8f8, rgba(248, 248, 248, 0)); background-image: linear-gradient(to right, #f8f8f8, rgba(248, 248, 248, 0)); } .cd-horizontal-timeline .events-wrapper::after { right: 0; background-image: -webkit-linear-gradient(right, #f8f8f8, rgba(248, 248, 248, 0)); background-image: linear-gradient(to left, #f8f8f8, rgba(248, 248, 248, 0)); } .cd-horizontal-timeline .events { /* this is the grey line/timeline */ position: absolute; z-index: 1; left: 0; top: 49px; height: 2px; /* width will be set using JavaScript */ background: #dfdfdf; -webkit-transition: -webkit-transform 0.4s; -moz-transition: -moz-transform 0.4s; transition: transform 0.4s; } .cd-horizontal-timeline .filling-line { /* this is used to create the green line filling the timeline */ position: absolute; z-index: 1; left: 0; top: 0; height: 100%; width: 100%; background-color: #7b9d6f; -webkit-transform: scaleX(0); -moz-transform: scaleX(0); -ms-transform: scaleX(0); -o-transform: scaleX(0); transform: scaleX(0); -webkit-transform-origin: left center; -moz-transform-origin: left center; -ms-transform-origin: left center; -o-transform-origin: left center; transform-origin: left center; -webkit-transition: -webkit-transform 0.3s; -moz-transition: -moz-transform 0.3s; transition: transform 0.3s; } .cd-horizontal-timeline .events a { position: absolute; bottom: 0; z-index: 2; text-align: center; font-size: 1.3rem; padding-bottom: 15px; color: #383838; /* fix bug on Safari - text flickering while timeline translates */ -webkit-transform: translateZ(0); -moz-transform: translateZ(0); -ms-transform: translateZ(0); -o-transform: translateZ(0); transform: translateZ(0); } .cd-horizontal-timeline .events a::after { /* this is used to create the event spot */ content: ''; position: absolute; left: 50%; right: auto; -webkit-transform: translateX(-50%); -moz-transform: translateX(-50%); -ms-transform: translateX(-50%); -o-transform: translateX(-50%); transform: translateX(-50%); bottom: -5px; height: 12px; width: 12px; border-radius: 50%; -webkit-transition: background-color 0.3s, border-color 0.3s; -moz-transition: background-color 0.3s, border-color 0.3s; transition: background-color 0.3s, border-color 0.3s; } .no-touch .cd-horizontal-timeline .events a:hover::after { background-color: #7b9d6f; border-color: #7b9d6f; } .cd-horizontal-timeline .events a.selected { pointer-events: none; } @media only screen and (min-width: 1100px) { .cd-horizontal-timeline::before { /* never visible - this is used in jQuery to check the current MQ */ content: 'desktop'; } } .cd-timeline-navigation a { /* these are the left/right arrows to navigate the timeline */ position: absolute; z-index: 1; top: 50%; bottom: auto; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); -o-transform: translateY(-50%); transform: translateY(-50%); height: 34px; width: 34px; border-radius: 50%; border: 2px solid #dfdfdf; /* replace text with an icon */ overflow: hidden; color: transparent; text-indent: 100%; white-space: nowrap; -webkit-transition: border-color 0.3s; -moz-transition: border-color 0.3s; transition: border-color 0.3s; } .cd-timeline-navigation a.prev { left: 0; } .cd-timeline-navigation a.next { right: 0; } .cd-timeline-navigation a.inactive { cursor: not-allowed; } .cd-timeline-navigation a.inactive::after { background-position: 0 -16px; } .no-touch .cd-timeline-navigation a.inactive:hover { border-color: #dfdfdf; } .cd-horizontal-timeline .events-content { position: relative; width: 100%; margin: 10px 0 0 0; overflow: hidden; -webkit-transition: height 0.4s; -moz-transition: height 0.4s; transition: height 0.4s; } .cd-horizontal-timeline .events-content > ol > li { position: absolute; z-index: 1; width: 100%; left: 0; top: 0; -webkit-transform: translateX(-100%); -moz-transform: translateX(-100%); -ms-transform: translateX(-100%); -o-transform: translateX(-100%); transform: translateX(-100%); padding: 0; opacity: 0; -webkit-animation-duration: 0.4s; -moz-animation-duration: 0.4s; animation-duration: 0.4s; -webkit-animation-timing-function: ease-in-out; -moz-animation-timing-function: ease-in-out; animation-timing-function: ease-in-out; } .cd-horizontal-timeline .events-content > ol > li.selected { /* visible event content */ position: relative; z-index: 2; opacity: 1; -webkit-transform: translateX(0); -moz-transform: translateX(0); -ms-transform: translateX(0); -o-transform: translateX(0); transform: translateX(0); } .cd-horizontal-timeline .events-content > ol > li.enter-right, .cd-horizontal-timeline .events-content > ol > li.leave-right { -webkit-animation-name: cd-enter-right; -moz-animation-name: cd-enter-right; animation-name: cd-enter-right; } .cd-horizontal-timeline .events-content > ol > li.enter-left, .cd-horizontal-timeline .events-content > ol > li.leave-left { -webkit-animation-name: cd-enter-left; -moz-animation-name: cd-enter-left; animation-name: cd-enter-left; } .cd-horizontal-timeline .events-content > ol > li.leave-right, .cd-horizontal-timeline .events-content > ol > li.leave-left { -webkit-animation-direction: reverse; -moz-animation-direction: reverse; animation-direction: reverse; } .cd-horizontal-timeline .events-content > ol > li { margin: 0 auto; } .cd-horizontal-timeline .events-content em { display: block; font-style: italic; margin: 10px auto; } .cd-horizontal-timeline .events-content em::before { content: '- '; } @-webkit-keyframes cd-enter-right { 0% { opacity: 0; -webkit-transform: translateX(100%); } 100% { opacity: 1; -webkit-transform: translateX(0%); } } @-moz-keyframes cd-enter-right { 0% { opacity: 0; -moz-transform: translateX(100%); } 100% { opacity: 1; -moz-transform: translateX(0%); } } @keyframes cd-enter-right { 0% { opacity: 0; -webkit-transform: translateX(100%); -moz-transform: translateX(100%); -ms-transform: translateX(100%); -o-transform: translateX(100%); transform: translateX(100%); } 100% { opacity: 1; -webkit-transform: translateX(0%); -moz-transform: translateX(0%); -ms-transform: translateX(0%); -o-transform: translateX(0%); transform: translateX(0%); } } @-webkit-keyframes cd-enter-left { 0% { opacity: 0; -webkit-transform: translateX(-100%); } 100% { opacity: 1; -webkit-transform: translateX(0%); } } @-moz-keyframes cd-enter-left { 0% { opacity: 0; -moz-transform: translateX(-100%); } 100% { opacity: 1; -moz-transform: translateX(0%); } } @keyframes cd-enter-left { 0% { opacity: 0; -webkit-transform: translateX(-100%); -moz-transform: translateX(-100%); -ms-transform: translateX(-100%); -o-transform: translateX(-100%); transform: translateX(-100%); } 100% { opacity: 1; -webkit-transform: translateX(0%); -moz-transform: translateX(0%); -ms-transform: translateX(0%); -o-transform: translateX(0%); transform: translateX(0%); } } /* METRONIC EXTENDED CSS */ .mt-timeline-horizontal { font-size: 14px; } .mt-timeline-horizontal ol, .mt-timeline-horizontal ul { list-style: none; } .mt-timeline-horizontal blockquote, .mt-timeline-horizontal q { quotes: none; } .mt-timeline-horizontal blockquote:before, .mt-timeline-horizontal blockquote:after, .mt-timeline-horizontal q:before, .mt-timeline-horizontal q:after { content: ''; content: none; } .mt-timeline-horizontal table { border-collapse: collapse; border-spacing: 0; } .mt-timeline-horizontal .timeline { width: 100%; max-width: 100%; } .mt-timeline-horizontal .timeline:before { background: transparent; } .mt-timeline-horizontal .timeline .events-wrapper .events a:after { background-color: transparent; border: 2px solid; } .mt-timeline-horizontal .timeline .events-wrapper .events a.selected:after { background-color: #fff !important; } .mt-timeline-horizontal .timeline .events-wrapper .events a:hover, .mt-timeline-horizontal .timeline .events-wrapper .events a:focus { text-decoration: none; } .mt-timeline-horizontal .timeline .events-wrapper:before, .mt-timeline-horizontal .timeline .events-wrapper:after { background-image: none; } .mt-timeline-horizontal .timeline .mt-ht-nav-icon li a { border-radius: 50% !important; } .mt-timeline-horizontal .timeline .mt-ht-nav-icon li a i { position: absolute; top: 50%; left: 0; transform: translateX(50%) translateY(-50%); width: 10px; } .mt-timeline-horizontal .timeline .mt-ht-nav-icon li:first-child a i { left: -2px; } .mt-timeline-horizontal .timeline.mt-timeline-square .events a:after { border-radius: 0 !important; } .mt-timeline-horizontal .timeline.mt-timeline-square .mt-ht-nav-icon li a { border-radius: 0 !important; } .mt-timeline-horizontal .events-content ol { padding: 0; } .mt-timeline-horizontal .events-content ol li .mt-title { margin-top: 15px; float: left; width: 60%; } .mt-timeline-horizontal .events-content ol li .mt-title h2 { margin: 0; opacity: 0.8 ; filter: alpha(opacity=80) ; font-size: 18px; font-weight: 600; } .mt-timeline-horizontal .events-content ol li .mt-author { float: right; position: relative; text-align: right; width: 40%; } .mt-timeline-horizontal .events-content ol li .mt-author > .mt-avatar { float: right; margin-left: 15px; } .mt-timeline-horizontal .events-content ol li .mt-author > .mt-author-name { margin-top: 5px; } .mt-timeline-horizontal .events-content ol li .mt-author > .mt-author-name a { opacity: 0.9 ; filter: alpha(opacity=90) ; font-size: 15px; font-weight: 600; } .mt-timeline-horizontal .events-content ol li .mt-author > .mt-author-name a:hover, .mt-timeline-horizontal .events-content ol li .mt-author > .mt-author-name a:focus { text-decoration: none; } .mt-timeline-horizontal .events-content ol li .mt-author > .mt-author-datetime { font-size: 13px; } .mt-timeline-horizontal .events-content ol li .mt-author > .mt-avatar { width: 50px; height: 50px; border-radius: 50% !important; overflow: hidden; } .mt-timeline-horizontal .events-content ol li .mt-author > .mt-avatar > img { width: 100%; height: auto; } .mt-timeline-horizontal .events-content ol li .mt-content { margin-top: 20px; padding-top: 20px; border-top: 1px solid; clear: both; line-height: 1.7em; } .mt-timeline-horizontal .events-content ol li .mt-content > p { opacity: 0.7 ; filter: alpha(opacity=70) ; } .mt-timeline-horizontal .events-content ol li .mt-content img.pull-left { margin: 0 15px 15px 0; } .mt-timeline-horizontal .events-content ol li .mt-content img.pull-right { margin: 0 0 15px 15px; } .mt-timeline-horizontal .events-content ol li .mt-content .btn-group .dropdown-menu { margin-right: 5px; } @media (max-width: 480px) { .mt-timeline-horizontal .events-content ol li .mt-title { width: 100%; } .mt-timeline-horizontal .events-content ol li .mt-author { width: 100%; margin-top: 15px; text-align: left; } .mt-timeline-horizontal .events-content ol li .mt-author > .mt-avatar { float: left; margin-right: 15px; margin-left: 0; } .mt-timeline-horizontal .events-content ol li .mt-author > .mt-author-name { margin-top: 10px; } .mt-timeline-horizontal .btn.pull-right { float: none !important; margin: 0 !important; } } /*** Tasks Widget ***/ .tasks-widget:after { clear: both; } .tasks-widget .task-list { list-style: none; padding: 0; margin: 0; } .tasks-widget .task-list > li { position: relative; padding: 10px 10px; border-bottom: 1px solid #F4F6F9; } .tasks-widget .task-list > li:hover { background: #F4F6F9; } .tasks-widget .task-list > li.last-line { border-bottom: none; } .tasks-widget .task-list > li.task-done { background: #f6f6f6; } .tasks-widget .task-list > li.task-done:hover { background: #f4f4f4; } .tasks-widget .task-list > li.task-done .task-title-sp { text-decoration: line-through; } .tasks-widget .task-list > li > .task-bell { margin-left: 10px; } .tasks-widget .task-list > li > .task-checkbox { float: left; width: 30px; } .tasks-widget .task-list > li > .task-checkbox input[type="checkbox"] { cursor: pointer; } .tasks-widget .task-list > li > .task-title { color: #838FA1; margin-right: 10px; } .tasks-widget .task-list > li > .task-title .task-title-sp { margin-right: 5px; } .tasks-widget .task-list > li .task-config-btn { margin-top: -1px; } .tasks-widget .task-list > li > .task-config { display: none; position: absolute; top: 7px; right: 10px; } .tasks-widget .task-list > li:hover > .task-config { display: block; margin-bottom: 0 !important; } .tasks-widget .task-footer { margin-top: 5px; } .tasks-widget .task-footer:before, .tasks-widget .task-footer:after { content: " "; display: table; } .tasks-widget .task-footer:after { clear: both; } @media only screen and (max-width: 480px) { .tasks-widget .task-config-btn { float: inherit; display: block; } .tasks-widget .task-list-projects li > .label { margin-bottom: 5px; } } .mt-comments .mt-comment { padding: 10px; margin: 0 0 10px 0; } .mt-comments .mt-comment .mt-comment-img { width: 40px; float: left; } .mt-comments .mt-comment .mt-comment-img > img { border-radius: 50% !important; } .mt-comments .mt-comment .mt-comment-body { padding-left: 20px; position: relative; overflow: hidden; } .mt-comments .mt-comment .mt-comment-body .mt-comment-info:before, .mt-comments .mt-comment .mt-comment-body .mt-comment-info:after { content: " "; display: table; } .mt-comments .mt-comment .mt-comment-body .mt-comment-info:after { clear: both; } .mt-comments .mt-comment .mt-comment-body .mt-comment-info .mt-comment-author { display: inline-block; float: left; margin: 0px 0px 10px 0; color: #060606; font-weight: 600; } .mt-comments .mt-comment .mt-comment-body .mt-comment-info .mt-comment-date { display: inline-block; float: right; margin: 0px; color: #BABABA; } .mt-comments .mt-comment .mt-comment-body .mt-comment-text { color: #999999; } .mt-comments .mt-comment .mt-comment-body .mt-comment-details { margin: 10px 0px 0px 0; } .mt-comments .mt-comment .mt-comment-body .mt-comment-details .mt-comment-status { text-transform: uppercase; float: left; } .mt-comments .mt-comment .mt-comment-body .mt-comment-details .mt-comment-status.mt-comment-status-pending { color: #B8C0F5; } .mt-comments .mt-comment .mt-comment-body .mt-comment-details .mt-comment-status.mt-comment-status-approved { color: #6BD873; } .mt-comments .mt-comment .mt-comment-body .mt-comment-details .mt-comment-status.mt-comment-status-rejected { color: red; } .mt-comments .mt-comment .mt-comment-body .mt-comment-details .mt-comment-actions { display: none; list-style: none; margin: 0; padding: 0; float: right; } .mt-comments .mt-comment .mt-comment-body .mt-comment-details .mt-comment-actions > li { float: left; padding: 0 5px; margin: 0; } .mt-comments .mt-comment .mt-comment-body .mt-comment-details .mt-comment-actions > li > a { text-transform: uppercase; color: #999999; } .mt-comments .mt-comment .mt-comment-body .mt-comment-details .mt-comment-actions > li > a:hover { color: #666666; text-decoration: none; } .mt-comments .mt-comment:hover { background: #f9f9f9; } .mt-comments .mt-comment:hover .mt-comment-body .mt-comment-details .mt-comment-actions { display: inline-block; } .mt-actions .mt-action { margin: 0px; padding: 15px 0 15px 0; border-bottom: 1px solid #f7f8f9; } .mt-actions .mt-action:last-child { border-bottom: 0px; } .mt-actions .mt-action .mt-action-img { width: 40px; float: left; } .mt-actions .mt-action .mt-action-img > img { border-radius: 50% !important; margin-bottom: 2px; } .mt-actions .mt-action .mt-action-body { padding-left: 15px; position: relative; overflow: hidden; } .mt-actions .mt-action .mt-action-body .mt-action-row { display: table; width: 100%; } .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-info { display: table-cell; vertical-align: top; } .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-info .mt-action-icon { display: table-cell; padding: 6px 20px 6px 6px; } .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-info .mt-action-icon > i { display: inline-block; position: relative; top: 10px; font-size: 25px; color: #78E0E8; } .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-info .mt-action-details { display: table-cell; vertical-align: top; } .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-info .mt-action-details .mt-action-author { color: #060606; font-weight: 600; } .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-info .mt-action-details .mt-action-desc { margin-bottom: 0; color: #999b9b; } .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-datetime { vertical-align: top; display: table-cell; text-align: center; width: 150px; white-space: nowrap; padding-top: 15px; color: #A6A8A8; } .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-datetime .mt-action-dot { display: inline-block; width: 10px; height: 10px; background-color: red; border-radius: 50% !important; margin-left: 5px; margin-right: 5px; } .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-buttons { vertical-align: top; display: table-cell; text-align: center; width: 160px; white-space: nowrap; padding-top: 10px; } @media (max-width: 767px) { /* 767px */ .mt-actions .mt-action .mt-action-body .mt-action-row { display: block; } .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-info { display: block; } .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-datetime { display: inline-block; margin-left: 40px; } .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-buttons { display: inline-block; float: right; } } .mt-widget-1 { border: 1px solid #e7ecf1; text-align: center; position: relative; } .mt-widget-1 .mt-icon { position: absolute; right: 10px; top: 10px; margin: 7px; font-size: 20px; } .mt-widget-1 .mt-icon > a > i { color: #a1e5e1; } .mt-widget-1 .mt-icon > a:hover > i { color: #79dad5; } .mt-widget-1 .mt-img { display: inline-block; border-radius: 50% !important; border: 4px solid #e7ecf1; margin: 40px 0 30px 0; } .mt-widget-1 .mt-img > img { border: 1px solid trnsparent; border-radius: 50% !important; } .mt-widget-1 .mt-body .mt-username { text-align: center; margin: 5px 10px; font-weight: 600; font-size: 16px; } .mt-widget-1 .mt-body .mt-user-title { text-align: center; margin: 10px 10px 10px 10px; color: #666666; font-size: 13px; } .mt-widget-1 .mt-body .mt-stats { margin: 30px 0px 0px 0px; } .mt-widget-1 .mt-body .mt-stats .btn-group { border-top: 1px solid #e7ecf1; } .mt-widget-1 .mt-body .mt-stats .btn-group .btn { padding: 10px 10px; font-size: 14px; border-right: 1px solid #e7ecf1; } .mt-widget-1 .mt-body .mt-stats .btn-group .btn:hover { background-color: #e7ecf1; } .mt-widget-1 .mt-body .mt-stats .btn-group .btn:last-child { border: 0; } .mt-widget-1 .mt-body .mt-stats .btn-group .btn > i { position: relative; top: 3px; right: 2px; font-size: 16px; } .mt-widget-1 .mt-body .mt-stats .btn-group .btn:first-child { border-bottom-left-radius: 4px !important; } .mt-widget-1 .mt-body .mt-stats .btn-group .btn:last-child { border-bottom-right-radius: 4px !important; } .mt-widget-2 { border: 1px solid #e7ecf1; position: relative; } .mt-widget-2 .mt-head { position: absolute; width: 100%; background-size: 100% 100%; } .mt-widget-2 .mt-head .mt-head-label { position: absolute; top: 8px; right: 8px; cursor: pointer; } .mt-widget-2 .mt-head .mt-head-label > button { font-size: 13px; border-radius: 2px !important; } .mt-widget-2 .mt-head .mt-head-user .mt-head-user-img { position: relative; float: left; margin: 165px 32px 18px 35px; } .mt-widget-2 .mt-head .mt-head-user .mt-head-user-img::after { content: ""; position: absolute; top: 90%; left: 50%; margin-left: -15px; border-width: 13px; border-style: solid; border-color: transparent transparent white transparent; } .mt-widget-2 .mt-head .mt-head-user .mt-head-user-img > img { width: 65px; border-radius: 50% !important; } .mt-widget-2 .mt-head .mt-head-user .mt-head-user-info { margin: 175px 0 0 -9px; color: white; display: inline-block; } .mt-widget-2 .mt-head .mt-head-user .mt-head-user-info .mt-user-name { display: block; font-size: 15px; } .mt-widget-2 .mt-head .mt-head-user .mt-head-user-info .mt-user-time { font-size: 13px; display: block; } .mt-widget-2 .mt-head .mt-head-user .mt-head-user-info .mt-user-time > i { position: relative; top: 1px; font-size: 13px; } .mt-widget-2 .mt-body { padding-top: 160px; text-align: center; } .mt-widget-2 .mt-body .mt-body-title { margin-top: 130px; font-weight: 600; font-size: 16px; } .mt-widget-2 .mt-body .mt-body-description { margin-top: 10px; display: inline-block; color: #666666; font-size: 13px; padding: 0 10px; } .mt-widget-2 .mt-body .mt-body-stats { padding: 0; } .mt-widget-2 .mt-body .mt-body-stats:before, .mt-widget-2 .mt-body .mt-body-stats:after { content: " "; display: table; } .mt-widget-2 .mt-body .mt-body-stats:after { clear: both; } .mt-widget-2 .mt-body .mt-body-stats > li { margin: 15px; list-style: none; display: inline-block; } .mt-widget-2 .mt-body .mt-body-actions { border-top: 1px solid #e7ecf1; } .mt-widget-2 .mt-body .mt-body-actions > i { font-size: 18px; } .mt-widget-2 .mt-body .mt-body-actions .btn { font-size: 14px; border-right: 1px solid #e7ecf1; padding: 12px 0 12px 0; text-align: center; } .mt-widget-2 .mt-body .mt-body-actions .btn:last-child { border: 0; } .mt-widget-3 { border: 1px solid #e7ecf1; } .mt-widget-3 .mt-head { background-color: #5DC9E6; margin-bottom: 20px; color: white; padding: 15px 0; } .mt-widget-3 .mt-head .mt-head-icon { font-size: 35px; text-align: center; padding-top: 20px; margin-bottom: 10px; } .mt-widget-3 .mt-head .mt-head-desc { margin-left: 10px; margin-right: 10px; text-align: center; color: #fff; opacity: 0.8 ; filter: alpha(opacity=80) ; } .mt-widget-3 .mt-head .mt-head-date { text-align: center; margin-top: 20px; display: block; color: #f2f2f2; } .mt-widget-3 .mt-head .mt-head-button { margin: 10px 0; text-align: center; padding: 20px; } .mt-widget-3 .mt-head .mt-head-button > button { width: 90px; } .mt-widget-3 .mt-body-actions-icons .btn-group { margin-bottom: 20px; } .mt-widget-3 .mt-body-actions-icons .btn-group .mt-icon { display: block; position: relative; padding: 5px; font-size: 15px; } .mt-widget-3 .mt-body-actions-icons .btn { border-right: 1px solid #e7ecf1; font-size: 11px; text-align: center; padding: 0; } .mt-widget-3 .mt-body-actions-icons .btn:last-child { border-right: 0; } .mt-widget-4 { min-height: 250px; color: white; background-color: #26C0B8; } .mt-widget-4 .mt-img-container { position: relative; } .mt-widget-4 .mt-img-container > img { height: 250px; width: 100%; } .mt-widget-4 .mt-container { width: 150px; background-color: #26C0B8; min-height: 250px; position: absolute; right: 15px; top: 0; } .mt-widget-4 .mt-container .mt-head-title { text-align: center; margin-top: 20px; padding: 10px; } .mt-widget-4 .mt-container .mt-body-icons { margin-top: 30px; text-align: center; } .mt-widget-4 .mt-container .mt-body-icons > a { color: #e6e6e6; display: inline-block; padding: 10px; font-size: 17px; } .mt-widget-4 .mt-container .mt-body-icons > a:hover { color: #fff; } .mt-widget-4 .mt-container .mt-footer-button { margin-top: 30px; position: absolute; right: 0; } .mt-widget-4 .mt-container .mt-footer-button > .btn { width: 90px; border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; border: none !important; } .mt-code { padding: 3px; color: #E43A45; border-radius: 4px !important; display: inline; word-wrap: normal; } .caption-desc { font-size: 13px; margin-top: 0.5em; line-height: 2.3em; } .mt-element-step .row { margin: 0; } .mt-element-step .step-default .mt-step-col { padding-top: 30px; padding-bottom: 30px; text-align: center; } .mt-element-step .step-default .mt-step-number { font-size: 26px; border-radius: 50% !important; display: inline-block; margin: auto; padding: 3px 14px; margin-bottom: 20px; } .mt-element-step .step-default .mt-step-title { font-size: 30px; font-weight: 100; } .mt-element-step .step-default .active { background-color: #32c5d2 !important; } .mt-element-step .step-default .active .mt-step-number { color: #32c5d2 !important; } .mt-element-step .step-default .active .mt-step-title, .mt-element-step .step-default .active .mt-step-content { color: #fff !important; } .mt-element-step .step-default .done { background-color: #26C281 !important; } .mt-element-step .step-default .done .mt-step-number { color: #26C281 !important; } .mt-element-step .step-default .done .mt-step-title, .mt-element-step .step-default .done .mt-step-content { color: #fff !important; } .mt-element-step .step-default .error { background-color: #E7505A !important; } .mt-element-step .step-default .error .mt-step-number { color: #E7505A !important; } .mt-element-step .step-default .error .mt-step-title, .mt-element-step .step-default .error .mt-step-content { color: #fff !important; } .mt-element-step .step-thin .mt-step-col { padding-top: 10px; padding-bottom: 10px; } .mt-element-step .step-thin .mt-step-number { font-size: 26px; border-radius: 50% !important; float: left; margin: auto; padding: 3px 14px; } .mt-element-step .step-thin .mt-step-title { font-size: 24px; font-weight: 100; padding-left: 60px; margin-top: -4px; } .mt-element-step .step-thin .mt-step-content { padding-left: 60px; margin-top: -5px; } .mt-element-step .step-thin .active { background-color: #32c5d2 !important; } .mt-element-step .step-thin .active .mt-step-number { color: #32c5d2 !important; } .mt-element-step .step-thin .active .mt-step-title, .mt-element-step .step-thin .active .mt-step-content { color: #fff !important; } .mt-element-step .step-thin .done { background-color: #26C281 !important; } .mt-element-step .step-thin .done .mt-step-number { color: #26C281 !important; } .mt-element-step .step-thin .done .mt-step-title, .mt-element-step .step-thin .done .mt-step-content { color: #fff !important; } .mt-element-step .step-thin .error { background-color: #E7505A !important; } .mt-element-step .step-thin .error .mt-step-number { color: #E7505A !important; } .mt-element-step .step-thin .error .mt-step-title, .mt-element-step .step-thin .error .mt-step-content { color: #fff !important; } .mt-element-step .step-background .mt-step-col { padding-top: 30px; padding-bottom: 30px; text-align: center; height: 160px; } .mt-element-step .step-background .mt-step-number { font-size: 200px; position: absolute; bottom: 0; right: 0; line-height: 0.79em; color: #dae1e4; z-index: 4; } .mt-element-step .step-background .mt-step-title { font-size: 30px; font-weight: 100; text-align: right; padding-right: 25%; z-index: 5; position: relative; } .mt-element-step .step-background .mt-step-content { text-align: right; padding-right: 25%; z-index: 5; position: relative; } .mt-element-step .step-background .active { background-color: #32c5d2 !important; } .mt-element-step .step-background .active .mt-step-number { color: #2ab4c0 !important; } .mt-element-step .step-background .active .mt-step-title, .mt-element-step .step-background .active .mt-step-content { color: #fff !important; } .mt-element-step .step-background .done { background-color: #26C281 !important; } .mt-element-step .step-background .done .mt-step-number { color: #22ad73 !important; } .mt-element-step .step-background .done .mt-step-title, .mt-element-step .step-background .done .mt-step-content { color: #fff !important; } .mt-element-step .step-background .error { background-color: #E7505A !important; } .mt-element-step .step-background .error .mt-step-number { color: #e43a45 !important; } .mt-element-step .step-background .error .mt-step-title, .mt-element-step .step-background .error .mt-step-content { color: #fff !important; } .mt-element-step .step-background-thin .mt-step-col { padding-top: 15px; padding-bottom: 15px; text-align: center; } .mt-element-step .step-background-thin .mt-step-number { font-size: 120px; position: absolute; bottom: 0; right: 0; line-height: 0.79em; color: #dae1e4; z-index: 4; } .mt-element-step .step-background-thin .mt-step-title { font-size: 30px; font-weight: 100; text-align: right; padding-right: 25%; z-index: 5; position: relative; } .mt-element-step .step-background-thin .mt-step-content { text-align: right; position: relative; padding-right: 25%; z-index: 5; } .mt-element-step .step-background-thin .active { background-color: #32c5d2 !important; } .mt-element-step .step-background-thin .active .mt-step-number { color: #2ab4c0 !important; } .mt-element-step .step-background-thin .active .mt-step-title, .mt-element-step .step-background-thin .active .mt-step-content { color: #fff !important; } .mt-element-step .step-background-thin .done { background-color: #26C281 !important; } .mt-element-step .step-background-thin .done .mt-step-number { color: #22ad73 !important; } .mt-element-step .step-background-thin .done .mt-step-title, .mt-element-step .step-background-thin .done .mt-step-content { color: #fff !important; } .mt-element-step .step-background-thin .error { background-color: #E7505A !important; } .mt-element-step .step-background-thin .error .mt-step-number { color: #e43a45 !important; } .mt-element-step .step-background-thin .error .mt-step-title, .mt-element-step .step-background-thin .error .mt-step-content { color: #fff !important; } .mt-element-step .step-no-background .mt-step-col { padding-top: 30px; padding-bottom: 30px; text-align: center; } .mt-element-step .step-no-background .mt-step-number { font-size: 26px; border-radius: 50% !important; display: inline-block; margin: auto; padding: 3px 14px; margin-bottom: 20px; border: 1px solid; border-color: #e5e5e5; } .mt-element-step .step-no-background .mt-step-title { font-size: 30px; font-weight: 100; } .mt-element-step .step-no-background .active .mt-step-number { color: #32c5d2 !important; border-color: #32c5d2 !important; font-weight: 700; } .mt-element-step .step-no-background .active .mt-step-title, .mt-element-step .step-no-background .active .mt-step-content { color: #32c5d2 !important; font-weight: 700; } .mt-element-step .step-no-background .done .mt-step-number { color: #26C281 !important; border-color: #26C281 !important; font-weight: 700; } .mt-element-step .step-no-background .done .mt-step-title, .mt-element-step .step-no-background .done .mt-step-content { color: #26C281 !important; font-weight: 700; } .mt-element-step .step-no-background .error .mt-step-number { color: #E7505A !important; border-color: #E7505A !important; font-weight: 700; } .mt-element-step .step-no-background .error .mt-step-title, .mt-element-step .step-no-background .error .mt-step-content { color: #E7505A !important; font-weight: 700; } .mt-element-step .step-no-background-thin .mt-step-col { padding-top: 10px; padding-bottom: 10px; } .mt-element-step .step-no-background-thin .mt-step-number { font-size: 26px; border-radius: 50% !important; float: left; margin: auto; padding: 3px 14px; border: 1px solid; border-color: #e5e5e5; } .mt-element-step .step-no-background-thin .mt-step-title { font-size: 24px; font-weight: 100; padding-left: 60px; margin-top: -4px; } .mt-element-step .step-no-background-thin .mt-step-content { padding-left: 60px; margin-top: -5px; } .mt-element-step .step-no-background-thin .active .mt-step-number { color: #32c5d2 !important; border-color: #32c5d2 !important; font-weight: 700; } .mt-element-step .step-no-background-thin .active .mt-step-title, .mt-element-step .step-no-background-thin .active .mt-step-content { color: #32c5d2 !important; font-weight: 700; } .mt-element-step .step-no-background-thin .done .mt-step-number { color: #26C281 !important; border-color: #26C281 !important; font-weight: 700; } .mt-element-step .step-no-background-thin .done .mt-step-title, .mt-element-step .step-no-background-thin .done .mt-step-content { color: #26C281 !important; font-weight: 700; } .mt-element-step .step-no-background-thin .error .mt-step-number { color: #E7505A !important; border-color: #E7505A !important; font-weight: 700; } .mt-element-step .step-no-background-thin .error .mt-step-title, .mt-element-step .step-no-background-thin .error .mt-step-content { color: #E7505A !important; font-weight: 700; } .mt-element-step .step-line .mt-step-col { padding: 30px 0; text-align: center; } .mt-element-step .step-line .mt-step-number { font-size: 26px; border-radius: 50% !important; display: inline-block; margin: auto; padding: 9px; margin-bottom: 5px; border: 3px solid; border-color: #e5e5e5; position: relative; z-index: 5; height: 60px; width: 60px; text-align: center; } .mt-element-step .step-line .mt-step-number > i { position: relative; top: 50%; transform: translateY(-120%); } .mt-element-step .step-line .mt-step-title { font-size: 20px; font-weight: 400; position: relative; } .mt-element-step .step-line .mt-step-title:after { content: ''; height: 3px; width: 50%; position: absolute; background-color: #e5e5e5; top: -32px; left: 50%; z-index: 4; transform: translateY(-100%); } .mt-element-step .step-line .mt-step-title:before { content: ''; height: 3px; width: 50%; position: absolute; background-color: #e5e5e5; top: -32px; right: 50%; z-index: 4; transform: translateY(-100%); } .mt-element-step .step-line .first .mt-step-title:before { content: none; } .mt-element-step .step-line .last .mt-step-title:after { content: none; } .mt-element-step .step-line .active .mt-step-number { color: #32c5d2 !important; border-color: #32c5d2 !important; } .mt-element-step .step-line .active .mt-step-title, .mt-element-step .step-line .active .mt-step-content { color: #32c5d2 !important; } .mt-element-step .step-line .active .mt-step-title:after, .mt-element-step .step-line .active .mt-step-title:before { background-color: #32c5d2; } .mt-element-step .step-line .done .mt-step-number { color: #26C281 !important; border-color: #26C281 !important; } .mt-element-step .step-line .done .mt-step-title, .mt-element-step .step-line .done .mt-step-content { color: #26C281 !important; } .mt-element-step .step-line .done .mt-step-title:after, .mt-element-step .step-line .done .mt-step-title:before { background-color: #26C281; } .mt-element-step .step-line .error .mt-step-number { color: #E7505A !important; border-color: #E7505A !important; } .mt-element-step .step-line .error .mt-step-title, .mt-element-step .step-line .error .mt-step-content { color: #E7505A !important; } .mt-element-step .step-line .error .mt-step-title:after, .mt-element-step .step-line .error .mt-step-title:before { background-color: #E7505A; } @media (max-width: 991px) { /* 991px */ .mt-element-step .step-line .mt-step-title:after { content: none; } .mt-element-step .step-line .mt-step-title:before { content: none; } } .mt-element-list .list-default.mt-list-head { background-position: center; background-size: cover; background-repeat: no-repeat; padding: 15px; } .mt-element-list .list-default.mt-list-head .list-title { margin: 0 0 0.7em 0; font-size: 18px; } .mt-element-list .list-default.mt-list-head .list-date { font-size: 12px; } .mt-element-list .list-default.mt-list-head .list-pending { margin-bottom: 10px; } .mt-element-list .list-default.mt-list-head .list-count { display: inline-block; padding: 3px 7px; } .mt-element-list .list-default.mt-list-head .list-count.last { margin-bottom: 0; } .mt-element-list .list-default.mt-list-head .list-label { display: inline-block; font-size: 12px; } .mt-element-list .list-default.mt-list-container { border-left: 1px solid; border-right: 1px solid; border-bottom: 1px solid; border-color: #e7ecf1; padding: 15px; } .mt-element-list .list-default.mt-list-container .mt-list-title { padding-bottom: 15px; font-size: 14px; font-weight: 700; } .mt-element-list .list-default.mt-list-container ul { margin-bottom: 0; padding: 0; } .mt-element-list .list-default.mt-list-container ul > .mt-list-item { list-style: none; border-bottom: 1px solid; border-color: #e7ecf1; padding: 25px 0; min-height: 45px; } .mt-element-list .list-default.mt-list-container ul > .mt-list-item:first-child { padding-top: 0; } .mt-element-list .list-default.mt-list-container ul > .mt-list-item:last-child { padding-bottom: 0; border: none; } .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-icon-container { border: 1px solid; border-color: #e7ecf1; border-radius: 50% !important; padding: 0.9em; float: left; width: 45px; height: 45px; } .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-icon-container > a { color: #34495e; } .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-icon-container > a:hover { color: #26C281; text-decoration: none; } .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-icon-container.done { border-color: #26C281; } .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-icon-container.done > a { color: #26C281; } .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-icon-container.done > a:hover { color: #26C281; text-decoration: none; } .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-item-content { padding: 0 75px 0 60px; } .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-item-content > h3 { margin-top: 0; margin-bottom: 5px; font-size: 16px; } .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a { color: #34495e; } .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a:hover { color: #26C281; text-decoration: none; } .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-item-content > p { margin: 0; } .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-datetime { text-align: right; float: right; width: 60px; } .mt-element-list .list-default.ext-1.mt-list-container { padding: 15px 0 0 0; } .mt-element-list .list-default.ext-1.mt-list-container .mt-list-title { padding: 0 15px 15px 15px; } .mt-element-list .list-default.ext-1.mt-list-container ul > .mt-list-item { padding: 15px; border-left: 3px solid; border-color: #2F353B; border-bottom-color: #e7ecf1; } .mt-element-list .list-default.ext-1.mt-list-container ul > .mt-list-item:hover { background-color: #e5e5e5; } .mt-element-list .list-default.ext-1.mt-list-container ul > .mt-list-item.done { border-color: #26C281; border-bottom-color: #e7ecf1; } .mt-element-list .list-default.ext-1.mt-list-container ul > .mt-list-item.done:hover { background-color: #96ebc8; } .mt-element-list .list-default.ext-1.mt-list-container ul > .mt-list-item > .list-icon-container { border: none; } .mt-element-list .list-default.group .list-toggle-container:hover, .mt-element-list .list-default.group .list-toggle-container:focus, .mt-element-list .list-default.group .list-toggle-container:active { text-decoration: none; } .mt-element-list .list-default.group .list-toggle-container .list-toggle { padding: 15px; background-color: #2F353B; font-weight: 700; color: #fff; text-decoration: none; } .mt-element-list .list-default.group .list-toggle-container .list-toggle.done { background-color: #26C281; } .mt-element-list .list-simple.mt-list-head { padding: 15px; } .mt-element-list .list-simple.mt-list-head .list-title { margin: 0; padding-right: 85px; } .mt-element-list .list-simple.mt-list-head .list-date { font-size: 12px; opacity: 0.8; float: right; width: 75px; } .mt-element-list .list-simple.mt-list-container { border-left: 1px solid; border-right: 1px solid; border-bottom: 1px solid; border-color: #e7ecf1; padding: 15px; } .mt-element-list .list-simple.mt-list-container ul { margin-bottom: 0; padding: 0; } .mt-element-list .list-simple.mt-list-container ul > .mt-list-item { list-style: none; border-bottom: 1px solid; border-color: #e7ecf1; padding: 15px 0; } .mt-element-list .list-simple.mt-list-container ul > .mt-list-item:first-child { padding-top: 0; } .mt-element-list .list-simple.mt-list-container ul > .mt-list-item:last-child { padding-bottom: 0; border: none; } .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-icon-container { font-size: 14px; float: left; } .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-icon-container > a { color: #34495e; } .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-icon-container > a:hover { color: #26C281; text-decoration: none; } .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-icon-container.done { color: #26C281; } .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-icon-container.done > a { color: #26C281; } .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-icon-container.done > a:hover { color: #26C281; text-decoration: none; } .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-item-content { padding: 0 75px 0 60px; } .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-item-content > h3 { margin: 0; font-size: 18px; } .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a { color: #34495e; } .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a:hover { color: #26C281; text-decoration: none; } .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-datetime { text-align: right; float: right; width: 60px; } .mt-element-list .list-simple.mt-list-head { padding: 15px; } .mt-element-list .list-simple.mt-list-head .list-title { margin: 0; padding-right: 85px; } .mt-element-list .list-simple.mt-list-head .list-date { font-size: 12px; opacity: 0.8; float: right; width: 75px; } .mt-element-list .list-simple.ext-1.mt-list-container { padding: 0; } .mt-element-list .list-simple.ext-1.mt-list-container ul > .mt-list-item { padding: 15px; border-left: 3px solid; border-color: #34495e; border-bottom-color: #e7ecf1; } .mt-element-list .list-simple.ext-1.mt-list-container ul > .mt-list-item:hover { background-color: #e5e5e5; } .mt-element-list .list-simple.ext-1.mt-list-container ul > .mt-list-item.done { border-color: #26C281; border-bottom-color: #e7ecf1; } .mt-element-list .list-simple.ext-1.mt-list-container ul > .mt-list-item.done:hover { background-color: #96ebc8; } .mt-element-list .list-simple.group .list-toggle-container:hover, .mt-element-list .list-simple.group .list-toggle-container:focus, .mt-element-list .list-simple.group .list-toggle-container:active { text-decoration: none; } .mt-element-list .list-simple.group .list-toggle-container .list-toggle { padding: 15px; background-color: #34495e; font-weight: 700; color: #fff; text-decoration: none; } .mt-element-list .list-simple.group .list-toggle-container .list-toggle.done { background-color: #26C281; } .mt-element-list .list-news.mt-list-head { padding: 15px; text-align: center; } .mt-element-list .list-news.mt-list-head .list-title { margin: 0; } .mt-element-list .list-news.mt-list-head .badge { margin-top: 5px; } .mt-element-list .list-news.mt-list-container { border-left: 1px solid; border-right: 1px solid; border-bottom: 1px solid; border-color: #e7ecf1; padding: 15px 0; } .mt-element-list .list-news.mt-list-container ul { margin-bottom: 0; padding: 0; } .mt-element-list .list-news.mt-list-container ul > .mt-list-item { list-style: none; border-bottom: 1px solid; border-color: #e7ecf1; padding: 15px; position: relative; } .mt-element-list .list-news.mt-list-container ul > .mt-list-item:first-child { padding-top: 0; } .mt-element-list .list-news.mt-list-container ul > .mt-list-item:last-child { padding-bottom: 0; border: none; } .mt-element-list .list-news.mt-list-container ul > .mt-list-item > .list-icon-container { font-size: 20px; position: absolute; right: 5px; top: 50%; margin-top: -10px; } .mt-element-list .list-news.mt-list-container ul > .mt-list-item > .list-icon-container a { color: #2f353b; } .mt-element-list .list-news.mt-list-container ul > .mt-list-item > .list-icon-container a:hover { color: #32c5d2; } .mt-element-list .list-news.mt-list-container ul > .mt-list-item > .list-item-content { padding: 0 25px 0 0; } .mt-element-list .list-news.mt-list-container ul > .mt-list-item > .list-item-content > h3 { margin: 0; font-size: 18px; margin-bottom: 10px; } .mt-element-list .list-news.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a { color: #34495e; } .mt-element-list .list-news.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a:hover { color: #32c5d2; text-decoration: none; } .mt-element-list .list-news.mt-list-container ul > .mt-list-item > .list-datetime { margin-bottom: 10px; } .mt-element-list .list-news.ext-1.mt-list-head { position: relative; text-align: left; } .mt-element-list .list-news.ext-1.mt-list-head .list-count { position: absolute; right: 0; top: 0; height: 100%; padding: 19px; } .mt-element-list .list-news.ext-1 .list-thumb { width: 80px; height: 80px; overflow: hidden; float: left; } .mt-element-list .list-news.ext-1 .list-thumb img { width: 100%; } .mt-element-list .list-news.ext-1.mt-list-container { padding: 0; } .mt-element-list .list-news.ext-1.mt-list-container ul > .mt-list-item { padding: 15px; } .mt-element-list .list-news.ext-1.mt-list-container ul > .mt-list-item > .list-datetime { padding-left: 90px; } .mt-element-list .list-news.ext-1.mt-list-container ul > .mt-list-item > .list-item-content { padding-left: 90px; } .mt-element-list .list-news.ext-1.mt-list-container ul > .mt-list-item:hover { background-color: #e5e5e5; } .mt-element-list .list-news.ext-1.mt-list-container ul > .mt-list-item:last-child { padding-bottom: 15px; } .mt-element-list .list-news.ext-2.mt-list-head { position: relative; text-align: left; } .mt-element-list .list-news.ext-2.mt-list-head .list-count { position: absolute; right: 0; top: 0; height: 100%; padding: 19px; } .mt-element-list .list-news.ext-2 .list-thumb { width: 80px; height: 80px; overflow: hidden; float: left; } .mt-element-list .list-news.ext-2 .list-thumb img { width: 100%; } .mt-element-list .list-news.ext-2.mt-list-container { padding: 0; } .mt-element-list .list-news.ext-2.mt-list-container ul > .mt-list-item { padding: 15px; } .mt-element-list .list-news.ext-2.mt-list-container ul > .mt-list-item > .list-datetime { padding-left: 90px; } .mt-element-list .list-news.ext-2.mt-list-container ul > .mt-list-item > .list-item-content { padding-left: 90px; } .mt-element-list .list-news.ext-2.mt-list-container ul > .mt-list-item > .list-item-content > h3 { font-size: 16px; } .mt-element-list .list-news.ext-2.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a:hover { color: #F2784B; } .mt-element-list .list-news.ext-2.mt-list-container ul > .mt-list-item:hover { background-color: #e5e5e5; } .mt-element-list .list-news.ext-2.mt-list-container ul > .mt-list-item:last-child { padding-bottom: 15px; } .mt-element-list .list-todo.mt-list-head { padding: 15px; position: relative; } .mt-element-list .list-todo.mt-list-head .list-title { margin: 0; } .mt-element-list .list-todo.mt-list-head .list-head-count { margin-top: 5px; } .mt-element-list .list-todo.mt-list-head .list-head-count > .list-head-count-item { display: inline-block; margin-right: 15px; } .mt-element-list .list-todo.mt-list-head .list-count { position: absolute; top: 0; right: 0; padding: 29px; font-size: 16px; } .mt-element-list .list-todo.mt-list-head a { color: #fff; } .mt-element-list .list-todo.mt-list-head a:hover { text-decoration: none; } .mt-element-list .list-todo.mt-list-container { border-left: 1px solid; border-right: 1px solid; border-bottom: 1px solid; border-color: #e7ecf1; position: relative; } .mt-element-list .list-todo.mt-list-container .list-todo-line { position: absolute; z-index: 1; height: 100%; width: 1px; top: 0; left: 25px; border-left: 1px solid; border-color: #e7ecf1; } .mt-element-list .list-todo.mt-list-container ul { margin-bottom: 0; padding: 0; position: relative; z-index: 5; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item { list-style: none; border-bottom: 1px solid; border-bottom-style: dashed; border-color: #e7ecf1; padding: 15px; position: relative; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item:last-child { border: none; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-icon { display: inline-block; margin-top: 0.7em; padding: 0.7em 0; vertical-align: top; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item { margin-left: 15px; display: inline-block; vertical-align: top; width: 90%; position: relative; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item:after { right: 100%; top: 50%; border: solid transparent; content: " "; height: 0; width: 0; position: absolute; pointer-events: none; border-color: rgba(47, 53, 59, 0); border-right-color: #2f353b; border-width: 8px; top: 18px; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item > .list-toggle-container:hover, .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item > .list-toggle-container:focus, .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item > .list-toggle-container:active { text-decoration: none; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item > .list-toggle-container .list-toggle { padding: 15px; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item > .list-toggle-container .list-toggle > .list-toggle-title { display: inline-block; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list { border: 1px solid; border-color: #e7ecf1; padding: 0; margin: 0; position: relative; border-top: none; border-bottom: none; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item { list-style: none; padding: 15px; border-bottom: 1px solid; border-color: #e7ecf1; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item a { color: #2f353b; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item a:hover { text-decoration: none; color: #e43a45; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item:last-child { border-bottom: none; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item > .task-icon { float: left; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item > .task-content { padding: 0 45px 0 35px; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item > .task-content > h4 { margin-top: 0; font-size: 14px; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item > .task-content > p { font-size: 13px; margin: 0; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item > .task-status { float: right; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item > .task-status a { color: #e5e5e5; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item > .task-status .done:hover { color: #26C281; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item > .task-status .pending:hover { color: #e43a45; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item.done > .task-status .done { color: #26C281; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-footer { padding: 15px; text-align: center; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-footer a { color: #2f353b; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-footer a:hover { text-decoration: none; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-footer a.task-trash:hover { color: #e43a45; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-footer a.task-add:hover { color: #26C281; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-icon-container { font-size: 20px; position: absolute; right: 5px; top: 50%; margin-top: -10px; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-icon-container a { color: #2f353b; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-icon-container a:hover { color: #32c5d2; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-item-content { padding: 0 25px 0 0; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-item-content > h3 { margin: 0; font-size: 18px; margin-bottom: 10px; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a { color: #34495e; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a:hover { color: #32c5d2; text-decoration: none; } .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-datetime { margin-bottom: 10px; } .mt-element-list .list-default.mt-list-head.white { background-color: #ffffff; color: #666; } .mt-element-list .list-default.mt-list-head.white .badge { background-color: white; color: #666; } .mt-element-list .list-default.mt-list-head.white.ext-1 .badge { background-color: #e6e6e6; } .mt-element-list .list-default.mt-list-head.white .list-label { color: white; } .mt-element-list .list-default.mt-list-head.white .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.white { background-color: #ffffff; color: #666; } .mt-element-list .list-todo .list-count.white { background-color: #ffffff; color: #666; } .mt-element-list .list-todo .list-count.white:hover { background-color: #f2f2f2; } .mt-element-list .list-todo .list-todo-line.white { border-color: #ffffff; } .mt-element-list .list-todo .list-todo-item.white:after { border-right-color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.white .list-toggle { background: #ffffff; color: #666 !important; } .mt-element-list .list-todo .list-todo-item.white .list-toggle > .badge { color: #ffffff; background: #666; } .mt-element-list .list-default.mt-list-head.default { background-color: #e1e5ec; color: #666; } .mt-element-list .list-default.mt-list-head.default .badge { background-color: white; color: #666; } .mt-element-list .list-default.mt-list-head.default.ext-1 .badge { background-color: #c2cad8; } .mt-element-list .list-default.mt-list-head.default .list-label { color: white; } .mt-element-list .list-default.mt-list-head.default .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.default { background-color: #e1e5ec; color: #666; } .mt-element-list .list-todo .list-count.default { background-color: #e1e5ec; color: #666; } .mt-element-list .list-todo .list-count.default:hover { background-color: #d1d7e2; } .mt-element-list .list-todo .list-todo-line.default { border-color: #e1e5ec; } .mt-element-list .list-todo .list-todo-item.default:after { border-right-color: #e1e5ec !important; } .mt-element-list .list-todo .list-todo-item.default .list-toggle { background: #e1e5ec; color: #666 !important; } .mt-element-list .list-todo .list-todo-item.default .list-toggle > .badge { color: #e1e5ec; background: #666; } .mt-element-list .list-default.mt-list-head.dark { background-color: #2f353b; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.dark .badge { background-color: #464f57; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.dark.ext-1 .badge { background-color: #181c1f; } .mt-element-list .list-default.mt-list-head.dark .list-label { color: #acb5bd; } .mt-element-list .list-default.mt-list-head.dark .list-date { color: #acb5bd; } .mt-element-list .list-todo.mt-list-head.dark { background-color: #2f353b; color: #FFFFFF; } .mt-element-list .list-todo .list-count.dark { background-color: #2f353b; color: #FFFFFF; } .mt-element-list .list-todo .list-count.dark:hover { background-color: #24282d; } .mt-element-list .list-todo .list-todo-line.dark { border-color: #2f353b; } .mt-element-list .list-todo .list-todo-item.dark:after { border-right-color: #2f353b !important; } .mt-element-list .list-todo .list-todo-item.dark .list-toggle { background: #2f353b; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.dark .list-toggle > .badge { color: #2f353b; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue { background-color: #3598dc; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue .badge { background-color: #60aee4; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue.ext-1 .badge { background-color: #217ebd; } .mt-element-list .list-default.mt-list-head.blue .list-label { color: white; } .mt-element-list .list-default.mt-list-head.blue .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.blue { background-color: #3598dc; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue { background-color: #3598dc; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue:hover { background-color: #258cd3; } .mt-element-list .list-todo .list-todo-line.blue { border-color: #3598dc; } .mt-element-list .list-todo .list-todo-item.blue:after { border-right-color: #3598dc !important; } .mt-element-list .list-todo .list-todo-item.blue .list-toggle { background: #3598dc; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.blue .list-toggle > .badge { color: #3598dc; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-madison { background-color: #578ebe; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-madison .badge { background-color: #7ca7cc; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-madison.ext-1 .badge { background-color: #3f74a3; } .mt-element-list .list-default.mt-list-head.blue-madison .list-label { color: white; } .mt-element-list .list-default.mt-list-head.blue-madison .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.blue-madison { background-color: #578ebe; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue-madison { background-color: #578ebe; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue-madison:hover { background-color: #4682b5; } .mt-element-list .list-todo .list-todo-line.blue-madison { border-color: #578ebe; } .mt-element-list .list-todo .list-todo-item.blue-madison:after { border-right-color: #578ebe !important; } .mt-element-list .list-todo .list-todo-item.blue-madison .list-toggle { background: #578ebe; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.blue-madison .list-toggle > .badge { color: #578ebe; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-chambray { background-color: #2C3E50; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-chambray .badge { background-color: #3e5871; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-chambray.ext-1 .badge { background-color: #1a252f; } .mt-element-list .list-default.mt-list-head.blue-chambray .list-label { color: #aabed1; } .mt-element-list .list-default.mt-list-head.blue-chambray .list-date { color: #aabed1; } .mt-element-list .list-todo.mt-list-head.blue-chambray { background-color: #2C3E50; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue-chambray { background-color: #2C3E50; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue-chambray:hover { background-color: #233140; } .mt-element-list .list-todo .list-todo-line.blue-chambray { border-color: #2C3E50; } .mt-element-list .list-todo .list-todo-item.blue-chambray:after { border-right-color: #2C3E50 !important; } .mt-element-list .list-todo .list-todo-item.blue-chambray .list-toggle { background: #2C3E50; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.blue-chambray .list-toggle > .badge { color: #2C3E50; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-ebonyclay { background-color: #22313F; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-ebonyclay .badge { background-color: #344b60; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-ebonyclay.ext-1 .badge { background-color: #10171e; } .mt-element-list .list-default.mt-list-head.blue-ebonyclay .list-label { color: #98b1c8; } .mt-element-list .list-default.mt-list-head.blue-ebonyclay .list-date { color: #98b1c8; } .mt-element-list .list-todo.mt-list-head.blue-ebonyclay { background-color: #22313F; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue-ebonyclay { background-color: #22313F; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue-ebonyclay:hover { background-color: #19242e; } .mt-element-list .list-todo .list-todo-line.blue-ebonyclay { border-color: #22313F; } .mt-element-list .list-todo .list-todo-item.blue-ebonyclay:after { border-right-color: #22313F !important; } .mt-element-list .list-todo .list-todo-item.blue-ebonyclay .list-toggle { background: #22313F; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.blue-ebonyclay .list-toggle > .badge { color: #22313F; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-hoki { background-color: #67809F; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-hoki .badge { background-color: #869ab3; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-hoki.ext-1 .badge { background-color: #526781; } .mt-element-list .list-default.mt-list-head.blue-hoki .list-label { color: white; } .mt-element-list .list-default.mt-list-head.blue-hoki .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.blue-hoki { background-color: #67809F; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue-hoki { background-color: #67809F; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue-hoki:hover { background-color: #5c7391; } .mt-element-list .list-todo .list-todo-line.blue-hoki { border-color: #67809F; } .mt-element-list .list-todo .list-todo-item.blue-hoki:after { border-right-color: #67809F !important; } .mt-element-list .list-todo .list-todo-item.blue-hoki .list-toggle { background: #67809F; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.blue-hoki .list-toggle > .badge { color: #67809F; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-steel { background-color: #4B77BE; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-steel .badge { background-color: #7093cc; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-steel.ext-1 .badge { background-color: #395f9d; } .mt-element-list .list-default.mt-list-head.blue-steel .list-label { color: white; } .mt-element-list .list-default.mt-list-head.blue-steel .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.blue-steel { background-color: #4B77BE; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue-steel { background-color: #4B77BE; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue-steel:hover { background-color: #406bb0; } .mt-element-list .list-todo .list-todo-line.blue-steel { border-color: #4B77BE; } .mt-element-list .list-todo .list-todo-item.blue-steel:after { border-right-color: #4B77BE !important; } .mt-element-list .list-todo .list-todo-item.blue-steel .list-toggle { background: #4B77BE; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.blue-steel .list-toggle > .badge { color: #4B77BE; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-soft { background-color: #4c87b9; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-soft .badge { background-color: #71a0c7; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-soft.ext-1 .badge { background-color: #3b6d97; } .mt-element-list .list-default.mt-list-head.blue-soft .list-label { color: white; } .mt-element-list .list-default.mt-list-head.blue-soft .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.blue-soft { background-color: #4c87b9; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue-soft { background-color: #4c87b9; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue-soft:hover { background-color: #427aa9; } .mt-element-list .list-todo .list-todo-line.blue-soft { border-color: #4c87b9; } .mt-element-list .list-todo .list-todo-item.blue-soft:after { border-right-color: #4c87b9 !important; } .mt-element-list .list-todo .list-todo-item.blue-soft .list-toggle { background: #4c87b9; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.blue-soft .list-toggle > .badge { color: #4c87b9; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-dark { background-color: #5e738b; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-dark .badge { background-color: #788da4; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-dark.ext-1 .badge { background-color: #495a6d; } .mt-element-list .list-default.mt-list-head.blue-dark .list-label { color: #f2f4f6; } .mt-element-list .list-default.mt-list-head.blue-dark .list-date { color: #f2f4f6; } .mt-element-list .list-todo.mt-list-head.blue-dark { background-color: #5e738b; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue-dark { background-color: #5e738b; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue-dark:hover { background-color: #54667c; } .mt-element-list .list-todo .list-todo-line.blue-dark { border-color: #5e738b; } .mt-element-list .list-todo .list-todo-item.blue-dark:after { border-right-color: #5e738b !important; } .mt-element-list .list-todo .list-todo-item.blue-dark .list-toggle { background: #5e738b; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.blue-dark .list-toggle > .badge { color: #5e738b; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-sharp { background-color: #5C9BD1; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-sharp .badge { background-color: #84b3dc; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.blue-sharp.ext-1 .badge { background-color: #3782c3; } .mt-element-list .list-default.mt-list-head.blue-sharp .list-label { color: white; } .mt-element-list .list-default.mt-list-head.blue-sharp .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.blue-sharp { background-color: #5C9BD1; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue-sharp { background-color: #5C9BD1; color: #FFFFFF; } .mt-element-list .list-todo .list-count.blue-sharp:hover { background-color: #488fcb; } .mt-element-list .list-todo .list-todo-line.blue-sharp { border-color: #5C9BD1; } .mt-element-list .list-todo .list-todo-item.blue-sharp:after { border-right-color: #5C9BD1 !important; } .mt-element-list .list-todo .list-todo-item.blue-sharp .list-toggle { background: #5C9BD1; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.blue-sharp .list-toggle > .badge { color: #5C9BD1; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green { background-color: #32c5d2; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green .badge { background-color: #5cd1db; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green.ext-1 .badge { background-color: #26a1ab; } .mt-element-list .list-default.mt-list-head.green .list-label { color: white; } .mt-element-list .list-default.mt-list-head.green .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.green { background-color: #32c5d2; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green { background-color: #32c5d2; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green:hover { background-color: #2ab4c0; } .mt-element-list .list-todo .list-todo-line.green { border-color: #32c5d2; } .mt-element-list .list-todo .list-todo-item.green:after { border-right-color: #32c5d2 !important; } .mt-element-list .list-todo .list-todo-item.green .list-toggle { background: #32c5d2; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.green .list-toggle > .badge { color: #32c5d2; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-meadow { background-color: #1BBC9B; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-meadow .badge { background-color: #2ae0bb; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-meadow.ext-1 .badge { background-color: #158f76; } .mt-element-list .list-default.mt-list-head.green-meadow .list-label { color: #dcfaf4; } .mt-element-list .list-default.mt-list-head.green-meadow .list-date { color: #dcfaf4; } .mt-element-list .list-todo.mt-list-head.green-meadow { background-color: #1BBC9B; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green-meadow { background-color: #1BBC9B; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green-meadow:hover { background-color: #18a689; } .mt-element-list .list-todo .list-todo-line.green-meadow { border-color: #1BBC9B; } .mt-element-list .list-todo .list-todo-item.green-meadow:after { border-right-color: #1BBC9B !important; } .mt-element-list .list-todo .list-todo-item.green-meadow .list-toggle { background: #1BBC9B; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.green-meadow .list-toggle > .badge { color: #1BBC9B; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-seagreen { background-color: #1BA39C; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-seagreen .badge { background-color: #22cfc6; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-seagreen.ext-1 .badge { background-color: #147772; } .mt-element-list .list-default.mt-list-head.green-seagreen .list-label { color: #c7f6f3; } .mt-element-list .list-default.mt-list-head.green-seagreen .list-date { color: #c7f6f3; } .mt-element-list .list-todo.mt-list-head.green-seagreen { background-color: #1BA39C; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green-seagreen { background-color: #1BA39C; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green-seagreen:hover { background-color: #178d87; } .mt-element-list .list-todo .list-todo-line.green-seagreen { border-color: #1BA39C; } .mt-element-list .list-todo .list-todo-item.green-seagreen:after { border-right-color: #1BA39C !important; } .mt-element-list .list-todo .list-todo-item.green-seagreen .list-toggle { background: #1BA39C; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.green-seagreen .list-toggle > .badge { color: #1BA39C; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-turquoise { background-color: #36D7B7; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-turquoise .badge { background-color: #61dfc6; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-turquoise.ext-1 .badge { background-color: #24b699; } .mt-element-list .list-default.mt-list-head.green-turquoise .list-label { color: white; } .mt-element-list .list-default.mt-list-head.green-turquoise .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.green-turquoise { background-color: #36D7B7; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green-turquoise { background-color: #36D7B7; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green-turquoise:hover { background-color: #28cbab; } .mt-element-list .list-todo .list-todo-line.green-turquoise { border-color: #36D7B7; } .mt-element-list .list-todo .list-todo-item.green-turquoise:after { border-right-color: #36D7B7 !important; } .mt-element-list .list-todo .list-todo-item.green-turquoise .list-toggle { background: #36D7B7; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.green-turquoise .list-toggle > .badge { color: #36D7B7; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-haze { background-color: #44b6ae; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-haze .badge { background-color: #67c6bf; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-haze.ext-1 .badge { background-color: #36918b; } .mt-element-list .list-default.mt-list-head.green-haze .list-label { color: #fbfefd; } .mt-element-list .list-default.mt-list-head.green-haze .list-date { color: #fbfefd; } .mt-element-list .list-todo.mt-list-head.green-haze { background-color: #44b6ae; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green-haze { background-color: #44b6ae; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green-haze:hover { background-color: #3da39c; } .mt-element-list .list-todo .list-todo-line.green-haze { border-color: #44b6ae; } .mt-element-list .list-todo .list-todo-item.green-haze:after { border-right-color: #44b6ae !important; } .mt-element-list .list-todo .list-todo-item.green-haze .list-toggle { background: #44b6ae; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.green-haze .list-toggle > .badge { color: #44b6ae; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-jungle { background-color: #26C281; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-jungle .badge { background-color: #41da9a; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-jungle.ext-1 .badge { background-color: #1e9765; } .mt-element-list .list-default.mt-list-head.green-jungle .list-label { color: #ecfbf5; } .mt-element-list .list-default.mt-list-head.green-jungle .list-date { color: #ecfbf5; } .mt-element-list .list-todo.mt-list-head.green-jungle { background-color: #26C281; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green-jungle { background-color: #26C281; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green-jungle:hover { background-color: #22ad73; } .mt-element-list .list-todo .list-todo-line.green-jungle { border-color: #26C281; } .mt-element-list .list-todo .list-todo-item.green-jungle:after { border-right-color: #26C281 !important; } .mt-element-list .list-todo .list-todo-item.green-jungle .list-toggle { background: #26C281; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.green-jungle .list-toggle > .badge { color: #26C281; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-soft { background-color: #3faba4; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-soft .badge { background-color: #5bc2bc; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-soft.ext-1 .badge { background-color: #318680; } .mt-element-list .list-default.mt-list-head.green-soft .list-label { color: #f0f9f9; } .mt-element-list .list-default.mt-list-head.green-soft .list-date { color: #f0f9f9; } .mt-element-list .list-todo.mt-list-head.green-soft { background-color: #3faba4; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green-soft { background-color: #3faba4; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green-soft:hover { background-color: #389892; } .mt-element-list .list-todo .list-todo-line.green-soft { border-color: #3faba4; } .mt-element-list .list-todo .list-todo-item.green-soft:after { border-right-color: #3faba4 !important; } .mt-element-list .list-todo .list-todo-item.green-soft .list-toggle { background: #3faba4; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.green-soft .list-toggle > .badge { color: #3faba4; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-dark { background-color: #4DB3A2; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-dark .badge { background-color: #71c2b5; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-dark.ext-1 .badge { background-color: #3d9082; } .mt-element-list .list-default.mt-list-head.green-dark .list-label { color: white; } .mt-element-list .list-default.mt-list-head.green-dark .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.green-dark { background-color: #4DB3A2; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green-dark { background-color: #4DB3A2; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green-dark:hover { background-color: #45a292; } .mt-element-list .list-todo .list-todo-line.green-dark { border-color: #4DB3A2; } .mt-element-list .list-todo .list-todo-item.green-dark:after { border-right-color: #4DB3A2 !important; } .mt-element-list .list-todo .list-todo-item.green-dark .list-toggle { background: #4DB3A2; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.green-dark .list-toggle > .badge { color: #4DB3A2; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-sharp { background-color: #2ab4c0; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-sharp .badge { background-color: #46cbd7; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.green-sharp.ext-1 .badge { background-color: #218d96; } .mt-element-list .list-default.mt-list-head.green-sharp .list-label { color: #eefafb; } .mt-element-list .list-default.mt-list-head.green-sharp .list-date { color: #eefafb; } .mt-element-list .list-todo.mt-list-head.green-sharp { background-color: #2ab4c0; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green-sharp { background-color: #2ab4c0; color: #FFFFFF; } .mt-element-list .list-todo .list-count.green-sharp:hover { background-color: #25a0ab; } .mt-element-list .list-todo .list-todo-line.green-sharp { border-color: #2ab4c0; } .mt-element-list .list-todo .list-todo-item.green-sharp:after { border-right-color: #2ab4c0 !important; } .mt-element-list .list-todo .list-todo-item.green-sharp .list-toggle { background: #2ab4c0; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.green-sharp .list-toggle > .badge { color: #2ab4c0; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.grey { background-color: #E5E5E5; color: #333333; } .mt-element-list .list-default.mt-list-head.grey .badge { background-color: white; color: #333333; } .mt-element-list .list-default.mt-list-head.grey.ext-1 .badge { background-color: #cccccc; } .mt-element-list .list-default.mt-list-head.grey .list-label { color: white; } .mt-element-list .list-default.mt-list-head.grey .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.grey { background-color: #E5E5E5; color: #333333; } .mt-element-list .list-todo .list-count.grey { background-color: #E5E5E5; color: #333333; } .mt-element-list .list-todo .list-count.grey:hover { background-color: #d8d8d8; } .mt-element-list .list-todo .list-todo-line.grey { border-color: #E5E5E5; } .mt-element-list .list-todo .list-todo-item.grey:after { border-right-color: #E5E5E5 !important; } .mt-element-list .list-todo .list-todo-item.grey .list-toggle { background: #E5E5E5; color: #333333 !important; } .mt-element-list .list-todo .list-todo-item.grey .list-toggle > .badge { color: #E5E5E5; background: #333333; } .mt-element-list .list-default.mt-list-head.grey-steel { background-color: #e9edef; color: #80898e; } .mt-element-list .list-default.mt-list-head.grey-steel .badge { background-color: white; color: #80898e; } .mt-element-list .list-default.mt-list-head.grey-steel.ext-1 .badge { background-color: #cbd5da; } .mt-element-list .list-default.mt-list-head.grey-steel .list-label { color: white; } .mt-element-list .list-default.mt-list-head.grey-steel .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.grey-steel { background-color: #e9edef; color: #80898e; } .mt-element-list .list-todo .list-count.grey-steel { background-color: #e9edef; color: #80898e; } .mt-element-list .list-todo .list-count.grey-steel:hover { background-color: #dae1e4; } .mt-element-list .list-todo .list-todo-line.grey-steel { border-color: #e9edef; } .mt-element-list .list-todo .list-todo-item.grey-steel:after { border-right-color: #e9edef !important; } .mt-element-list .list-todo .list-todo-item.grey-steel .list-toggle { background: #e9edef; color: #80898e !important; } .mt-element-list .list-todo .list-todo-item.grey-steel .list-toggle > .badge { color: #e9edef; background: #80898e; } .mt-element-list .list-default.mt-list-head.grey-cararra { background-color: #fafafa; color: #333333; } .mt-element-list .list-default.mt-list-head.grey-cararra .badge { background-color: white; color: #333333; } .mt-element-list .list-default.mt-list-head.grey-cararra.ext-1 .badge { background-color: #e1e1e1; } .mt-element-list .list-default.mt-list-head.grey-cararra .list-label { color: white; } .mt-element-list .list-default.mt-list-head.grey-cararra .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.grey-cararra { background-color: #fafafa; color: #333333; } .mt-element-list .list-todo .list-count.grey-cararra { background-color: #fafafa; color: #333333; } .mt-element-list .list-todo .list-count.grey-cararra:hover { background-color: #ededed; } .mt-element-list .list-todo .list-todo-line.grey-cararra { border-color: #fafafa; } .mt-element-list .list-todo .list-todo-item.grey-cararra:after { border-right-color: #fafafa !important; } .mt-element-list .list-todo .list-todo-item.grey-cararra .list-toggle { background: #fafafa; color: #333333 !important; } .mt-element-list .list-todo .list-todo-item.grey-cararra .list-toggle > .badge { color: #fafafa; background: #333333; } .mt-element-list .list-default.mt-list-head.grey-gallery { background-color: #555555; color: #ffffff; } .mt-element-list .list-default.mt-list-head.grey-gallery .badge { background-color: #6f6f6f; color: #ffffff; } .mt-element-list .list-default.mt-list-head.grey-gallery.ext-1 .badge { background-color: #3c3c3c; } .mt-element-list .list-default.mt-list-head.grey-gallery .list-label { color: #d5d5d5; } .mt-element-list .list-default.mt-list-head.grey-gallery .list-date { color: #d5d5d5; } .mt-element-list .list-todo.mt-list-head.grey-gallery { background-color: #555555; color: #ffffff; } .mt-element-list .list-todo .list-count.grey-gallery { background-color: #555555; color: #ffffff; } .mt-element-list .list-todo .list-count.grey-gallery:hover { background-color: #484848; } .mt-element-list .list-todo .list-todo-line.grey-gallery { border-color: #555555; } .mt-element-list .list-todo .list-todo-item.grey-gallery:after { border-right-color: #555555 !important; } .mt-element-list .list-todo .list-todo-item.grey-gallery .list-toggle { background: #555555; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.grey-gallery .list-toggle > .badge { color: #555555; background: #ffffff; } .mt-element-list .list-default.mt-list-head.grey-cascade { background-color: #95A5A6; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.grey-cascade .badge { background-color: #b1bdbd; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.grey-cascade.ext-1 .badge { background-color: #798d8f; } .mt-element-list .list-default.mt-list-head.grey-cascade .list-label { color: white; } .mt-element-list .list-default.mt-list-head.grey-cascade .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.grey-cascade { background-color: #95A5A6; color: #FFFFFF; } .mt-element-list .list-todo .list-count.grey-cascade { background-color: #95A5A6; color: #FFFFFF; } .mt-element-list .list-todo .list-count.grey-cascade:hover { background-color: #87999a; } .mt-element-list .list-todo .list-todo-line.grey-cascade { border-color: #95A5A6; } .mt-element-list .list-todo .list-todo-item.grey-cascade:after { border-right-color: #95A5A6 !important; } .mt-element-list .list-todo .list-todo-item.grey-cascade .list-toggle { background: #95A5A6; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.grey-cascade .list-toggle > .badge { color: #95A5A6; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.grey-silver { background-color: #BFBFBF; color: #FAFCFB; } .mt-element-list .list-default.mt-list-head.grey-silver .badge { background-color: #d9d9d9; color: #FAFCFB; } .mt-element-list .list-default.mt-list-head.grey-silver.ext-1 .badge { background-color: #a6a6a6; } .mt-element-list .list-default.mt-list-head.grey-silver .list-label { color: white; } .mt-element-list .list-default.mt-list-head.grey-silver .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.grey-silver { background-color: #BFBFBF; color: #FAFCFB; } .mt-element-list .list-todo .list-count.grey-silver { background-color: #BFBFBF; color: #FAFCFB; } .mt-element-list .list-todo .list-count.grey-silver:hover { background-color: #b2b2b2; } .mt-element-list .list-todo .list-todo-line.grey-silver { border-color: #BFBFBF; } .mt-element-list .list-todo .list-todo-item.grey-silver:after { border-right-color: #BFBFBF !important; } .mt-element-list .list-todo .list-todo-item.grey-silver .list-toggle { background: #BFBFBF; color: #FAFCFB !important; } .mt-element-list .list-todo .list-todo-item.grey-silver .list-toggle > .badge { color: #BFBFBF; background: #FAFCFB; } .mt-element-list .list-default.mt-list-head.grey-salsa { background-color: #ACB5C3; color: #FAFCFB; } .mt-element-list .list-default.mt-list-head.grey-salsa .badge { background-color: #cacfd8; color: #FAFCFB; } .mt-element-list .list-default.mt-list-head.grey-salsa.ext-1 .badge { background-color: #8e9bae; } .mt-element-list .list-default.mt-list-head.grey-salsa .list-label { color: white; } .mt-element-list .list-default.mt-list-head.grey-salsa .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.grey-salsa { background-color: #ACB5C3; color: #FAFCFB; } .mt-element-list .list-todo .list-count.grey-salsa { background-color: #ACB5C3; color: #FAFCFB; } .mt-element-list .list-todo .list-count.grey-salsa:hover { background-color: #9da8b8; } .mt-element-list .list-todo .list-todo-line.grey-salsa { border-color: #ACB5C3; } .mt-element-list .list-todo .list-todo-item.grey-salsa:after { border-right-color: #ACB5C3 !important; } .mt-element-list .list-todo .list-todo-item.grey-salsa .list-toggle { background: #ACB5C3; color: #FAFCFB !important; } .mt-element-list .list-todo .list-todo-item.grey-salsa .list-toggle > .badge { color: #ACB5C3; background: #FAFCFB; } .mt-element-list .list-default.mt-list-head.grey-salt { background-color: #bfcad1; color: #FAFCFB; } .mt-element-list .list-default.mt-list-head.grey-salt .badge { background-color: #dde3e6; color: #FAFCFB; } .mt-element-list .list-default.mt-list-head.grey-salt.ext-1 .badge { background-color: #a1b1bc; } .mt-element-list .list-default.mt-list-head.grey-salt .list-label { color: white; } .mt-element-list .list-default.mt-list-head.grey-salt .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.grey-salt { background-color: #bfcad1; color: #FAFCFB; } .mt-element-list .list-todo .list-count.grey-salt { background-color: #bfcad1; color: #FAFCFB; } .mt-element-list .list-todo .list-count.grey-salt:hover { background-color: #b0bec6; } .mt-element-list .list-todo .list-todo-line.grey-salt { border-color: #bfcad1; } .mt-element-list .list-todo .list-todo-item.grey-salt:after { border-right-color: #bfcad1 !important; } .mt-element-list .list-todo .list-todo-item.grey-salt .list-toggle { background: #bfcad1; color: #FAFCFB !important; } .mt-element-list .list-todo .list-todo-item.grey-salt .list-toggle > .badge { color: #bfcad1; background: #FAFCFB; } .mt-element-list .list-default.mt-list-head.grey-mint { background-color: #525e64; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.grey-mint .badge { background-color: #697880; color: #FFFFFF; } .mt-element-list .list-default.mt-list-head.grey-mint.ext-1 .badge { background-color: #3b4448; } .mt-element-list .list-default.mt-list-head.grey-mint .list-label { color: #d7dcde; } .mt-element-list .list-default.mt-list-head.grey-mint .list-date { color: #d7dcde; } .mt-element-list .list-todo.mt-list-head.grey-mint { background-color: #525e64; color: #FFFFFF; } .mt-element-list .list-todo .list-count.grey-mint { background-color: #525e64; color: #FFFFFF; } .mt-element-list .list-todo .list-count.grey-mint:hover { background-color: #475156; } .mt-element-list .list-todo .list-todo-line.grey-mint { border-color: #525e64; } .mt-element-list .list-todo .list-todo-item.grey-mint:after { border-right-color: #525e64 !important; } .mt-element-list .list-todo .list-todo-item.grey-mint .list-toggle { background: #525e64; color: #FFFFFF !important; } .mt-element-list .list-todo .list-todo-item.grey-mint .list-toggle > .badge { color: #525e64; background: #FFFFFF; } .mt-element-list .list-default.mt-list-head.red { background-color: #e7505a; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red .badge { background-color: #ed7d84; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red.ext-1 .badge { background-color: #e12330; } .mt-element-list .list-default.mt-list-head.red .list-label { color: white; } .mt-element-list .list-default.mt-list-head.red .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.red { background-color: #e7505a; color: #ffffff; } .mt-element-list .list-todo .list-count.red { background-color: #e7505a; color: #ffffff; } .mt-element-list .list-todo .list-count.red:hover { background-color: #e43a45; } .mt-element-list .list-todo .list-todo-line.red { border-color: #e7505a; } .mt-element-list .list-todo .list-todo-item.red:after { border-right-color: #e7505a !important; } .mt-element-list .list-todo .list-todo-item.red .list-toggle { background: #e7505a; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.red .list-toggle > .badge { color: #e7505a; background: #ffffff; } .mt-element-list .list-default.mt-list-head.red-pink { background-color: #E08283; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red-pink .badge { background-color: #eaabac; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red-pink.ext-1 .badge { background-color: #d6595a; } .mt-element-list .list-default.mt-list-head.red-pink .list-label { color: white; } .mt-element-list .list-default.mt-list-head.red-pink .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.red-pink { background-color: #E08283; color: #ffffff; } .mt-element-list .list-todo .list-count.red-pink { background-color: #E08283; color: #ffffff; } .mt-element-list .list-todo .list-count.red-pink:hover { background-color: #db6e6f; } .mt-element-list .list-todo .list-todo-line.red-pink { border-color: #E08283; } .mt-element-list .list-todo .list-todo-item.red-pink:after { border-right-color: #E08283 !important; } .mt-element-list .list-todo .list-todo-item.red-pink .list-toggle { background: #E08283; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.red-pink .list-toggle > .badge { color: #E08283; background: #ffffff; } .mt-element-list .list-default.mt-list-head.red-sunglo { background-color: #E26A6A; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red-sunglo .badge { background-color: #ea9595; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red-sunglo.ext-1 .badge { background-color: #da3f3f; } .mt-element-list .list-default.mt-list-head.red-sunglo .list-label { color: white; } .mt-element-list .list-default.mt-list-head.red-sunglo .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.red-sunglo { background-color: #E26A6A; color: #ffffff; } .mt-element-list .list-todo .list-count.red-sunglo { background-color: #E26A6A; color: #ffffff; } .mt-element-list .list-todo .list-count.red-sunglo:hover { background-color: #de5555; } .mt-element-list .list-todo .list-todo-line.red-sunglo { border-color: #E26A6A; } .mt-element-list .list-todo .list-todo-item.red-sunglo:after { border-right-color: #E26A6A !important; } .mt-element-list .list-todo .list-todo-item.red-sunglo .list-toggle { background: #E26A6A; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.red-sunglo .list-toggle > .badge { color: #E26A6A; background: #ffffff; } .mt-element-list .list-default.mt-list-head.red-intense { background-color: #e35b5a; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red-intense .badge { background-color: #ea8686; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red-intense.ext-1 .badge { background-color: #dc302e; } .mt-element-list .list-default.mt-list-head.red-intense .list-label { color: white; } .mt-element-list .list-default.mt-list-head.red-intense .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.red-intense { background-color: #e35b5a; color: #ffffff; } .mt-element-list .list-todo .list-count.red-intense { background-color: #e35b5a; color: #ffffff; } .mt-element-list .list-todo .list-count.red-intense:hover { background-color: #df4544; } .mt-element-list .list-todo .list-todo-line.red-intense { border-color: #e35b5a; } .mt-element-list .list-todo .list-todo-item.red-intense:after { border-right-color: #e35b5a !important; } .mt-element-list .list-todo .list-todo-item.red-intense .list-toggle { background: #e35b5a; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.red-intense .list-toggle > .badge { color: #e35b5a; background: #ffffff; } .mt-element-list .list-default.mt-list-head.red-thunderbird { background-color: #D91E18; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red-thunderbird .badge { background-color: #e9403b; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red-thunderbird.ext-1 .badge { background-color: #ab1813; } .mt-element-list .list-default.mt-list-head.red-thunderbird .list-label { color: #fef3f2; } .mt-element-list .list-default.mt-list-head.red-thunderbird .list-date { color: #fef3f2; } .mt-element-list .list-todo.mt-list-head.red-thunderbird { background-color: #D91E18; color: #ffffff; } .mt-element-list .list-todo .list-count.red-thunderbird { background-color: #D91E18; color: #ffffff; } .mt-element-list .list-todo .list-count.red-thunderbird:hover { background-color: #c21b15; } .mt-element-list .list-todo .list-todo-line.red-thunderbird { border-color: #D91E18; } .mt-element-list .list-todo .list-todo-item.red-thunderbird:after { border-right-color: #D91E18 !important; } .mt-element-list .list-todo .list-todo-item.red-thunderbird .list-toggle { background: #D91E18; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.red-thunderbird .list-toggle > .badge { color: #D91E18; background: #ffffff; } .mt-element-list .list-default.mt-list-head.red-flamingo { background-color: #EF4836; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red-flamingo .badge { background-color: #f37365; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red-flamingo.ext-1 .badge { background-color: #e02612; } .mt-element-list .list-default.mt-list-head.red-flamingo .list-label { color: white; } .mt-element-list .list-default.mt-list-head.red-flamingo .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.red-flamingo { background-color: #EF4836; color: #ffffff; } .mt-element-list .list-todo .list-count.red-flamingo { background-color: #EF4836; color: #ffffff; } .mt-element-list .list-todo .list-count.red-flamingo:hover { background-color: #ed321e; } .mt-element-list .list-todo .list-todo-line.red-flamingo { border-color: #EF4836; } .mt-element-list .list-todo .list-todo-item.red-flamingo:after { border-right-color: #EF4836 !important; } .mt-element-list .list-todo .list-todo-item.red-flamingo .list-toggle { background: #EF4836; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.red-flamingo .list-toggle > .badge { color: #EF4836; background: #ffffff; } .mt-element-list .list-default.mt-list-head.red-soft { background-color: #d05454; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red-soft .badge { background-color: #db7c7c; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red-soft.ext-1 .badge { background-color: #bd3434; } .mt-element-list .list-default.mt-list-head.red-soft .list-label { color: white; } .mt-element-list .list-default.mt-list-head.red-soft .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.red-soft { background-color: #d05454; color: #ffffff; } .mt-element-list .list-todo .list-count.red-soft { background-color: #d05454; color: #ffffff; } .mt-element-list .list-todo .list-count.red-soft:hover { background-color: #cb4040; } .mt-element-list .list-todo .list-todo-line.red-soft { border-color: #d05454; } .mt-element-list .list-todo .list-todo-item.red-soft:after { border-right-color: #d05454 !important; } .mt-element-list .list-todo .list-todo-item.red-soft .list-toggle { background: #d05454; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.red-soft .list-toggle > .badge { color: #d05454; background: #ffffff; } .mt-element-list .list-default.mt-list-head.red-haze { background-color: #f36a5a; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red-haze .badge { background-color: #f6958a; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red-haze.ext-1 .badge { background-color: #f03f2a; } .mt-element-list .list-default.mt-list-head.red-haze .list-label { color: white; } .mt-element-list .list-default.mt-list-head.red-haze .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.red-haze { background-color: #f36a5a; color: #ffffff; } .mt-element-list .list-todo .list-count.red-haze { background-color: #f36a5a; color: #ffffff; } .mt-element-list .list-todo .list-count.red-haze:hover { background-color: #f15542; } .mt-element-list .list-todo .list-todo-line.red-haze { border-color: #f36a5a; } .mt-element-list .list-todo .list-todo-item.red-haze:after { border-right-color: #f36a5a !important; } .mt-element-list .list-todo .list-todo-item.red-haze .list-toggle { background: #f36a5a; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.red-haze .list-toggle > .badge { color: #f36a5a; background: #ffffff; } .mt-element-list .list-default.mt-list-head.red-mint { background-color: #e43a45; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red-mint .badge { background-color: #ea676f; color: #ffffff; } .mt-element-list .list-default.mt-list-head.red-mint.ext-1 .badge { background-color: #cf1c28; } .mt-element-list .list-default.mt-list-head.red-mint .list-label { color: white; } .mt-element-list .list-default.mt-list-head.red-mint .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.red-mint { background-color: #e43a45; color: #ffffff; } .mt-element-list .list-todo .list-count.red-mint { background-color: #e43a45; color: #ffffff; } .mt-element-list .list-todo .list-count.red-mint:hover { background-color: #e12430; } .mt-element-list .list-todo .list-todo-line.red-mint { border-color: #e43a45; } .mt-element-list .list-todo .list-todo-item.red-mint:after { border-right-color: #e43a45 !important; } .mt-element-list .list-todo .list-todo-item.red-mint .list-toggle { background: #e43a45; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.red-mint .list-toggle > .badge { color: #e43a45; background: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow { background-color: #c49f47; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow .badge { background-color: #d0b36e; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow.ext-1 .badge { background-color: #a48334; } .mt-element-list .list-default.mt-list-head.yellow .list-label { color: white; } .mt-element-list .list-default.mt-list-head.yellow .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.yellow { background-color: #c49f47; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow { background-color: #c49f47; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow:hover { background-color: #b7923b; } .mt-element-list .list-todo .list-todo-line.yellow { border-color: #c49f47; } .mt-element-list .list-todo .list-todo-item.yellow:after { border-right-color: #c49f47 !important; } .mt-element-list .list-todo .list-todo-item.yellow .list-toggle { background: #c49f47; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.yellow .list-toggle > .badge { color: #c49f47; background: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-gold { background-color: #E87E04; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-gold .badge { background-color: #fb9724; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-gold.ext-1 .badge { background-color: #b66303; } .mt-element-list .list-default.mt-list-head.yellow-gold .list-label { color: #fff6ec; } .mt-element-list .list-default.mt-list-head.yellow-gold .list-date { color: #fff6ec; } .mt-element-list .list-todo.mt-list-head.yellow-gold { background-color: #E87E04; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow-gold { background-color: #E87E04; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow-gold:hover { background-color: #cf7004; } .mt-element-list .list-todo .list-todo-line.yellow-gold { border-color: #E87E04; } .mt-element-list .list-todo .list-todo-item.yellow-gold:after { border-right-color: #E87E04 !important; } .mt-element-list .list-todo .list-todo-item.yellow-gold .list-toggle { background: #E87E04; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.yellow-gold .list-toggle > .badge { color: #E87E04; background: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-casablanca { background-color: #f2784b; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-casablanca .badge { background-color: #f59c7b; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-casablanca.ext-1 .badge { background-color: #ef541b; } .mt-element-list .list-default.mt-list-head.yellow-casablanca .list-label { color: white; } .mt-element-list .list-default.mt-list-head.yellow-casablanca .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.yellow-casablanca { background-color: #f2784b; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow-casablanca { background-color: #f2784b; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow-casablanca:hover { background-color: #f06633; } .mt-element-list .list-todo .list-todo-line.yellow-casablanca { border-color: #f2784b; } .mt-element-list .list-todo .list-todo-item.yellow-casablanca:after { border-right-color: #f2784b !important; } .mt-element-list .list-todo .list-todo-item.yellow-casablanca .list-toggle { background: #f2784b; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.yellow-casablanca .list-toggle > .badge { color: #f2784b; background: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-crusta { background-color: #f3c200; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-crusta .badge { background-color: #ffd327; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-crusta.ext-1 .badge { background-color: #c09900; } .mt-element-list .list-default.mt-list-head.yellow-crusta .list-label { color: #fffdf3; } .mt-element-list .list-default.mt-list-head.yellow-crusta .list-date { color: #fffdf3; } .mt-element-list .list-todo.mt-list-head.yellow-crusta { background-color: #f3c200; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow-crusta { background-color: #f3c200; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow-crusta:hover { background-color: #daae00; } .mt-element-list .list-todo .list-todo-line.yellow-crusta { border-color: #f3c200; } .mt-element-list .list-todo .list-todo-item.yellow-crusta:after { border-right-color: #f3c200 !important; } .mt-element-list .list-todo .list-todo-item.yellow-crusta .list-toggle { background: #f3c200; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.yellow-crusta .list-toggle > .badge { color: #f3c200; background: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-lemon { background-color: #F7CA18; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-lemon .badge { background-color: #f9d549; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-lemon.ext-1 .badge { background-color: #d5ab07; } .mt-element-list .list-default.mt-list-head.yellow-lemon .list-label { color: white; } .mt-element-list .list-default.mt-list-head.yellow-lemon .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.yellow-lemon { background-color: #F7CA18; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow-lemon { background-color: #F7CA18; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow-lemon:hover { background-color: #edbf08; } .mt-element-list .list-todo .list-todo-line.yellow-lemon { border-color: #F7CA18; } .mt-element-list .list-todo .list-todo-item.yellow-lemon:after { border-right-color: #F7CA18 !important; } .mt-element-list .list-todo .list-todo-item.yellow-lemon .list-toggle { background: #F7CA18; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.yellow-lemon .list-toggle > .badge { color: #F7CA18; background: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-saffron { background-color: #F4D03F; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-saffron .badge { background-color: #f7dc6f; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-saffron.ext-1 .badge { background-color: #f1c40f; } .mt-element-list .list-default.mt-list-head.yellow-saffron .list-label { color: white; } .mt-element-list .list-default.mt-list-head.yellow-saffron .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.yellow-saffron { background-color: #F4D03F; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow-saffron { background-color: #F4D03F; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow-saffron:hover { background-color: #f3ca27; } .mt-element-list .list-todo .list-todo-line.yellow-saffron { border-color: #F4D03F; } .mt-element-list .list-todo .list-todo-item.yellow-saffron:after { border-right-color: #F4D03F !important; } .mt-element-list .list-todo .list-todo-item.yellow-saffron .list-toggle { background: #F4D03F; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.yellow-saffron .list-toggle > .badge { color: #F4D03F; background: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-soft { background-color: #c8d046; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-soft .badge { background-color: #d4da6f; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-soft.ext-1 .badge { background-color: #adb52e; } .mt-element-list .list-default.mt-list-head.yellow-soft .list-label { color: white; } .mt-element-list .list-default.mt-list-head.yellow-soft .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.yellow-soft { background-color: #c8d046; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow-soft { background-color: #c8d046; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow-soft:hover { background-color: #c1c933; } .mt-element-list .list-todo .list-todo-line.yellow-soft { border-color: #c8d046; } .mt-element-list .list-todo .list-todo-item.yellow-soft:after { border-right-color: #c8d046 !important; } .mt-element-list .list-todo .list-todo-item.yellow-soft .list-toggle { background: #c8d046; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.yellow-soft .list-toggle > .badge { color: #c8d046; background: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-haze { background-color: #c5bf66; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-haze .badge { background-color: #d3ce8b; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-haze.ext-1 .badge { background-color: #b4ad44; } .mt-element-list .list-default.mt-list-head.yellow-haze .list-label { color: white; } .mt-element-list .list-default.mt-list-head.yellow-haze .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.yellow-haze { background-color: #c5bf66; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow-haze { background-color: #c5bf66; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow-haze:hover { background-color: #beb754; } .mt-element-list .list-todo .list-todo-line.yellow-haze { border-color: #c5bf66; } .mt-element-list .list-todo .list-todo-item.yellow-haze:after { border-right-color: #c5bf66 !important; } .mt-element-list .list-todo .list-todo-item.yellow-haze .list-toggle { background: #c5bf66; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.yellow-haze .list-toggle > .badge { color: #c5bf66; background: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-mint { background-color: #c5b96b; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-mint .badge { background-color: #d3ca90; color: #ffffff; } .mt-element-list .list-default.mt-list-head.yellow-mint.ext-1 .badge { background-color: #b6a747; } .mt-element-list .list-default.mt-list-head.yellow-mint .list-label { color: white; } .mt-element-list .list-default.mt-list-head.yellow-mint .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.yellow-mint { background-color: #c5b96b; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow-mint { background-color: #c5b96b; color: #ffffff; } .mt-element-list .list-todo .list-count.yellow-mint:hover { background-color: #beb059; } .mt-element-list .list-todo .list-todo-line.yellow-mint { border-color: #c5b96b; } .mt-element-list .list-todo .list-todo-item.yellow-mint:after { border-right-color: #c5b96b !important; } .mt-element-list .list-todo .list-todo-item.yellow-mint .list-toggle { background: #c5b96b; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.yellow-mint .list-toggle > .badge { color: #c5b96b; background: #ffffff; } .mt-element-list .list-default.mt-list-head.purple { background-color: #8E44AD; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple .badge { background-color: #a563c1; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple.ext-1 .badge { background-color: #703688; } .mt-element-list .list-default.mt-list-head.purple .list-label { color: #f9f5fb; } .mt-element-list .list-default.mt-list-head.purple .list-date { color: #f9f5fb; } .mt-element-list .list-todo.mt-list-head.purple { background-color: #8E44AD; color: #ffffff; } .mt-element-list .list-todo .list-count.purple { background-color: #8E44AD; color: #ffffff; } .mt-element-list .list-todo .list-count.purple:hover { background-color: #7f3d9b; } .mt-element-list .list-todo .list-todo-line.purple { border-color: #8E44AD; } .mt-element-list .list-todo .list-todo-item.purple:after { border-right-color: #8E44AD !important; } .mt-element-list .list-todo .list-todo-item.purple .list-toggle { background: #8E44AD; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.purple .list-toggle > .badge { color: #8E44AD; background: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-plum { background-color: #8775a7; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-plum .badge { background-color: #a294bb; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-plum.ext-1 .badge { background-color: #6d5b8e; } .mt-element-list .list-default.mt-list-head.purple-plum .list-label { color: white; } .mt-element-list .list-default.mt-list-head.purple-plum .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.purple-plum { background-color: #8775a7; color: #ffffff; } .mt-element-list .list-todo .list-count.purple-plum { background-color: #8775a7; color: #ffffff; } .mt-element-list .list-todo .list-count.purple-plum:hover { background-color: #79659d; } .mt-element-list .list-todo .list-todo-line.purple-plum { border-color: #8775a7; } .mt-element-list .list-todo .list-todo-item.purple-plum:after { border-right-color: #8775a7 !important; } .mt-element-list .list-todo .list-todo-item.purple-plum .list-toggle { background: #8775a7; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.purple-plum .list-toggle > .badge { color: #8775a7; background: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-medium { background-color: #BF55EC; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-medium .badge { background-color: #d083f1; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-medium.ext-1 .badge { background-color: #ae27e7; } .mt-element-list .list-default.mt-list-head.purple-medium .list-label { color: white; } .mt-element-list .list-default.mt-list-head.purple-medium .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.purple-medium { background-color: #BF55EC; color: #ffffff; } .mt-element-list .list-todo .list-count.purple-medium { background-color: #BF55EC; color: #ffffff; } .mt-element-list .list-todo .list-count.purple-medium:hover { background-color: #b63ee9; } .mt-element-list .list-todo .list-todo-line.purple-medium { border-color: #BF55EC; } .mt-element-list .list-todo .list-todo-item.purple-medium:after { border-right-color: #BF55EC !important; } .mt-element-list .list-todo .list-todo-item.purple-medium .list-toggle { background: #BF55EC; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.purple-medium .list-toggle > .badge { color: #BF55EC; background: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-studio { background-color: #8E44AD; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-studio .badge { background-color: #a563c1; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-studio.ext-1 .badge { background-color: #703688; } .mt-element-list .list-default.mt-list-head.purple-studio .list-label { color: #f9f5fb; } .mt-element-list .list-default.mt-list-head.purple-studio .list-date { color: #f9f5fb; } .mt-element-list .list-todo.mt-list-head.purple-studio { background-color: #8E44AD; color: #ffffff; } .mt-element-list .list-todo .list-count.purple-studio { background-color: #8E44AD; color: #ffffff; } .mt-element-list .list-todo .list-count.purple-studio:hover { background-color: #7f3d9b; } .mt-element-list .list-todo .list-todo-line.purple-studio { border-color: #8E44AD; } .mt-element-list .list-todo .list-todo-item.purple-studio:after { border-right-color: #8E44AD !important; } .mt-element-list .list-todo .list-todo-item.purple-studio .list-toggle { background: #8E44AD; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.purple-studio .list-toggle > .badge { color: #8E44AD; background: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-wisteria { background-color: #9B59B6; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-wisteria .badge { background-color: #b07cc6; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-wisteria.ext-1 .badge { background-color: #804399; } .mt-element-list .list-default.mt-list-head.purple-wisteria .list-label { color: white; } .mt-element-list .list-default.mt-list-head.purple-wisteria .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.purple-wisteria { background-color: #9B59B6; color: #ffffff; } .mt-element-list .list-todo .list-count.purple-wisteria { background-color: #9B59B6; color: #ffffff; } .mt-element-list .list-todo .list-count.purple-wisteria:hover { background-color: #8f4bab; } .mt-element-list .list-todo .list-todo-line.purple-wisteria { border-color: #9B59B6; } .mt-element-list .list-todo .list-todo-item.purple-wisteria:after { border-right-color: #9B59B6 !important; } .mt-element-list .list-todo .list-todo-item.purple-wisteria .list-toggle { background: #9B59B6; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.purple-wisteria .list-toggle > .badge { color: #9B59B6; background: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-seance { background-color: #9A12B3; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-seance .badge { background-color: #c217e1; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-seance.ext-1 .badge { background-color: #720d85; } .mt-element-list .list-default.mt-list-head.purple-seance .list-label { color: #f2cafa; } .mt-element-list .list-default.mt-list-head.purple-seance .list-date { color: #f2cafa; } .mt-element-list .list-todo.mt-list-head.purple-seance { background-color: #9A12B3; color: #ffffff; } .mt-element-list .list-todo .list-count.purple-seance { background-color: #9A12B3; color: #ffffff; } .mt-element-list .list-todo .list-count.purple-seance:hover { background-color: #86109c; } .mt-element-list .list-todo .list-todo-line.purple-seance { border-color: #9A12B3; } .mt-element-list .list-todo .list-todo-item.purple-seance:after { border-right-color: #9A12B3 !important; } .mt-element-list .list-todo .list-todo-item.purple-seance .list-toggle { background: #9A12B3; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.purple-seance .list-toggle > .badge { color: #9A12B3; background: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-intense { background-color: #8775a7; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-intense .badge { background-color: #a294bb; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-intense.ext-1 .badge { background-color: #6d5b8e; } .mt-element-list .list-default.mt-list-head.purple-intense .list-label { color: white; } .mt-element-list .list-default.mt-list-head.purple-intense .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.purple-intense { background-color: #8775a7; color: #ffffff; } .mt-element-list .list-todo .list-count.purple-intense { background-color: #8775a7; color: #ffffff; } .mt-element-list .list-todo .list-count.purple-intense:hover { background-color: #79659d; } .mt-element-list .list-todo .list-todo-line.purple-intense { border-color: #8775a7; } .mt-element-list .list-todo .list-todo-item.purple-intense:after { border-right-color: #8775a7 !important; } .mt-element-list .list-todo .list-todo-item.purple-intense .list-toggle { background: #8775a7; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.purple-intense .list-toggle > .badge { color: #8775a7; background: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-sharp { background-color: #796799; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-sharp .badge { background-color: #9486ad; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-sharp.ext-1 .badge { background-color: #61527b; } .mt-element-list .list-default.mt-list-head.purple-sharp .list-label { color: white; } .mt-element-list .list-default.mt-list-head.purple-sharp .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.purple-sharp { background-color: #796799; color: #ffffff; } .mt-element-list .list-todo .list-count.purple-sharp { background-color: #796799; color: #ffffff; } .mt-element-list .list-todo .list-count.purple-sharp:hover { background-color: #6d5d8a; } .mt-element-list .list-todo .list-todo-line.purple-sharp { border-color: #796799; } .mt-element-list .list-todo .list-todo-item.purple-sharp:after { border-right-color: #796799 !important; } .mt-element-list .list-todo .list-todo-item.purple-sharp .list-toggle { background: #796799; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.purple-sharp .list-toggle > .badge { color: #796799; background: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-soft { background-color: #8877a9; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-soft .badge { background-color: #a396bd; color: #ffffff; } .mt-element-list .list-default.mt-list-head.purple-soft.ext-1 .badge { background-color: #6e5c91; } .mt-element-list .list-default.mt-list-head.purple-soft .list-label { color: white; } .mt-element-list .list-default.mt-list-head.purple-soft .list-date { color: white; } .mt-element-list .list-todo.mt-list-head.purple-soft { background-color: #8877a9; color: #ffffff; } .mt-element-list .list-todo .list-count.purple-soft { background-color: #8877a9; color: #ffffff; } .mt-element-list .list-todo .list-count.purple-soft:hover { background-color: #7a679f; } .mt-element-list .list-todo .list-todo-line.purple-soft { border-color: #8877a9; } .mt-element-list .list-todo .list-todo-item.purple-soft:after { border-right-color: #8877a9 !important; } .mt-element-list .list-todo .list-todo-item.purple-soft .list-toggle { background: #8877a9; color: #ffffff !important; } .mt-element-list .list-todo .list-todo-item.purple-soft .list-toggle > .badge { color: #8877a9; background: #ffffff; } .mt-element-list .list-todo-item.white:after { border-right-color: #ffffff; } .mt-element-list .list-todo-item.white .list-toggle { background: #ffffff; } .mt-element-list .list-todo-item.default:after { border-right-color: #e1e5ec; } .mt-element-list .list-todo-item.default .list-toggle { background: #e1e5ec; } .mt-element-list .list-todo-item.dark:after { border-right-color: #2f353b; } .mt-element-list .list-todo-item.dark .list-toggle { background: #2f353b; } .mt-element-list .list-todo-item.blue:after { border-right-color: #3598dc; } .mt-element-list .list-todo-item.blue .list-toggle { background: #3598dc; } .mt-element-list .list-todo-item.blue-madison:after { border-right-color: #578ebe; } .mt-element-list .list-todo-item.blue-madison .list-toggle { background: #578ebe; } .mt-element-list .list-todo-item.blue-chambray:after { border-right-color: #2C3E50; } .mt-element-list .list-todo-item.blue-chambray .list-toggle { background: #2C3E50; } .mt-element-list .list-todo-item.blue-ebonyclay:after { border-right-color: #22313F; } .mt-element-list .list-todo-item.blue-ebonyclay .list-toggle { background: #22313F; } .mt-element-list .list-todo-item.blue-hoki:after { border-right-color: #67809F; } .mt-element-list .list-todo-item.blue-hoki .list-toggle { background: #67809F; } .mt-element-list .list-todo-item.blue-steel:after { border-right-color: #4B77BE; } .mt-element-list .list-todo-item.blue-steel .list-toggle { background: #4B77BE; } .mt-element-list .list-todo-item.blue-soft:after { border-right-color: #4c87b9; } .mt-element-list .list-todo-item.blue-soft .list-toggle { background: #4c87b9; } .mt-element-list .list-todo-item.blue-dark:after { border-right-color: #5e738b; } .mt-element-list .list-todo-item.blue-dark .list-toggle { background: #5e738b; } .mt-element-list .list-todo-item.blue-sharp:after { border-right-color: #5C9BD1; } .mt-element-list .list-todo-item.blue-sharp .list-toggle { background: #5C9BD1; } .mt-element-list .list-todo-item.green:after { border-right-color: #32c5d2; } .mt-element-list .list-todo-item.green .list-toggle { background: #32c5d2; } .mt-element-list .list-todo-item.green-meadow:after { border-right-color: #1BBC9B; } .mt-element-list .list-todo-item.green-meadow .list-toggle { background: #1BBC9B; } .mt-element-list .list-todo-item.green-seagreen:after { border-right-color: #1BA39C; } .mt-element-list .list-todo-item.green-seagreen .list-toggle { background: #1BA39C; } .mt-element-list .list-todo-item.green-turquoise:after { border-right-color: #36D7B7; } .mt-element-list .list-todo-item.green-turquoise .list-toggle { background: #36D7B7; } .mt-element-list .list-todo-item.green-haze:after { border-right-color: #44b6ae; } .mt-element-list .list-todo-item.green-haze .list-toggle { background: #44b6ae; } .mt-element-list .list-todo-item.green-jungle:after { border-right-color: #26C281; } .mt-element-list .list-todo-item.green-jungle .list-toggle { background: #26C281; } .mt-element-list .list-todo-item.green-soft:after { border-right-color: #3faba4; } .mt-element-list .list-todo-item.green-soft .list-toggle { background: #3faba4; } .mt-element-list .list-todo-item.green-dark:after { border-right-color: #4DB3A2; } .mt-element-list .list-todo-item.green-dark .list-toggle { background: #4DB3A2; } .mt-element-list .list-todo-item.green-sharp:after { border-right-color: #2ab4c0; } .mt-element-list .list-todo-item.green-sharp .list-toggle { background: #2ab4c0; } .mt-element-list .list-todo-item.grey:after { border-right-color: #E5E5E5; } .mt-element-list .list-todo-item.grey .list-toggle { background: #E5E5E5; } .mt-element-list .list-todo-item.grey-steel:after { border-right-color: #e9edef; } .mt-element-list .list-todo-item.grey-steel .list-toggle { background: #e9edef; } .mt-element-list .list-todo-item.grey-cararra:after { border-right-color: #fafafa; } .mt-element-list .list-todo-item.grey-cararra .list-toggle { background: #fafafa; } .mt-element-list .list-todo-item.grey-gallery:after { border-right-color: #555555; } .mt-element-list .list-todo-item.grey-gallery .list-toggle { background: #555555; } .mt-element-list .list-todo-item.grey-cascade:after { border-right-color: #95A5A6; } .mt-element-list .list-todo-item.grey-cascade .list-toggle { background: #95A5A6; } .mt-element-list .list-todo-item.grey-silver:after { border-right-color: #BFBFBF; } .mt-element-list .list-todo-item.grey-silver .list-toggle { background: #BFBFBF; } .mt-element-list .list-todo-item.grey-salsa:after { border-right-color: #ACB5C3; } .mt-element-list .list-todo-item.grey-salsa .list-toggle { background: #ACB5C3; } .mt-element-list .list-todo-item.grey-salt:after { border-right-color: #bfcad1; } .mt-element-list .list-todo-item.grey-salt .list-toggle { background: #bfcad1; } .mt-element-list .list-todo-item.grey-mint:after { border-right-color: #525e64; } .mt-element-list .list-todo-item.grey-mint .list-toggle { background: #525e64; } .mt-element-list .list-todo-item.red:after { border-right-color: #e7505a; } .mt-element-list .list-todo-item.red .list-toggle { background: #e7505a; } .mt-element-list .list-todo-item.red-pink:after { border-right-color: #E08283; } .mt-element-list .list-todo-item.red-pink .list-toggle { background: #E08283; } .mt-element-list .list-todo-item.red-sunglo:after { border-right-color: #E26A6A; } .mt-element-list .list-todo-item.red-sunglo .list-toggle { background: #E26A6A; } .mt-element-list .list-todo-item.red-intense:after { border-right-color: #e35b5a; } .mt-element-list .list-todo-item.red-intense .list-toggle { background: #e35b5a; } .mt-element-list .list-todo-item.red-thunderbird:after { border-right-color: #D91E18; } .mt-element-list .list-todo-item.red-thunderbird .list-toggle { background: #D91E18; } .mt-element-list .list-todo-item.red-flamingo:after { border-right-color: #EF4836; } .mt-element-list .list-todo-item.red-flamingo .list-toggle { background: #EF4836; } .mt-element-list .list-todo-item.red-soft:after { border-right-color: #d05454; } .mt-element-list .list-todo-item.red-soft .list-toggle { background: #d05454; } .mt-element-list .list-todo-item.red-haze:after { border-right-color: #f36a5a; } .mt-element-list .list-todo-item.red-haze .list-toggle { background: #f36a5a; } .mt-element-list .list-todo-item.red-mint:after { border-right-color: #e43a45; } .mt-element-list .list-todo-item.red-mint .list-toggle { background: #e43a45; } .mt-element-list .list-todo-item.yellow:after { border-right-color: #c49f47; } .mt-element-list .list-todo-item.yellow .list-toggle { background: #c49f47; } .mt-element-list .list-todo-item.yellow-gold:after { border-right-color: #E87E04; } .mt-element-list .list-todo-item.yellow-gold .list-toggle { background: #E87E04; } .mt-element-list .list-todo-item.yellow-casablanca:after { border-right-color: #f2784b; } .mt-element-list .list-todo-item.yellow-casablanca .list-toggle { background: #f2784b; } .mt-element-list .list-todo-item.yellow-crusta:after { border-right-color: #f3c200; } .mt-element-list .list-todo-item.yellow-crusta .list-toggle { background: #f3c200; } .mt-element-list .list-todo-item.yellow-lemon:after { border-right-color: #F7CA18; } .mt-element-list .list-todo-item.yellow-lemon .list-toggle { background: #F7CA18; } .mt-element-list .list-todo-item.yellow-saffron:after { border-right-color: #F4D03F; } .mt-element-list .list-todo-item.yellow-saffron .list-toggle { background: #F4D03F; } .mt-element-list .list-todo-item.yellow-soft:after { border-right-color: #c8d046; } .mt-element-list .list-todo-item.yellow-soft .list-toggle { background: #c8d046; } .mt-element-list .list-todo-item.yellow-haze:after { border-right-color: #c5bf66; } .mt-element-list .list-todo-item.yellow-haze .list-toggle { background: #c5bf66; } .mt-element-list .list-todo-item.yellow-mint:after { border-right-color: #c5b96b; } .mt-element-list .list-todo-item.yellow-mint .list-toggle { background: #c5b96b; } .mt-element-list .list-todo-item.purple:after { border-right-color: #8E44AD; } .mt-element-list .list-todo-item.purple .list-toggle { background: #8E44AD; } .mt-element-list .list-todo-item.purple-plum:after { border-right-color: #8775a7; } .mt-element-list .list-todo-item.purple-plum .list-toggle { background: #8775a7; } .mt-element-list .list-todo-item.purple-medium:after { border-right-color: #BF55EC; } .mt-element-list .list-todo-item.purple-medium .list-toggle { background: #BF55EC; } .mt-element-list .list-todo-item.purple-studio:after { border-right-color: #8E44AD; } .mt-element-list .list-todo-item.purple-studio .list-toggle { background: #8E44AD; } .mt-element-list .list-todo-item.purple-wisteria:after { border-right-color: #9B59B6; } .mt-element-list .list-todo-item.purple-wisteria .list-toggle { background: #9B59B6; } .mt-element-list .list-todo-item.purple-seance:after { border-right-color: #9A12B3; } .mt-element-list .list-todo-item.purple-seance .list-toggle { background: #9A12B3; } .mt-element-list .list-todo-item.purple-intense:after { border-right-color: #8775a7; } .mt-element-list .list-todo-item.purple-intense .list-toggle { background: #8775a7; } .mt-element-list .list-todo-item.purple-sharp:after { border-right-color: #796799; } .mt-element-list .list-todo-item.purple-sharp .list-toggle { background: #796799; } .mt-element-list .list-todo-item.purple-soft:after { border-right-color: #8877a9; } .mt-element-list .list-todo-item.purple-soft .list-toggle { background: #8877a9; } .mt-element-ribbon { padding: 25px; position: relative; margin-bottom: 30px; } .mt-element-ribbon .ribbon-content { margin: 0; padding-top: 2.5em; } .mt-element-ribbon .ribbon-content.no-padding { padding-top: 0; } .mt-element-ribbon .ribbon { position: absolute; top: 15px; left: -2px; padding: 0.5em 1em; z-index: 5; background-color: #bac3d0; color: #384353; } .mt-element-ribbon .ribbon.ribbon-right { left: auto; right: -2px; } .mt-element-ribbon .ribbon.ribbon-vertical-left { top: -2px; left: 15px; padding-top: 1em; padding-bottom: 1em; } .mt-element-ribbon .ribbon.ribbon-vertical-right { top: -2px; left: auto; right: 15px; padding-top: 1em; padding-bottom: 1em; } .mt-element-ribbon .ribbon.ribbon-shadow { box-shadow: 2px 2px 7px rgba(0, 0, 0, 0.4); } .mt-element-ribbon .ribbon.ribbon-shadow.ribbon-right, .mt-element-ribbon .ribbon.ribbon-shadow.ribbon-vertical-right { box-shadow: -2px 2px 7px rgba(0, 0, 0, 0.4); } .mt-element-ribbon .ribbon.ribbon-round { border-top-right-radius: 5px !important; border-bottom-right-radius: 5px !important; } .mt-element-ribbon .ribbon.ribbon-round.ribbon-right { border-top-right-radius: 0px !important; border-bottom-right-radius: 0px !important; border-top-left-radius: 5px !important; border-bottom-left-radius: 5px !important; } .mt-element-ribbon .ribbon.ribbon-round.ribbon-vertical-right, .mt-element-ribbon .ribbon.ribbon-round.ribbon-vertical-left { border-top-right-radius: 0px !important; border-bottom-right-radius: 5px !important; border-top-left-radius: 0px !important; border-bottom-left-radius: 5px !important; } .mt-element-ribbon .ribbon.ribbon-border:after { border: 1px solid; content: ''; position: absolute; top: 5px; bottom: 5px; left: 5px; right: 5px; } .mt-element-ribbon .ribbon.ribbon-border-vert:after { border-top: none; border-bottom: none; border-left: 1px solid; border-right: 1px solid; content: ''; position: absolute; top: 0; bottom: 0; left: 5px; right: 5px; } .mt-element-ribbon .ribbon.ribbon-border-hor:after { border-top: 1px solid; border-bottom: 1px solid; border-left: none; border-right: none; content: ''; position: absolute; top: 5px; bottom: 5px; left: 0; right: 0; } .mt-element-ribbon .ribbon.ribbon-border-dash:after { border: 1px solid; border-style: dashed; content: ''; position: absolute; top: 5px; bottom: 5px; left: 5px; right: 5px; } .mt-element-ribbon .ribbon.ribbon-border-dash-vert:after { border-top: none; border-bottom: none; border-left: 1px solid; border-right: 1px solid; border-left-style: dashed; border-right-style: dashed; content: ''; position: absolute; top: 0; bottom: 0; left: 5px; right: 5px; } .mt-element-ribbon .ribbon.ribbon-border-dash-hor:after { border-top: 1px solid; border-bottom: 1px solid; border-left: none; border-right: none; border-top-style: dashed; border-bottom-style: dashed; content: ''; position: absolute; top: 5px; bottom: 5px; left: 0; right: 0; } .mt-element-ribbon .ribbon.ribbon-clip { left: -10px; } .mt-element-ribbon .ribbon.ribbon-clip.ribbon-right { left: auto; right: -10px; } .mt-element-ribbon .ribbon > .ribbon-sub { z-index: -1; position: absolute; padding: 0; width: 100%; height: 100%; top: 0; left: 0; } .mt-element-ribbon .ribbon > .ribbon-sub.ribbon-clip:before, .mt-element-ribbon .ribbon > .ribbon-sub.ribbon-clip:after { content: ''; position: absolute; border-style: solid; border-color: transparent !important; bottom: -10px; } .mt-element-ribbon .ribbon > .ribbon-sub.ribbon-clip:before { border-width: 0 10px 10px 0; border-right-color: #222 !important; left: 0; } .mt-element-ribbon .ribbon > .ribbon-sub.ribbon-clip.ribbon-right:before, .mt-element-ribbon .ribbon > .ribbon-sub.ribbon-clip.ribbon-right:after { content: ''; position: absolute; border-style: solid; border-color: transparent; bottom: -10px; } .mt-element-ribbon .ribbon > .ribbon-sub.ribbon-clip.ribbon-right:before { border-right-color: transparent !important; } .mt-element-ribbon .ribbon > .ribbon-sub.ribbon-clip.ribbon-right:after { border-width: 0 0 10px 10px; border-left-color: #222 !important; right: 0; } .mt-element-ribbon .ribbon > .ribbon-sub.ribbon-bookmark:after { border-left: 21px solid; border-right: 20px solid; border-bottom: 1em solid transparent !important; bottom: -1em; content: ''; height: 0; left: 0; position: absolute; width: 0; } .mt-element-ribbon .ribbon:after { border-color: #62748f; } .mt-element-ribbon .ribbon > .ribbon-sub { background-color: #bac3d0; color: #384353; } .mt-element-ribbon .ribbon > .ribbon-sub:after { border-color: #62748f; border-left-color: #bac3d0; border-right-color: #bac3d0; } .mt-element-ribbon .ribbon.ribbon-color-default { background-color: #bac3d0; color: #384353; } .mt-element-ribbon .ribbon.ribbon-color-default:after { border-color: #9ca8bb; } .mt-element-ribbon .ribbon.ribbon-color-default > .ribbon-sub { background-color: #bac3d0; color: #384353; } .mt-element-ribbon .ribbon.ribbon-color-default > .ribbon-sub:after { border-color: #62748f; border-left-color: #bac3d0; border-right-color: #bac3d0; } .mt-element-ribbon .ribbon.ribbon-color-primary { background-color: #337ab7; color: #fff; } .mt-element-ribbon .ribbon.ribbon-color-primary:after { border-color: #286090; } .mt-element-ribbon .ribbon.ribbon-color-primary > .ribbon-sub { background-color: #337ab7; color: black; } .mt-element-ribbon .ribbon.ribbon-color-primary > .ribbon-sub:after { border-color: #122b40; border-left-color: #337ab7; border-right-color: #337ab7; } .mt-element-ribbon .ribbon.ribbon-color-info { background-color: #659be0; color: #fff; } .mt-element-ribbon .ribbon.ribbon-color-info:after { border-color: #3a80d7; } .mt-element-ribbon .ribbon.ribbon-color-info > .ribbon-sub { background-color: #659be0; color: #0c203a; } .mt-element-ribbon .ribbon.ribbon-color-info > .ribbon-sub:after { border-color: #1d4f8e; border-left-color: #659be0; border-right-color: #659be0; } .mt-element-ribbon .ribbon.ribbon-color-success { background-color: #36c6d3; color: #fff; } .mt-element-ribbon .ribbon.ribbon-color-success:after { border-color: #27a4b0; } .mt-element-ribbon .ribbon.ribbon-color-success > .ribbon-sub { background-color: #36c6d3; color: #020808; } .mt-element-ribbon .ribbon.ribbon-color-success > .ribbon-sub:after { border-color: #14565c; border-left-color: #36c6d3; border-right-color: #36c6d3; } .mt-element-ribbon .ribbon.ribbon-color-danger { background-color: #ed6b75; color: #fff; } .mt-element-ribbon .ribbon.ribbon-color-danger:after { border-color: #e73d4a; } .mt-element-ribbon .ribbon.ribbon-color-danger > .ribbon-sub { background-color: #ed6b75; color: #4f0a0f; } .mt-element-ribbon .ribbon.ribbon-color-danger > .ribbon-sub:after { border-color: #a91520; border-left-color: #ed6b75; border-right-color: #ed6b75; } .mt-element-ribbon .ribbon.ribbon-color-warning { background-color: #F1C40F; color: #010100; } .mt-element-ribbon .ribbon.ribbon-color-warning:after { border-color: #c29d0b; } .mt-element-ribbon .ribbon.ribbon-color-warning > .ribbon-sub { background-color: #F1C40F; color: #010100; } .mt-element-ribbon .ribbon.ribbon-color-warning > .ribbon-sub:after { border-color: #614f06; border-left-color: #F1C40F; border-right-color: #F1C40F; } .mt-element-card .mt-card-item { border: 1px solid; border-color: #e7ecf1; position: relative; margin-bottom: 30px; } .mt-element-card .mt-card-item .mt-card-avatar { margin-bottom: 15px; } .mt-element-card .mt-card-item .mt-card-content { text-align: center; } .mt-element-card .mt-card-item .mt-card-content .mt-card-name { font-size: 16px; font-weight: 600; margin-bottom: 10px; } .mt-element-card .mt-card-item .mt-card-content .mt-card-desc { font-size: 14px; margin: 0 0 10px 0; } .mt-element-card .mt-card-item .mt-card-content .mt-card-social > ul { padding: 0; margin-bottom: 10px; } .mt-element-card .mt-card-item .mt-card-content .mt-card-social > ul > li { list-style: none; display: inline-block; margin: 0 3px; } .mt-element-card .mt-card-item .mt-card-content .mt-card-social > ul > li > a { color: #000; font-size: 18px; } .mt-element-card .mt-card-item .mt-card-content .mt-card-social > ul > li > a.mt-card-btn { color: #fff; } .mt-element-card .mt-card-item .mt-card-content .mt-card-social > ul > li > a.mt-card-btn:hover { color: #36c6d3; } .mt-element-card .mt-card-item .mt-card-content .mt-card-social > ul > li > a:hover { color: #F1C40F; } .mt-element-card.mt-card-round .mt-card-item { padding: 40px 40px 10px 40px; } .mt-element-card.mt-card-round .mt-card-item .mt-card-avatar { border-radius: 50% !important; -webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC); } .mt-element-card.mt-card-round .mt-card-item .mt-card-avatar .mt-overlay { -webkit-border-radius: 50%; -moz-border-radius: 50%; -ms-border-radius: 50%; -o-border-radius: 50%; border-radius: 50%; } .mt-element-overlay .mt-overlay-1 { width: 100%; height: 100%; float: left; overflow: hidden; position: relative; text-align: center; cursor: default; } .mt-element-overlay .mt-overlay-1 img { display: block; position: relative; -webkit-transition: all .4s linear; transition: all .4s linear; width: 100%; height: auto; } .mt-element-overlay .mt-overlay-1 h2 { text-transform: uppercase; color: #fff; text-align: center; position: relative; font-size: 17px; background: rgba(0, 0, 0, 0.6); -webkit-transform: translatey(-100px) translateZ(0); -ms-transform: translatey(-100px) translateZ(0); transform: translatey(-100px) translateZ(0); -webkit-transition: all .2s ease-in-out; transition: all .2s ease-in-out; padding: 10px; } .mt-element-overlay .mt-overlay-1 .mt-info { text-decoration: none; display: inline-block; text-transform: uppercase; color: #fff; background-color: transparent; opacity: 0; filter: alpha(opacity=0); -webkit-transition: all .2s ease-in-out; transition: all .2s ease-in-out; padding: 0; margin: auto; position: absolute; top: 50%; left: 0; right: 0; transform: translateY(-50%) translateZ(0); -webkit-transform: translateY(-50%) translateZ(0); -ms-transform: translateY(-50%) translateZ(0); } .mt-element-overlay .mt-overlay-1 .mt-info > li { list-style: none; display: inline-block; margin: 0 3px; } .mt-element-overlay .mt-overlay-1 .mt-info > li:hover { -webkit-transition: all .2s ease-in-out; transition: all .2s ease-in-out; cursor: pointer; } .mt-element-overlay .mt-overlay-1:hover .mt-overlay { opacity: 1; filter: alpha(opacity=100); -webkit-transform: translateZ(0); -ms-transform: translateZ(0); transform: translateZ(0); } .mt-element-overlay .mt-overlay-1:hover img { -ms-transform: scale(1.2) translateZ(0); -webkit-transform: scale(1.2) translateZ(0); transform: scale(1.2) translateZ(0); } .mt-element-overlay .mt-overlay-1:hover .mt-info { opacity: 1; filter: alpha(opacity=100); -webkit-transition-delay: .2s; transition-delay: .2s; } .mt-element-overlay .mt-overlay-1 .mt-overlay { width: 100%; height: 100%; position: absolute; overflow: hidden; top: 0; left: 0; opacity: 0; background-color: rgba(0, 0, 0, 0.7); -webkit-transition: all .4s ease-in-out; transition: all .4s ease-in-out; } .mt-element-overlay .mt-overlay-1.mt-scroll-up:hover .mt-overlay { bottom: 0; } .mt-element-overlay .mt-overlay-1.mt-scroll-up .mt-overlay { bottom: -100%; top: auto; } .mt-element-overlay .mt-overlay-1.mt-scroll-down:hover .mt-overlay { top: 0; } .mt-element-overlay .mt-overlay-1.mt-scroll-down .mt-overlay { top: -100%; } .mt-element-overlay .mt-overlay-1.mt-scroll-left:hover .mt-overlay { right: 0; } .mt-element-overlay .mt-overlay-1.mt-scroll-left .mt-overlay { right: -100%; left: auto; } .mt-element-overlay .mt-overlay-1.mt-scroll-right:hover .mt-overlay { left: 0; } .mt-element-overlay .mt-overlay-1.mt-scroll-right .mt-overlay { left: -100%; } .mt-element-overlay .mt-overlay-2 { width: 100%; height: 100%; float: left; overflow: hidden; position: relative; text-align: center; cursor: default; } .mt-element-overlay .mt-overlay-2 img { display: block; position: relative; -webkit-transition: all 0.4s ease-in; transition: all 0.4s ease-in; width: 100%; height: auto; } .mt-element-overlay .mt-overlay-2 h2 { text-transform: uppercase; text-align: center; position: relative; font-size: 17px; padding: 10px; background: rgba(0, 0, 0, 0.6); } .mt-element-overlay .mt-overlay-2 .mt-info, .mt-element-overlay .mt-overlay-2 h2 { -webkit-transform: scale(0.7); -ms-transform: scale(0.7); transform: scale(0.7); -webkit-transition: all 0.4s ease-in; transition: all 0.4s ease-in; opacity: 0; filter: alpha(opacity=0); color: #fff; text-transform: uppercase; } .mt-element-overlay .mt-overlay-2 .mt-info { display: inline-block; text-decoration: none; margin: auto; position: absolute; top: 50%; -webkit-transform: scale(0.7) translateY(-50%) translateX(-50%); -ms-transform: scale(0.7) translateY(-50%) translateX(-50%); transform: scale(0.7) translateY(-50%) translateX(-50%); } .mt-element-overlay .mt-overlay-2 .mt-info:hover { box-shadow: 0 0 5px #fff; } .mt-element-overlay .mt-overlay-2:hover img { filter: url('data:image/svg+xml;charset=utf-8,#filter'); filter: blur(3px); -webkit-filter: blur(3px); -webkit-transform: scale(1.2); -ms-transform: scale(1.2); transform: scale(1.2); } .mt-element-overlay .mt-overlay-2:hover .mt-overlay { opacity: 1; filter: alpha(opacity=100); -webkit-transition-delay: 0s; transition-delay: 0s; -webkit-transform: translate(0px, 0px); -ms-transform: translate(0px, 0px); transform: translate(0px, 0px); } .mt-element-overlay .mt-overlay-2:hover h2 { -webkit-transition-delay: 0.5s; transition-delay: 0.5s; } .mt-element-overlay .mt-overlay-2:hover .mt-info, .mt-element-overlay .mt-overlay-2:hover h2 { opacity: 1; filter: alpha(opacity=100); -webkit-transform: scale(1) translateY(-50%); -ms-transform: scale(1) translateY(-50%); transform: scale(1) translateY(-50%); } .mt-element-overlay .mt-overlay-2:hover .mt-info { -webkit-transform: scale(1) translateY(-50%) translateX(-50%); -ms-transform: scale(1) translateY(-50%) translateX(-50%); transform: scale(1) translateY(-50%) translateX(-50%); } .mt-element-overlay .mt-overlay-2 .mt-overlay { width: 100%; height: 100%; position: absolute; overflow: hidden; top: 0; left: 0; } .mt-element-overlay .mt-overlay-2.mt-overlay-2-grey:hover img { filter: url('data:image/svg+xml;charset=utf-8,#filter'); filter: grayscale(1) blur(3px); -webkit-filter: grayscale(1) blur(3px); } .mt-element-overlay .mt-overlay-2.mt-overlay-2-icons .mt-info { border: none; width: 100%; padding: 0; -webkit-transform: scale(0.7) translateY(-50%) translateX(-50%); -ms-transform: scale(0.7) translateY(-50%) translateX(-50%); transform: scale(0.7) translateY(-50%) translateX(-50%); } .mt-element-overlay .mt-overlay-2.mt-overlay-2-icons .mt-info:hover { box-shadow: none; } .mt-element-overlay .mt-overlay-2.mt-overlay-2-icons .mt-info > li { list-style: none; display: inline-block; margin: 0 3px; } .mt-element-overlay .mt-overlay-2.mt-overlay-2-icons .mt-info > li:hover { -webkit-transition: all .2s ease-in-out; transition: all .2s ease-in-out; cursor: pointer; } .mt-element-overlay .mt-overlay-2.mt-overlay-2-icons:hover .mt-info { -webkit-transform: scale(1) translateY(-50%) translateX(-50%); -ms-transform: scale(1) translateY(-50%) translateX(-50%); transform: scale(1) translateY(-50%) translateX(-50%); } .mt-element-overlay .mt-overlay-3 { width: 100%; height: 100%; float: left; overflow: hidden; position: relative; text-align: center; cursor: default; } .mt-element-overlay .mt-overlay-3 img { display: block; position: relative; width: 100%; height: auto; } .mt-element-overlay .mt-overlay-3 h2 { text-transform: uppercase; color: #fff; text-align: center; position: relative; font-size: 17px; padding: 10px; background: rgba(0, 0, 0, 0.6); -webkit-transform: translateY(100px); -ms-transform: translateY(100px); transform: translateY(100px); -webkit-transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81); transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81); } .mt-element-overlay .mt-overlay-3 .mt-info { display: inline-block; text-decoration: none; text-transform: uppercase; color: #fff; border: 1px solid #fff; background-color: transparent; opacity: 0; filter: alpha(opacity=0); -webkit-transform: scale(0); -ms-transform: scale(0); transform: scale(0); -webkit-transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81); transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81); font-weight: normal; position: absolute; top: 15px; bottom: 15px; left: 15px; right: 15px; margin: auto; padding: 45% 0 0 0; } .mt-element-overlay .mt-overlay-3 .mt-info:hover { box-shadow: 0 0 5px #fff; } .mt-element-overlay .mt-overlay-3:hover .mt-overlay { background-color: rgba(48, 152, 157, 0.7); } .mt-element-overlay .mt-overlay-3:hover h2 { -webkit-transform: translateY(5px); -ms-transform: translateY(5px); transform: translateY(5px); } .mt-element-overlay .mt-overlay-3:hover .mt-info { opacity: 1; filter: alpha(opacity=100); -webkit-transform: scale(1); -ms-transform: scale(1); transform: scale(1); } .mt-element-overlay .mt-overlay-3 .mt-overlay { width: 100%; height: 100%; position: absolute; overflow: hidden; top: 0; left: 0; background-color: rgba(75, 75, 75, 0.7); -webkit-transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81); transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81); } .mt-element-overlay .mt-overlay-3.mt-overlay-3-icons .mt-info { padding: 40% 0 0 0; } .mt-element-overlay .mt-overlay-3.mt-overlay-3-icons .mt-info > li { list-style: none; display: inline-block; margin: 0 3px; } .mt-element-overlay .mt-overlay-3.mt-overlay-3-icons .mt-info > li:hover { -webkit-transition: all .2s ease-in-out; transition: all .2s ease-in-out; cursor: pointer; } .mt-element-overlay .mt-overlay-4 { width: 100%; height: 100%; float: left; overflow: hidden; position: relative; text-align: center; cursor: default; } .mt-element-overlay .mt-overlay-4 img { display: block; position: relative; -webkit-transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81); transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81); width: 100%; height: auto; } .mt-element-overlay .mt-overlay-4 h2 { text-transform: uppercase; color: #fff; text-align: center; position: relative; font-size: 17px; background: rgba(0, 0, 0, 0.6); -webkit-transform: translatey(-100px); -ms-transform: translatey(-100px); transform: translatey(-100px); -webkit-transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81); transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81); padding: 10px; } .mt-element-overlay .mt-overlay-4 .mt-info { display: inline-block; text-transform: uppercase; opacity: 0; filter: alpha(opacity=0); -webkit-transition: all 0.4s ease; transition: all 0.4s ease; margin: 50px 0 0; } .mt-element-overlay .mt-overlay-4:hover .mt-overlay { opacity: 1; filter: alpha(opacity=100); } .mt-element-overlay .mt-overlay-4:hover h2, .mt-element-overlay .mt-overlay-4:hover .mt-info { opacity: 1; filter: alpha(opacity=100); -ms-transform: translatey(0); -webkit-transform: translatey(0); transform: translatey(0); } .mt-element-overlay .mt-overlay-4:hover .mt-info { -webkit-transition-delay: .2s; transition-delay: .2s; } .mt-element-overlay .mt-overlay-4 .mt-overlay { width: 100%; height: 100%; position: absolute; overflow: hidden; top: 0; left: 0; opacity: 0; filter: alpha(opacity=0); background-color: rgba(0, 0, 0, 0.7); -webkit-transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81); transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81); } .mt-element-overlay .mt-overlay-4.mt-overlay-4-icons .mt-info { border: none; position: absolute; padding: 0; top: 50%; left: 0; right: 0; -webkit-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); margin: auto; } .mt-element-overlay .mt-overlay-4.mt-overlay-4-icons .mt-info:hover { box-shadow: none; } .mt-element-overlay .mt-overlay-4.mt-overlay-4-icons .mt-info > li { list-style: none; display: inline-block; margin: 0 3px; } .mt-element-overlay .mt-overlay-4.mt-overlay-4-icons .mt-info > li:hover { -webkit-transition: all .2s ease-in-out; transition: all .2s ease-in-out; cursor: pointer; } .mt-element-overlay .mt-overlay-5 { width: 100%; height: 100%; float: left; overflow: hidden; position: relative; text-align: center; cursor: default; background: -webkit-linear-gradient(45deg, #ff89e9 0%, #05abe0 100%); background: linear-gradient(45deg, #ff89e9 0%, #05abe0 100%); } .mt-element-overlay .mt-overlay-5 .mt-overlay { width: 100%; height: 100%; position: absolute; overflow: hidden; top: 0; left: 0; padding: 3em; text-align: left; } .mt-element-overlay .mt-overlay-5 .mt-overlay:before { position: absolute; top: 20px; right: 20px; bottom: 20px; left: 20px; border: 1px solid #fff; content: ''; opacity: 0; filter: alpha(opacity=0); -webkit-transition: opacity 0.35s, -webkit-transform 0.45s; transition: opacity 0.35s, transform 0.45s; -webkit-transform: translate3d(-20px, 0, 0); transform: translate3d(-20px, 0, 0); } .mt-element-overlay .mt-overlay-5 img { display: block; position: relative; max-width: none; width: calc(113% + 60px); -webkit-transition: opacity 0.35s, -webkit-transform 0.45s; transition: opacity 0.35s, transform 0.45s; -webkit-transform: translate3d(-40px, 0, 0); transform: translate3d(-40px, 0, 0); } .mt-element-overlay .mt-overlay-5 h2 { text-transform: uppercase; color: #fff; position: relative; font-size: 17px; background-color: transparent; padding: 15% 0 10px 0; text-align: left; } .mt-element-overlay .mt-overlay-5 a, .mt-element-overlay .mt-overlay-5 p { color: #FFF; opacity: 0; filter: alpha(opacity=0); -webkit-transition: opacity 0.35s, -webkit-transform 0.45s; transition: opacity 0.35s, transform 0.45s; -webkit-transform: translate3d(-10px, 0, 0); transform: translate3d(-10px, 0, 0); } .mt-element-overlay .mt-overlay-5 a:hover { text-decoration: none; opacity: 0.6; filter: alpha(opacity=60); } .mt-element-overlay .mt-overlay-5:hover img { opacity: 0.6; filter: alpha(opacity=60); -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } .mt-element-overlay .mt-overlay-5:hover .mt-overlay:before, .mt-element-overlay .mt-overlay-5:hover a, .mt-element-overlay .mt-overlay-5:hover p { opacity: 1; filter: alpha(opacity=100); -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } .mt-element-overlay .mt-overlay-6 { width: 100%; height: 100%; float: left; overflow: hidden; position: relative; text-align: center; cursor: default; background: #42b078; } .mt-element-overlay .mt-overlay-6 .mt-overlay { width: 100%; height: 100%; position: absolute; overflow: hidden; top: 0; left: 0; padding: 50px 20px; } .mt-element-overlay .mt-overlay-6 img { display: block; position: relative; max-width: none; width: calc(100% + 20px); -webkit-transition: opacity 0.35s, -webkit-transform 0.35s; transition: opacity 0.35s, transform 0.35s; -webkit-transform: translate3d(-10px, 0, 0); transform: translate3d(-10px, 0, 0); -webkit-backface-visibility: hidden; backface-visibility: hidden; } .mt-element-overlay .mt-overlay-6 h2 { text-transform: uppercase; color: #fff; text-align: center; position: relative; font-size: 17px; overflow: hidden; padding: 0.5em 0; background-color: transparent; } .mt-element-overlay .mt-overlay-6 h2:after { position: absolute; bottom: 0; left: 0; width: 100%; height: 2px; background: #fff; content: ''; -webkit-transition: -webkit-transform 0.35s; transition: transform 0.35s; -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); } .mt-element-overlay .mt-overlay-6 a, .mt-element-overlay .mt-overlay-6 p { color: #FFF; opacity: 0; filter: alpha(opacity=0); -webkit-transition: opacity 0.35s, -webkit-transform 0.35s; transition: opacity 0.35s, transform 0.35s; -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); } .mt-element-overlay .mt-overlay-6 p { margin-top: 20px; } .mt-element-overlay .mt-overlay-6 .mt-info:hover { text-decoration: none; opacity: 0.6; filter: alpha(opacity=60); -webkit-transition: all .2s ease-in-out; transition: all .2s ease-in-out; cursor: pointer; } .mt-element-overlay .mt-overlay-6:hover img { opacity: 0.4; filter: alpha(opacity=40); -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } .mt-element-overlay .mt-overlay-6:hover h2:after { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } .mt-element-overlay .mt-overlay-6:hover a, .mt-element-overlay .mt-overlay-6:hover p { opacity: 1; filter: alpha(opacity=100); -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } /*** Custom color buttons ***/ .bg-white { background: #ffffff !important; } .bg-white-opacity { background: rgba(255, 255, 255, 0.8) !important; } .bg-hover-white:hover { background: #ffffff !important; } .font-white { color: #ffffff !important; } .bg-font-white { color: #666 !important; } .border-white { border-color: #ffffff !important; } .border-top-white { border-top-color: #ffffff !important; } .border-bottom-white { border-bottom-color: #ffffff !important; } .border-left-white { border-left-color: #ffffff !important; } .border-right-white { border-right-color: #ffffff !important; } .bg-before-white:before, .bg-after-white:after { background: #ffffff !important; } .border-before-white:before, .border-after-white:after { border-color: #ffffff !important; } .border-top-before-white:before, .border-top-after-white:after { border-top-color: #ffffff !important; } .border-bottom-before-white:before, .border-bottom-after-white:after { border-bottom-color: #ffffff !important; } .border-left-before-white:before, .border-left-after-white:after { border-left-color: #ffffff !important; } .border-right-before-white:before, .border-right-after-white:after { border-right-color: #ffffff !important; } .bg-default { background: #e1e5ec !important; } .bg-default-opacity { background: rgba(225, 229, 236, 0.8) !important; } .bg-hover-default:hover { background: #e1e5ec !important; } .font-default { color: #e1e5ec !important; } .bg-font-default { color: #666 !important; } .border-default { border-color: #e1e5ec !important; } .border-top-default { border-top-color: #e1e5ec !important; } .border-bottom-default { border-bottom-color: #e1e5ec !important; } .border-left-default { border-left-color: #e1e5ec !important; } .border-right-default { border-right-color: #e1e5ec !important; } .bg-before-default:before, .bg-after-default:after { background: #e1e5ec !important; } .border-before-default:before, .border-after-default:after { border-color: #e1e5ec !important; } .border-top-before-default:before, .border-top-after-default:after { border-top-color: #e1e5ec !important; } .border-bottom-before-default:before, .border-bottom-after-default:after { border-bottom-color: #e1e5ec !important; } .border-left-before-default:before, .border-left-after-default:after { border-left-color: #e1e5ec !important; } .border-right-before-default:before, .border-right-after-default:after { border-right-color: #e1e5ec !important; } .bg-dark { background: #2f353b !important; } .bg-dark-opacity { background: rgba(47, 53, 59, 0.8) !important; } .bg-hover-dark:hover { background: #2f353b !important; } .font-dark { color: #2f353b !important; } .bg-font-dark { color: #FFFFFF !important; } .border-dark { border-color: #2f353b !important; } .border-top-dark { border-top-color: #2f353b !important; } .border-bottom-dark { border-bottom-color: #2f353b !important; } .border-left-dark { border-left-color: #2f353b !important; } .border-right-dark { border-right-color: #2f353b !important; } .bg-before-dark:before, .bg-after-dark:after { background: #2f353b !important; } .border-before-dark:before, .border-after-dark:after { border-color: #2f353b !important; } .border-top-before-dark:before, .border-top-after-dark:after { border-top-color: #2f353b !important; } .border-bottom-before-dark:before, .border-bottom-after-dark:after { border-bottom-color: #2f353b !important; } .border-left-before-dark:before, .border-left-after-dark:after { border-left-color: #2f353b !important; } .border-right-before-dark:before, .border-right-after-dark:after { border-right-color: #2f353b !important; } .bg-blue { background: #3598dc !important; } .bg-blue-opacity { background: rgba(53, 152, 220, 0.8) !important; } .bg-hover-blue:hover { background: #3598dc !important; } .font-blue { color: #3598dc !important; } .bg-font-blue { color: #FFFFFF !important; } .border-blue { border-color: #3598dc !important; } .border-top-blue { border-top-color: #3598dc !important; } .border-bottom-blue { border-bottom-color: #3598dc !important; } .border-left-blue { border-left-color: #3598dc !important; } .border-right-blue { border-right-color: #3598dc !important; } .bg-before-blue:before, .bg-after-blue:after { background: #3598dc !important; } .border-before-blue:before, .border-after-blue:after { border-color: #3598dc !important; } .border-top-before-blue:before, .border-top-after-blue:after { border-top-color: #3598dc !important; } .border-bottom-before-blue:before, .border-bottom-after-blue:after { border-bottom-color: #3598dc !important; } .border-left-before-blue:before, .border-left-after-blue:after { border-left-color: #3598dc !important; } .border-right-before-blue:before, .border-right-after-blue:after { border-right-color: #3598dc !important; } .bg-blue-madison { background: #578ebe !important; } .bg-blue-madison-opacity { background: rgba(87, 142, 190, 0.8) !important; } .bg-hover-blue-madison:hover { background: #578ebe !important; } .font-blue-madison { color: #578ebe !important; } .bg-font-blue-madison { color: #FFFFFF !important; } .border-blue-madison { border-color: #578ebe !important; } .border-top-blue-madison { border-top-color: #578ebe !important; } .border-bottom-blue-madison { border-bottom-color: #578ebe !important; } .border-left-blue-madison { border-left-color: #578ebe !important; } .border-right-blue-madison { border-right-color: #578ebe !important; } .bg-before-blue-madison:before, .bg-after-blue-madison:after { background: #578ebe !important; } .border-before-blue-madison:before, .border-after-blue-madison:after { border-color: #578ebe !important; } .border-top-before-blue-madison:before, .border-top-after-blue-madison:after { border-top-color: #578ebe !important; } .border-bottom-before-blue-madison:before, .border-bottom-after-blue-madison:after { border-bottom-color: #578ebe !important; } .border-left-before-blue-madison:before, .border-left-after-blue-madison:after { border-left-color: #578ebe !important; } .border-right-before-blue-madison:before, .border-right-after-blue-madison:after { border-right-color: #578ebe !important; } .bg-blue-chambray { background: #2C3E50 !important; } .bg-blue-chambray-opacity { background: rgba(44, 62, 80, 0.8) !important; } .bg-hover-blue-chambray:hover { background: #2C3E50 !important; } .font-blue-chambray { color: #2C3E50 !important; } .bg-font-blue-chambray { color: #FFFFFF !important; } .border-blue-chambray { border-color: #2C3E50 !important; } .border-top-blue-chambray { border-top-color: #2C3E50 !important; } .border-bottom-blue-chambray { border-bottom-color: #2C3E50 !important; } .border-left-blue-chambray { border-left-color: #2C3E50 !important; } .border-right-blue-chambray { border-right-color: #2C3E50 !important; } .bg-before-blue-chambray:before, .bg-after-blue-chambray:after { background: #2C3E50 !important; } .border-before-blue-chambray:before, .border-after-blue-chambray:after { border-color: #2C3E50 !important; } .border-top-before-blue-chambray:before, .border-top-after-blue-chambray:after { border-top-color: #2C3E50 !important; } .border-bottom-before-blue-chambray:before, .border-bottom-after-blue-chambray:after { border-bottom-color: #2C3E50 !important; } .border-left-before-blue-chambray:before, .border-left-after-blue-chambray:after { border-left-color: #2C3E50 !important; } .border-right-before-blue-chambray:before, .border-right-after-blue-chambray:after { border-right-color: #2C3E50 !important; } .bg-blue-ebonyclay { background: #22313F !important; } .bg-blue-ebonyclay-opacity { background: rgba(34, 49, 63, 0.8) !important; } .bg-hover-blue-ebonyclay:hover { background: #22313F !important; } .font-blue-ebonyclay { color: #22313F !important; } .bg-font-blue-ebonyclay { color: #FFFFFF !important; } .border-blue-ebonyclay { border-color: #22313F !important; } .border-top-blue-ebonyclay { border-top-color: #22313F !important; } .border-bottom-blue-ebonyclay { border-bottom-color: #22313F !important; } .border-left-blue-ebonyclay { border-left-color: #22313F !important; } .border-right-blue-ebonyclay { border-right-color: #22313F !important; } .bg-before-blue-ebonyclay:before, .bg-after-blue-ebonyclay:after { background: #22313F !important; } .border-before-blue-ebonyclay:before, .border-after-blue-ebonyclay:after { border-color: #22313F !important; } .border-top-before-blue-ebonyclay:before, .border-top-after-blue-ebonyclay:after { border-top-color: #22313F !important; } .border-bottom-before-blue-ebonyclay:before, .border-bottom-after-blue-ebonyclay:after { border-bottom-color: #22313F !important; } .border-left-before-blue-ebonyclay:before, .border-left-after-blue-ebonyclay:after { border-left-color: #22313F !important; } .border-right-before-blue-ebonyclay:before, .border-right-after-blue-ebonyclay:after { border-right-color: #22313F !important; } .bg-blue-hoki { background: #67809F !important; } .bg-blue-hoki-opacity { background: rgba(103, 128, 159, 0.8) !important; } .bg-hover-blue-hoki:hover { background: #67809F !important; } .font-blue-hoki { color: #67809F !important; } .bg-font-blue-hoki { color: #FFFFFF !important; } .border-blue-hoki { border-color: #67809F !important; } .border-top-blue-hoki { border-top-color: #67809F !important; } .border-bottom-blue-hoki { border-bottom-color: #67809F !important; } .border-left-blue-hoki { border-left-color: #67809F !important; } .border-right-blue-hoki { border-right-color: #67809F !important; } .bg-before-blue-hoki:before, .bg-after-blue-hoki:after { background: #67809F !important; } .border-before-blue-hoki:before, .border-after-blue-hoki:after { border-color: #67809F !important; } .border-top-before-blue-hoki:before, .border-top-after-blue-hoki:after { border-top-color: #67809F !important; } .border-bottom-before-blue-hoki:before, .border-bottom-after-blue-hoki:after { border-bottom-color: #67809F !important; } .border-left-before-blue-hoki:before, .border-left-after-blue-hoki:after { border-left-color: #67809F !important; } .border-right-before-blue-hoki:before, .border-right-after-blue-hoki:after { border-right-color: #67809F !important; } .bg-blue-steel { background: #4B77BE !important; } .bg-blue-steel-opacity { background: rgba(75, 119, 190, 0.8) !important; } .bg-hover-blue-steel:hover { background: #4B77BE !important; } .font-blue-steel { color: #4B77BE !important; } .bg-font-blue-steel { color: #FFFFFF !important; } .border-blue-steel { border-color: #4B77BE !important; } .border-top-blue-steel { border-top-color: #4B77BE !important; } .border-bottom-blue-steel { border-bottom-color: #4B77BE !important; } .border-left-blue-steel { border-left-color: #4B77BE !important; } .border-right-blue-steel { border-right-color: #4B77BE !important; } .bg-before-blue-steel:before, .bg-after-blue-steel:after { background: #4B77BE !important; } .border-before-blue-steel:before, .border-after-blue-steel:after { border-color: #4B77BE !important; } .border-top-before-blue-steel:before, .border-top-after-blue-steel:after { border-top-color: #4B77BE !important; } .border-bottom-before-blue-steel:before, .border-bottom-after-blue-steel:after { border-bottom-color: #4B77BE !important; } .border-left-before-blue-steel:before, .border-left-after-blue-steel:after { border-left-color: #4B77BE !important; } .border-right-before-blue-steel:before, .border-right-after-blue-steel:after { border-right-color: #4B77BE !important; } .bg-blue-soft { background: #4c87b9 !important; } .bg-blue-soft-opacity { background: rgba(76, 135, 185, 0.8) !important; } .bg-hover-blue-soft:hover { background: #4c87b9 !important; } .font-blue-soft { color: #4c87b9 !important; } .bg-font-blue-soft { color: #FFFFFF !important; } .border-blue-soft { border-color: #4c87b9 !important; } .border-top-blue-soft { border-top-color: #4c87b9 !important; } .border-bottom-blue-soft { border-bottom-color: #4c87b9 !important; } .border-left-blue-soft { border-left-color: #4c87b9 !important; } .border-right-blue-soft { border-right-color: #4c87b9 !important; } .bg-before-blue-soft:before, .bg-after-blue-soft:after { background: #4c87b9 !important; } .border-before-blue-soft:before, .border-after-blue-soft:after { border-color: #4c87b9 !important; } .border-top-before-blue-soft:before, .border-top-after-blue-soft:after { border-top-color: #4c87b9 !important; } .border-bottom-before-blue-soft:before, .border-bottom-after-blue-soft:after { border-bottom-color: #4c87b9 !important; } .border-left-before-blue-soft:before, .border-left-after-blue-soft:after { border-left-color: #4c87b9 !important; } .border-right-before-blue-soft:before, .border-right-after-blue-soft:after { border-right-color: #4c87b9 !important; } .bg-blue-dark { background: #5e738b !important; } .bg-blue-dark-opacity { background: rgba(94, 115, 139, 0.8) !important; } .bg-hover-blue-dark:hover { background: #5e738b !important; } .font-blue-dark { color: #5e738b !important; } .bg-font-blue-dark { color: #FFFFFF !important; } .border-blue-dark { border-color: #5e738b !important; } .border-top-blue-dark { border-top-color: #5e738b !important; } .border-bottom-blue-dark { border-bottom-color: #5e738b !important; } .border-left-blue-dark { border-left-color: #5e738b !important; } .border-right-blue-dark { border-right-color: #5e738b !important; } .bg-before-blue-dark:before, .bg-after-blue-dark:after { background: #5e738b !important; } .border-before-blue-dark:before, .border-after-blue-dark:after { border-color: #5e738b !important; } .border-top-before-blue-dark:before, .border-top-after-blue-dark:after { border-top-color: #5e738b !important; } .border-bottom-before-blue-dark:before, .border-bottom-after-blue-dark:after { border-bottom-color: #5e738b !important; } .border-left-before-blue-dark:before, .border-left-after-blue-dark:after { border-left-color: #5e738b !important; } .border-right-before-blue-dark:before, .border-right-after-blue-dark:after { border-right-color: #5e738b !important; } .bg-blue-sharp { background: #5C9BD1 !important; } .bg-blue-sharp-opacity { background: rgba(92, 155, 209, 0.8) !important; } .bg-hover-blue-sharp:hover { background: #5C9BD1 !important; } .font-blue-sharp { color: #5C9BD1 !important; } .bg-font-blue-sharp { color: #FFFFFF !important; } .border-blue-sharp { border-color: #5C9BD1 !important; } .border-top-blue-sharp { border-top-color: #5C9BD1 !important; } .border-bottom-blue-sharp { border-bottom-color: #5C9BD1 !important; } .border-left-blue-sharp { border-left-color: #5C9BD1 !important; } .border-right-blue-sharp { border-right-color: #5C9BD1 !important; } .bg-before-blue-sharp:before, .bg-after-blue-sharp:after { background: #5C9BD1 !important; } .border-before-blue-sharp:before, .border-after-blue-sharp:after { border-color: #5C9BD1 !important; } .border-top-before-blue-sharp:before, .border-top-after-blue-sharp:after { border-top-color: #5C9BD1 !important; } .border-bottom-before-blue-sharp:before, .border-bottom-after-blue-sharp:after { border-bottom-color: #5C9BD1 !important; } .border-left-before-blue-sharp:before, .border-left-after-blue-sharp:after { border-left-color: #5C9BD1 !important; } .border-right-before-blue-sharp:before, .border-right-after-blue-sharp:after { border-right-color: #5C9BD1 !important; } .bg-green { background: #32c5d2 !important; } .bg-green-opacity { background: rgba(50, 197, 210, 0.8) !important; } .bg-hover-green:hover { background: #32c5d2 !important; } .font-green { color: #32c5d2 !important; } .bg-font-green { color: #FFFFFF !important; } .border-green { border-color: #32c5d2 !important; } .border-top-green { border-top-color: #32c5d2 !important; } .border-bottom-green { border-bottom-color: #32c5d2 !important; } .border-left-green { border-left-color: #32c5d2 !important; } .border-right-green { border-right-color: #32c5d2 !important; } .bg-before-green:before, .bg-after-green:after { background: #32c5d2 !important; } .border-before-green:before, .border-after-green:after { border-color: #32c5d2 !important; } .border-top-before-green:before, .border-top-after-green:after { border-top-color: #32c5d2 !important; } .border-bottom-before-green:before, .border-bottom-after-green:after { border-bottom-color: #32c5d2 !important; } .border-left-before-green:before, .border-left-after-green:after { border-left-color: #32c5d2 !important; } .border-right-before-green:before, .border-right-after-green:after { border-right-color: #32c5d2 !important; } .bg-green-meadow { background: #1BBC9B !important; } .bg-green-meadow-opacity { background: rgba(27, 188, 155, 0.8) !important; } .bg-hover-green-meadow:hover { background: #1BBC9B !important; } .font-green-meadow { color: #1BBC9B !important; } .bg-font-green-meadow { color: #FFFFFF !important; } .border-green-meadow { border-color: #1BBC9B !important; } .border-top-green-meadow { border-top-color: #1BBC9B !important; } .border-bottom-green-meadow { border-bottom-color: #1BBC9B !important; } .border-left-green-meadow { border-left-color: #1BBC9B !important; } .border-right-green-meadow { border-right-color: #1BBC9B !important; } .bg-before-green-meadow:before, .bg-after-green-meadow:after { background: #1BBC9B !important; } .border-before-green-meadow:before, .border-after-green-meadow:after { border-color: #1BBC9B !important; } .border-top-before-green-meadow:before, .border-top-after-green-meadow:after { border-top-color: #1BBC9B !important; } .border-bottom-before-green-meadow:before, .border-bottom-after-green-meadow:after { border-bottom-color: #1BBC9B !important; } .border-left-before-green-meadow:before, .border-left-after-green-meadow:after { border-left-color: #1BBC9B !important; } .border-right-before-green-meadow:before, .border-right-after-green-meadow:after { border-right-color: #1BBC9B !important; } .bg-green-seagreen { background: #1BA39C !important; } .bg-green-seagreen-opacity { background: rgba(27, 163, 156, 0.8) !important; } .bg-hover-green-seagreen:hover { background: #1BA39C !important; } .font-green-seagreen { color: #1BA39C !important; } .bg-font-green-seagreen { color: #FFFFFF !important; } .border-green-seagreen { border-color: #1BA39C !important; } .border-top-green-seagreen { border-top-color: #1BA39C !important; } .border-bottom-green-seagreen { border-bottom-color: #1BA39C !important; } .border-left-green-seagreen { border-left-color: #1BA39C !important; } .border-right-green-seagreen { border-right-color: #1BA39C !important; } .bg-before-green-seagreen:before, .bg-after-green-seagreen:after { background: #1BA39C !important; } .border-before-green-seagreen:before, .border-after-green-seagreen:after { border-color: #1BA39C !important; } .border-top-before-green-seagreen:before, .border-top-after-green-seagreen:after { border-top-color: #1BA39C !important; } .border-bottom-before-green-seagreen:before, .border-bottom-after-green-seagreen:after { border-bottom-color: #1BA39C !important; } .border-left-before-green-seagreen:before, .border-left-after-green-seagreen:after { border-left-color: #1BA39C !important; } .border-right-before-green-seagreen:before, .border-right-after-green-seagreen:after { border-right-color: #1BA39C !important; } .bg-green-turquoise { background: #36D7B7 !important; } .bg-green-turquoise-opacity { background: rgba(54, 215, 183, 0.8) !important; } .bg-hover-green-turquoise:hover { background: #36D7B7 !important; } .font-green-turquoise { color: #36D7B7 !important; } .bg-font-green-turquoise { color: #FFFFFF !important; } .border-green-turquoise { border-color: #36D7B7 !important; } .border-top-green-turquoise { border-top-color: #36D7B7 !important; } .border-bottom-green-turquoise { border-bottom-color: #36D7B7 !important; } .border-left-green-turquoise { border-left-color: #36D7B7 !important; } .border-right-green-turquoise { border-right-color: #36D7B7 !important; } .bg-before-green-turquoise:before, .bg-after-green-turquoise:after { background: #36D7B7 !important; } .border-before-green-turquoise:before, .border-after-green-turquoise:after { border-color: #36D7B7 !important; } .border-top-before-green-turquoise:before, .border-top-after-green-turquoise:after { border-top-color: #36D7B7 !important; } .border-bottom-before-green-turquoise:before, .border-bottom-after-green-turquoise:after { border-bottom-color: #36D7B7 !important; } .border-left-before-green-turquoise:before, .border-left-after-green-turquoise:after { border-left-color: #36D7B7 !important; } .border-right-before-green-turquoise:before, .border-right-after-green-turquoise:after { border-right-color: #36D7B7 !important; } .bg-green-haze { background: #44b6ae !important; } .bg-green-haze-opacity { background: rgba(68, 182, 174, 0.8) !important; } .bg-hover-green-haze:hover { background: #44b6ae !important; } .font-green-haze { color: #44b6ae !important; } .bg-font-green-haze { color: #FFFFFF !important; } .border-green-haze { border-color: #44b6ae !important; } .border-top-green-haze { border-top-color: #44b6ae !important; } .border-bottom-green-haze { border-bottom-color: #44b6ae !important; } .border-left-green-haze { border-left-color: #44b6ae !important; } .border-right-green-haze { border-right-color: #44b6ae !important; } .bg-before-green-haze:before, .bg-after-green-haze:after { background: #44b6ae !important; } .border-before-green-haze:before, .border-after-green-haze:after { border-color: #44b6ae !important; } .border-top-before-green-haze:before, .border-top-after-green-haze:after { border-top-color: #44b6ae !important; } .border-bottom-before-green-haze:before, .border-bottom-after-green-haze:after { border-bottom-color: #44b6ae !important; } .border-left-before-green-haze:before, .border-left-after-green-haze:after { border-left-color: #44b6ae !important; } .border-right-before-green-haze:before, .border-right-after-green-haze:after { border-right-color: #44b6ae !important; } .bg-green-jungle { background: #26C281 !important; } .bg-green-jungle-opacity { background: rgba(38, 194, 129, 0.8) !important; } .bg-hover-green-jungle:hover { background: #26C281 !important; } .font-green-jungle { color: #26C281 !important; } .bg-font-green-jungle { color: #FFFFFF !important; } .border-green-jungle { border-color: #26C281 !important; } .border-top-green-jungle { border-top-color: #26C281 !important; } .border-bottom-green-jungle { border-bottom-color: #26C281 !important; } .border-left-green-jungle { border-left-color: #26C281 !important; } .border-right-green-jungle { border-right-color: #26C281 !important; } .bg-before-green-jungle:before, .bg-after-green-jungle:after { background: #26C281 !important; } .border-before-green-jungle:before, .border-after-green-jungle:after { border-color: #26C281 !important; } .border-top-before-green-jungle:before, .border-top-after-green-jungle:after { border-top-color: #26C281 !important; } .border-bottom-before-green-jungle:before, .border-bottom-after-green-jungle:after { border-bottom-color: #26C281 !important; } .border-left-before-green-jungle:before, .border-left-after-green-jungle:after { border-left-color: #26C281 !important; } .border-right-before-green-jungle:before, .border-right-after-green-jungle:after { border-right-color: #26C281 !important; } .bg-green-soft { background: #3faba4 !important; } .bg-green-soft-opacity { background: rgba(63, 171, 164, 0.8) !important; } .bg-hover-green-soft:hover { background: #3faba4 !important; } .font-green-soft { color: #3faba4 !important; } .bg-font-green-soft { color: #FFFFFF !important; } .border-green-soft { border-color: #3faba4 !important; } .border-top-green-soft { border-top-color: #3faba4 !important; } .border-bottom-green-soft { border-bottom-color: #3faba4 !important; } .border-left-green-soft { border-left-color: #3faba4 !important; } .border-right-green-soft { border-right-color: #3faba4 !important; } .bg-before-green-soft:before, .bg-after-green-soft:after { background: #3faba4 !important; } .border-before-green-soft:before, .border-after-green-soft:after { border-color: #3faba4 !important; } .border-top-before-green-soft:before, .border-top-after-green-soft:after { border-top-color: #3faba4 !important; } .border-bottom-before-green-soft:before, .border-bottom-after-green-soft:after { border-bottom-color: #3faba4 !important; } .border-left-before-green-soft:before, .border-left-after-green-soft:after { border-left-color: #3faba4 !important; } .border-right-before-green-soft:before, .border-right-after-green-soft:after { border-right-color: #3faba4 !important; } .bg-green-dark { background: #4DB3A2 !important; } .bg-green-dark-opacity { background: rgba(77, 179, 162, 0.8) !important; } .bg-hover-green-dark:hover { background: #4DB3A2 !important; } .font-green-dark { color: #4DB3A2 !important; } .bg-font-green-dark { color: #FFFFFF !important; } .border-green-dark { border-color: #4DB3A2 !important; } .border-top-green-dark { border-top-color: #4DB3A2 !important; } .border-bottom-green-dark { border-bottom-color: #4DB3A2 !important; } .border-left-green-dark { border-left-color: #4DB3A2 !important; } .border-right-green-dark { border-right-color: #4DB3A2 !important; } .bg-before-green-dark:before, .bg-after-green-dark:after { background: #4DB3A2 !important; } .border-before-green-dark:before, .border-after-green-dark:after { border-color: #4DB3A2 !important; } .border-top-before-green-dark:before, .border-top-after-green-dark:after { border-top-color: #4DB3A2 !important; } .border-bottom-before-green-dark:before, .border-bottom-after-green-dark:after { border-bottom-color: #4DB3A2 !important; } .border-left-before-green-dark:before, .border-left-after-green-dark:after { border-left-color: #4DB3A2 !important; } .border-right-before-green-dark:before, .border-right-after-green-dark:after { border-right-color: #4DB3A2 !important; } .bg-green-sharp { background: #2ab4c0 !important; } .bg-green-sharp-opacity { background: rgba(42, 180, 192, 0.8) !important; } .bg-hover-green-sharp:hover { background: #2ab4c0 !important; } .font-green-sharp { color: #2ab4c0 !important; } .bg-font-green-sharp { color: #FFFFFF !important; } .border-green-sharp { border-color: #2ab4c0 !important; } .border-top-green-sharp { border-top-color: #2ab4c0 !important; } .border-bottom-green-sharp { border-bottom-color: #2ab4c0 !important; } .border-left-green-sharp { border-left-color: #2ab4c0 !important; } .border-right-green-sharp { border-right-color: #2ab4c0 !important; } .bg-before-green-sharp:before, .bg-after-green-sharp:after { background: #2ab4c0 !important; } .border-before-green-sharp:before, .border-after-green-sharp:after { border-color: #2ab4c0 !important; } .border-top-before-green-sharp:before, .border-top-after-green-sharp:after { border-top-color: #2ab4c0 !important; } .border-bottom-before-green-sharp:before, .border-bottom-after-green-sharp:after { border-bottom-color: #2ab4c0 !important; } .border-left-before-green-sharp:before, .border-left-after-green-sharp:after { border-left-color: #2ab4c0 !important; } .border-right-before-green-sharp:before, .border-right-after-green-sharp:after { border-right-color: #2ab4c0 !important; } .bg-grey { background: #E5E5E5 !important; } .bg-grey-opacity { background: rgba(229, 229, 229, 0.8) !important; } .bg-hover-grey:hover { background: #E5E5E5 !important; } .font-grey { color: #E5E5E5 !important; } .bg-font-grey { color: #333333 !important; } .border-grey { border-color: #E5E5E5 !important; } .border-top-grey { border-top-color: #E5E5E5 !important; } .border-bottom-grey { border-bottom-color: #E5E5E5 !important; } .border-left-grey { border-left-color: #E5E5E5 !important; } .border-right-grey { border-right-color: #E5E5E5 !important; } .bg-before-grey:before, .bg-after-grey:after { background: #E5E5E5 !important; } .border-before-grey:before, .border-after-grey:after { border-color: #E5E5E5 !important; } .border-top-before-grey:before, .border-top-after-grey:after { border-top-color: #E5E5E5 !important; } .border-bottom-before-grey:before, .border-bottom-after-grey:after { border-bottom-color: #E5E5E5 !important; } .border-left-before-grey:before, .border-left-after-grey:after { border-left-color: #E5E5E5 !important; } .border-right-before-grey:before, .border-right-after-grey:after { border-right-color: #E5E5E5 !important; } .bg-grey-steel { background: #e9edef !important; } .bg-grey-steel-opacity { background: rgba(233, 237, 239, 0.8) !important; } .bg-hover-grey-steel:hover { background: #e9edef !important; } .font-grey-steel { color: #e9edef !important; } .bg-font-grey-steel { color: #80898e !important; } .border-grey-steel { border-color: #e9edef !important; } .border-top-grey-steel { border-top-color: #e9edef !important; } .border-bottom-grey-steel { border-bottom-color: #e9edef !important; } .border-left-grey-steel { border-left-color: #e9edef !important; } .border-right-grey-steel { border-right-color: #e9edef !important; } .bg-before-grey-steel:before, .bg-after-grey-steel:after { background: #e9edef !important; } .border-before-grey-steel:before, .border-after-grey-steel:after { border-color: #e9edef !important; } .border-top-before-grey-steel:before, .border-top-after-grey-steel:after { border-top-color: #e9edef !important; } .border-bottom-before-grey-steel:before, .border-bottom-after-grey-steel:after { border-bottom-color: #e9edef !important; } .border-left-before-grey-steel:before, .border-left-after-grey-steel:after { border-left-color: #e9edef !important; } .border-right-before-grey-steel:before, .border-right-after-grey-steel:after { border-right-color: #e9edef !important; } .bg-grey-cararra { background: #fafafa !important; } .bg-grey-cararra-opacity { background: rgba(250, 250, 250, 0.8) !important; } .bg-hover-grey-cararra:hover { background: #fafafa !important; } .font-grey-cararra { color: #fafafa !important; } .bg-font-grey-cararra { color: #333333 !important; } .border-grey-cararra { border-color: #fafafa !important; } .border-top-grey-cararra { border-top-color: #fafafa !important; } .border-bottom-grey-cararra { border-bottom-color: #fafafa !important; } .border-left-grey-cararra { border-left-color: #fafafa !important; } .border-right-grey-cararra { border-right-color: #fafafa !important; } .bg-before-grey-cararra:before, .bg-after-grey-cararra:after { background: #fafafa !important; } .border-before-grey-cararra:before, .border-after-grey-cararra:after { border-color: #fafafa !important; } .border-top-before-grey-cararra:before, .border-top-after-grey-cararra:after { border-top-color: #fafafa !important; } .border-bottom-before-grey-cararra:before, .border-bottom-after-grey-cararra:after { border-bottom-color: #fafafa !important; } .border-left-before-grey-cararra:before, .border-left-after-grey-cararra:after { border-left-color: #fafafa !important; } .border-right-before-grey-cararra:before, .border-right-after-grey-cararra:after { border-right-color: #fafafa !important; } .bg-grey-gallery { background: #555555 !important; } .bg-grey-gallery-opacity { background: rgba(85, 85, 85, 0.8) !important; } .bg-hover-grey-gallery:hover { background: #555555 !important; } .font-grey-gallery { color: #555555 !important; } .bg-font-grey-gallery { color: #ffffff !important; } .border-grey-gallery { border-color: #555555 !important; } .border-top-grey-gallery { border-top-color: #555555 !important; } .border-bottom-grey-gallery { border-bottom-color: #555555 !important; } .border-left-grey-gallery { border-left-color: #555555 !important; } .border-right-grey-gallery { border-right-color: #555555 !important; } .bg-before-grey-gallery:before, .bg-after-grey-gallery:after { background: #555555 !important; } .border-before-grey-gallery:before, .border-after-grey-gallery:after { border-color: #555555 !important; } .border-top-before-grey-gallery:before, .border-top-after-grey-gallery:after { border-top-color: #555555 !important; } .border-bottom-before-grey-gallery:before, .border-bottom-after-grey-gallery:after { border-bottom-color: #555555 !important; } .border-left-before-grey-gallery:before, .border-left-after-grey-gallery:after { border-left-color: #555555 !important; } .border-right-before-grey-gallery:before, .border-right-after-grey-gallery:after { border-right-color: #555555 !important; } .bg-grey-cascade { background: #95A5A6 !important; } .bg-grey-cascade-opacity { background: rgba(149, 165, 166, 0.8) !important; } .bg-hover-grey-cascade:hover { background: #95A5A6 !important; } .font-grey-cascade { color: #95A5A6 !important; } .bg-font-grey-cascade { color: #FFFFFF !important; } .border-grey-cascade { border-color: #95A5A6 !important; } .border-top-grey-cascade { border-top-color: #95A5A6 !important; } .border-bottom-grey-cascade { border-bottom-color: #95A5A6 !important; } .border-left-grey-cascade { border-left-color: #95A5A6 !important; } .border-right-grey-cascade { border-right-color: #95A5A6 !important; } .bg-before-grey-cascade:before, .bg-after-grey-cascade:after { background: #95A5A6 !important; } .border-before-grey-cascade:before, .border-after-grey-cascade:after { border-color: #95A5A6 !important; } .border-top-before-grey-cascade:before, .border-top-after-grey-cascade:after { border-top-color: #95A5A6 !important; } .border-bottom-before-grey-cascade:before, .border-bottom-after-grey-cascade:after { border-bottom-color: #95A5A6 !important; } .border-left-before-grey-cascade:before, .border-left-after-grey-cascade:after { border-left-color: #95A5A6 !important; } .border-right-before-grey-cascade:before, .border-right-after-grey-cascade:after { border-right-color: #95A5A6 !important; } .bg-grey-silver { background: #BFBFBF !important; } .bg-grey-silver-opacity { background: rgba(191, 191, 191, 0.8) !important; } .bg-hover-grey-silver:hover { background: #BFBFBF !important; } .font-grey-silver { color: #BFBFBF !important; } .bg-font-grey-silver { color: #FAFCFB !important; } .border-grey-silver { border-color: #BFBFBF !important; } .border-top-grey-silver { border-top-color: #BFBFBF !important; } .border-bottom-grey-silver { border-bottom-color: #BFBFBF !important; } .border-left-grey-silver { border-left-color: #BFBFBF !important; } .border-right-grey-silver { border-right-color: #BFBFBF !important; } .bg-before-grey-silver:before, .bg-after-grey-silver:after { background: #BFBFBF !important; } .border-before-grey-silver:before, .border-after-grey-silver:after { border-color: #BFBFBF !important; } .border-top-before-grey-silver:before, .border-top-after-grey-silver:after { border-top-color: #BFBFBF !important; } .border-bottom-before-grey-silver:before, .border-bottom-after-grey-silver:after { border-bottom-color: #BFBFBF !important; } .border-left-before-grey-silver:before, .border-left-after-grey-silver:after { border-left-color: #BFBFBF !important; } .border-right-before-grey-silver:before, .border-right-after-grey-silver:after { border-right-color: #BFBFBF !important; } .bg-grey-salsa { background: #ACB5C3 !important; } .bg-grey-salsa-opacity { background: rgba(172, 181, 195, 0.8) !important; } .bg-hover-grey-salsa:hover { background: #ACB5C3 !important; } .font-grey-salsa { color: #ACB5C3 !important; } .bg-font-grey-salsa { color: #FAFCFB !important; } .border-grey-salsa { border-color: #ACB5C3 !important; } .border-top-grey-salsa { border-top-color: #ACB5C3 !important; } .border-bottom-grey-salsa { border-bottom-color: #ACB5C3 !important; } .border-left-grey-salsa { border-left-color: #ACB5C3 !important; } .border-right-grey-salsa { border-right-color: #ACB5C3 !important; } .bg-before-grey-salsa:before, .bg-after-grey-salsa:after { background: #ACB5C3 !important; } .border-before-grey-salsa:before, .border-after-grey-salsa:after { border-color: #ACB5C3 !important; } .border-top-before-grey-salsa:before, .border-top-after-grey-salsa:after { border-top-color: #ACB5C3 !important; } .border-bottom-before-grey-salsa:before, .border-bottom-after-grey-salsa:after { border-bottom-color: #ACB5C3 !important; } .border-left-before-grey-salsa:before, .border-left-after-grey-salsa:after { border-left-color: #ACB5C3 !important; } .border-right-before-grey-salsa:before, .border-right-after-grey-salsa:after { border-right-color: #ACB5C3 !important; } .bg-grey-salt { background: #bfcad1 !important; } .bg-grey-salt-opacity { background: rgba(191, 202, 209, 0.8) !important; } .bg-hover-grey-salt:hover { background: #bfcad1 !important; } .font-grey-salt { color: #bfcad1 !important; } .bg-font-grey-salt { color: #FAFCFB !important; } .border-grey-salt { border-color: #bfcad1 !important; } .border-top-grey-salt { border-top-color: #bfcad1 !important; } .border-bottom-grey-salt { border-bottom-color: #bfcad1 !important; } .border-left-grey-salt { border-left-color: #bfcad1 !important; } .border-right-grey-salt { border-right-color: #bfcad1 !important; } .bg-before-grey-salt:before, .bg-after-grey-salt:after { background: #bfcad1 !important; } .border-before-grey-salt:before, .border-after-grey-salt:after { border-color: #bfcad1 !important; } .border-top-before-grey-salt:before, .border-top-after-grey-salt:after { border-top-color: #bfcad1 !important; } .border-bottom-before-grey-salt:before, .border-bottom-after-grey-salt:after { border-bottom-color: #bfcad1 !important; } .border-left-before-grey-salt:before, .border-left-after-grey-salt:after { border-left-color: #bfcad1 !important; } .border-right-before-grey-salt:before, .border-right-after-grey-salt:after { border-right-color: #bfcad1 !important; } .bg-grey-mint { background: #525e64 !important; } .bg-grey-mint-opacity { background: rgba(82, 94, 100, 0.8) !important; } .bg-hover-grey-mint:hover { background: #525e64 !important; } .font-grey-mint { color: #525e64 !important; } .bg-font-grey-mint { color: #FFFFFF !important; } .border-grey-mint { border-color: #525e64 !important; } .border-top-grey-mint { border-top-color: #525e64 !important; } .border-bottom-grey-mint { border-bottom-color: #525e64 !important; } .border-left-grey-mint { border-left-color: #525e64 !important; } .border-right-grey-mint { border-right-color: #525e64 !important; } .bg-before-grey-mint:before, .bg-after-grey-mint:after { background: #525e64 !important; } .border-before-grey-mint:before, .border-after-grey-mint:after { border-color: #525e64 !important; } .border-top-before-grey-mint:before, .border-top-after-grey-mint:after { border-top-color: #525e64 !important; } .border-bottom-before-grey-mint:before, .border-bottom-after-grey-mint:after { border-bottom-color: #525e64 !important; } .border-left-before-grey-mint:before, .border-left-after-grey-mint:after { border-left-color: #525e64 !important; } .border-right-before-grey-mint:before, .border-right-after-grey-mint:after { border-right-color: #525e64 !important; } .bg-red { background: #e7505a !important; } .bg-red-opacity { background: rgba(231, 80, 90, 0.8) !important; } .bg-hover-red:hover { background: #e7505a !important; } .font-red { color: #e7505a !important; } .bg-font-red { color: #ffffff !important; } .border-red { border-color: #e7505a !important; } .border-top-red { border-top-color: #e7505a !important; } .border-bottom-red { border-bottom-color: #e7505a !important; } .border-left-red { border-left-color: #e7505a !important; } .border-right-red { border-right-color: #e7505a !important; } .bg-before-red:before, .bg-after-red:after { background: #e7505a !important; } .border-before-red:before, .border-after-red:after { border-color: #e7505a !important; } .border-top-before-red:before, .border-top-after-red:after { border-top-color: #e7505a !important; } .border-bottom-before-red:before, .border-bottom-after-red:after { border-bottom-color: #e7505a !important; } .border-left-before-red:before, .border-left-after-red:after { border-left-color: #e7505a !important; } .border-right-before-red:before, .border-right-after-red:after { border-right-color: #e7505a !important; } .bg-red-pink { background: #E08283 !important; } .bg-red-pink-opacity { background: rgba(224, 130, 131, 0.8) !important; } .bg-hover-red-pink:hover { background: #E08283 !important; } .font-red-pink { color: #E08283 !important; } .bg-font-red-pink { color: #ffffff !important; } .border-red-pink { border-color: #E08283 !important; } .border-top-red-pink { border-top-color: #E08283 !important; } .border-bottom-red-pink { border-bottom-color: #E08283 !important; } .border-left-red-pink { border-left-color: #E08283 !important; } .border-right-red-pink { border-right-color: #E08283 !important; } .bg-before-red-pink:before, .bg-after-red-pink:after { background: #E08283 !important; } .border-before-red-pink:before, .border-after-red-pink:after { border-color: #E08283 !important; } .border-top-before-red-pink:before, .border-top-after-red-pink:after { border-top-color: #E08283 !important; } .border-bottom-before-red-pink:before, .border-bottom-after-red-pink:after { border-bottom-color: #E08283 !important; } .border-left-before-red-pink:before, .border-left-after-red-pink:after { border-left-color: #E08283 !important; } .border-right-before-red-pink:before, .border-right-after-red-pink:after { border-right-color: #E08283 !important; } .bg-red-sunglo { background: #E26A6A !important; } .bg-red-sunglo-opacity { background: rgba(226, 106, 106, 0.8) !important; } .bg-hover-red-sunglo:hover { background: #E26A6A !important; } .font-red-sunglo { color: #E26A6A !important; } .bg-font-red-sunglo { color: #ffffff !important; } .border-red-sunglo { border-color: #E26A6A !important; } .border-top-red-sunglo { border-top-color: #E26A6A !important; } .border-bottom-red-sunglo { border-bottom-color: #E26A6A !important; } .border-left-red-sunglo { border-left-color: #E26A6A !important; } .border-right-red-sunglo { border-right-color: #E26A6A !important; } .bg-before-red-sunglo:before, .bg-after-red-sunglo:after { background: #E26A6A !important; } .border-before-red-sunglo:before, .border-after-red-sunglo:after { border-color: #E26A6A !important; } .border-top-before-red-sunglo:before, .border-top-after-red-sunglo:after { border-top-color: #E26A6A !important; } .border-bottom-before-red-sunglo:before, .border-bottom-after-red-sunglo:after { border-bottom-color: #E26A6A !important; } .border-left-before-red-sunglo:before, .border-left-after-red-sunglo:after { border-left-color: #E26A6A !important; } .border-right-before-red-sunglo:before, .border-right-after-red-sunglo:after { border-right-color: #E26A6A !important; } .bg-red-intense { background: #e35b5a !important; } .bg-red-intense-opacity { background: rgba(227, 91, 90, 0.8) !important; } .bg-hover-red-intense:hover { background: #e35b5a !important; } .font-red-intense { color: #e35b5a !important; } .bg-font-red-intense { color: #ffffff !important; } .border-red-intense { border-color: #e35b5a !important; } .border-top-red-intense { border-top-color: #e35b5a !important; } .border-bottom-red-intense { border-bottom-color: #e35b5a !important; } .border-left-red-intense { border-left-color: #e35b5a !important; } .border-right-red-intense { border-right-color: #e35b5a !important; } .bg-before-red-intense:before, .bg-after-red-intense:after { background: #e35b5a !important; } .border-before-red-intense:before, .border-after-red-intense:after { border-color: #e35b5a !important; } .border-top-before-red-intense:before, .border-top-after-red-intense:after { border-top-color: #e35b5a !important; } .border-bottom-before-red-intense:before, .border-bottom-after-red-intense:after { border-bottom-color: #e35b5a !important; } .border-left-before-red-intense:before, .border-left-after-red-intense:after { border-left-color: #e35b5a !important; } .border-right-before-red-intense:before, .border-right-after-red-intense:after { border-right-color: #e35b5a !important; } .bg-red-thunderbird { background: #D91E18 !important; } .bg-red-thunderbird-opacity { background: rgba(217, 30, 24, 0.8) !important; } .bg-hover-red-thunderbird:hover { background: #D91E18 !important; } .font-red-thunderbird { color: #D91E18 !important; } .bg-font-red-thunderbird { color: #ffffff !important; } .border-red-thunderbird { border-color: #D91E18 !important; } .border-top-red-thunderbird { border-top-color: #D91E18 !important; } .border-bottom-red-thunderbird { border-bottom-color: #D91E18 !important; } .border-left-red-thunderbird { border-left-color: #D91E18 !important; } .border-right-red-thunderbird { border-right-color: #D91E18 !important; } .bg-before-red-thunderbird:before, .bg-after-red-thunderbird:after { background: #D91E18 !important; } .border-before-red-thunderbird:before, .border-after-red-thunderbird:after { border-color: #D91E18 !important; } .border-top-before-red-thunderbird:before, .border-top-after-red-thunderbird:after { border-top-color: #D91E18 !important; } .border-bottom-before-red-thunderbird:before, .border-bottom-after-red-thunderbird:after { border-bottom-color: #D91E18 !important; } .border-left-before-red-thunderbird:before, .border-left-after-red-thunderbird:after { border-left-color: #D91E18 !important; } .border-right-before-red-thunderbird:before, .border-right-after-red-thunderbird:after { border-right-color: #D91E18 !important; } .bg-red-flamingo { background: #EF4836 !important; } .bg-red-flamingo-opacity { background: rgba(239, 72, 54, 0.8) !important; } .bg-hover-red-flamingo:hover { background: #EF4836 !important; } .font-red-flamingo { color: #EF4836 !important; } .bg-font-red-flamingo { color: #ffffff !important; } .border-red-flamingo { border-color: #EF4836 !important; } .border-top-red-flamingo { border-top-color: #EF4836 !important; } .border-bottom-red-flamingo { border-bottom-color: #EF4836 !important; } .border-left-red-flamingo { border-left-color: #EF4836 !important; } .border-right-red-flamingo { border-right-color: #EF4836 !important; } .bg-before-red-flamingo:before, .bg-after-red-flamingo:after { background: #EF4836 !important; } .border-before-red-flamingo:before, .border-after-red-flamingo:after { border-color: #EF4836 !important; } .border-top-before-red-flamingo:before, .border-top-after-red-flamingo:after { border-top-color: #EF4836 !important; } .border-bottom-before-red-flamingo:before, .border-bottom-after-red-flamingo:after { border-bottom-color: #EF4836 !important; } .border-left-before-red-flamingo:before, .border-left-after-red-flamingo:after { border-left-color: #EF4836 !important; } .border-right-before-red-flamingo:before, .border-right-after-red-flamingo:after { border-right-color: #EF4836 !important; } .bg-red-soft { background: #d05454 !important; } .bg-red-soft-opacity { background: rgba(208, 84, 84, 0.8) !important; } .bg-hover-red-soft:hover { background: #d05454 !important; } .font-red-soft { color: #d05454 !important; } .bg-font-red-soft { color: #ffffff !important; } .border-red-soft { border-color: #d05454 !important; } .border-top-red-soft { border-top-color: #d05454 !important; } .border-bottom-red-soft { border-bottom-color: #d05454 !important; } .border-left-red-soft { border-left-color: #d05454 !important; } .border-right-red-soft { border-right-color: #d05454 !important; } .bg-before-red-soft:before, .bg-after-red-soft:after { background: #d05454 !important; } .border-before-red-soft:before, .border-after-red-soft:after { border-color: #d05454 !important; } .border-top-before-red-soft:before, .border-top-after-red-soft:after { border-top-color: #d05454 !important; } .border-bottom-before-red-soft:before, .border-bottom-after-red-soft:after { border-bottom-color: #d05454 !important; } .border-left-before-red-soft:before, .border-left-after-red-soft:after { border-left-color: #d05454 !important; } .border-right-before-red-soft:before, .border-right-after-red-soft:after { border-right-color: #d05454 !important; } .bg-red-haze { background: #f36a5a !important; } .bg-red-haze-opacity { background: rgba(243, 106, 90, 0.8) !important; } .bg-hover-red-haze:hover { background: #f36a5a !important; } .font-red-haze { color: #f36a5a !important; } .bg-font-red-haze { color: #ffffff !important; } .border-red-haze { border-color: #f36a5a !important; } .border-top-red-haze { border-top-color: #f36a5a !important; } .border-bottom-red-haze { border-bottom-color: #f36a5a !important; } .border-left-red-haze { border-left-color: #f36a5a !important; } .border-right-red-haze { border-right-color: #f36a5a !important; } .bg-before-red-haze:before, .bg-after-red-haze:after { background: #f36a5a !important; } .border-before-red-haze:before, .border-after-red-haze:after { border-color: #f36a5a !important; } .border-top-before-red-haze:before, .border-top-after-red-haze:after { border-top-color: #f36a5a !important; } .border-bottom-before-red-haze:before, .border-bottom-after-red-haze:after { border-bottom-color: #f36a5a !important; } .border-left-before-red-haze:before, .border-left-after-red-haze:after { border-left-color: #f36a5a !important; } .border-right-before-red-haze:before, .border-right-after-red-haze:after { border-right-color: #f36a5a !important; } .bg-red-mint { background: #e43a45 !important; } .bg-red-mint-opacity { background: rgba(228, 58, 69, 0.8) !important; } .bg-hover-red-mint:hover { background: #e43a45 !important; } .font-red-mint { color: #e43a45 !important; } .bg-font-red-mint { color: #ffffff !important; } .border-red-mint { border-color: #e43a45 !important; } .border-top-red-mint { border-top-color: #e43a45 !important; } .border-bottom-red-mint { border-bottom-color: #e43a45 !important; } .border-left-red-mint { border-left-color: #e43a45 !important; } .border-right-red-mint { border-right-color: #e43a45 !important; } .bg-before-red-mint:before, .bg-after-red-mint:after { background: #e43a45 !important; } .border-before-red-mint:before, .border-after-red-mint:after { border-color: #e43a45 !important; } .border-top-before-red-mint:before, .border-top-after-red-mint:after { border-top-color: #e43a45 !important; } .border-bottom-before-red-mint:before, .border-bottom-after-red-mint:after { border-bottom-color: #e43a45 !important; } .border-left-before-red-mint:before, .border-left-after-red-mint:after { border-left-color: #e43a45 !important; } .border-right-before-red-mint:before, .border-right-after-red-mint:after { border-right-color: #e43a45 !important; } .bg-yellow { background: #c49f47 !important; } .bg-yellow-opacity { background: rgba(196, 159, 71, 0.8) !important; } .bg-hover-yellow:hover { background: #c49f47 !important; } .font-yellow { color: #c49f47 !important; } .bg-font-yellow { color: #ffffff !important; } .border-yellow { border-color: #c49f47 !important; } .border-top-yellow { border-top-color: #c49f47 !important; } .border-bottom-yellow { border-bottom-color: #c49f47 !important; } .border-left-yellow { border-left-color: #c49f47 !important; } .border-right-yellow { border-right-color: #c49f47 !important; } .bg-before-yellow:before, .bg-after-yellow:after { background: #c49f47 !important; } .border-before-yellow:before, .border-after-yellow:after { border-color: #c49f47 !important; } .border-top-before-yellow:before, .border-top-after-yellow:after { border-top-color: #c49f47 !important; } .border-bottom-before-yellow:before, .border-bottom-after-yellow:after { border-bottom-color: #c49f47 !important; } .border-left-before-yellow:before, .border-left-after-yellow:after { border-left-color: #c49f47 !important; } .border-right-before-yellow:before, .border-right-after-yellow:after { border-right-color: #c49f47 !important; } .bg-yellow-gold { background: #E87E04 !important; } .bg-yellow-gold-opacity { background: rgba(232, 126, 4, 0.8) !important; } .bg-hover-yellow-gold:hover { background: #E87E04 !important; } .font-yellow-gold { color: #E87E04 !important; } .bg-font-yellow-gold { color: #ffffff !important; } .border-yellow-gold { border-color: #E87E04 !important; } .border-top-yellow-gold { border-top-color: #E87E04 !important; } .border-bottom-yellow-gold { border-bottom-color: #E87E04 !important; } .border-left-yellow-gold { border-left-color: #E87E04 !important; } .border-right-yellow-gold { border-right-color: #E87E04 !important; } .bg-before-yellow-gold:before, .bg-after-yellow-gold:after { background: #E87E04 !important; } .border-before-yellow-gold:before, .border-after-yellow-gold:after { border-color: #E87E04 !important; } .border-top-before-yellow-gold:before, .border-top-after-yellow-gold:after { border-top-color: #E87E04 !important; } .border-bottom-before-yellow-gold:before, .border-bottom-after-yellow-gold:after { border-bottom-color: #E87E04 !important; } .border-left-before-yellow-gold:before, .border-left-after-yellow-gold:after { border-left-color: #E87E04 !important; } .border-right-before-yellow-gold:before, .border-right-after-yellow-gold:after { border-right-color: #E87E04 !important; } .bg-yellow-casablanca { background: #f2784b !important; } .bg-yellow-casablanca-opacity { background: rgba(242, 120, 75, 0.8) !important; } .bg-hover-yellow-casablanca:hover { background: #f2784b !important; } .font-yellow-casablanca { color: #f2784b !important; } .bg-font-yellow-casablanca { color: #ffffff !important; } .border-yellow-casablanca { border-color: #f2784b !important; } .border-top-yellow-casablanca { border-top-color: #f2784b !important; } .border-bottom-yellow-casablanca { border-bottom-color: #f2784b !important; } .border-left-yellow-casablanca { border-left-color: #f2784b !important; } .border-right-yellow-casablanca { border-right-color: #f2784b !important; } .bg-before-yellow-casablanca:before, .bg-after-yellow-casablanca:after { background: #f2784b !important; } .border-before-yellow-casablanca:before, .border-after-yellow-casablanca:after { border-color: #f2784b !important; } .border-top-before-yellow-casablanca:before, .border-top-after-yellow-casablanca:after { border-top-color: #f2784b !important; } .border-bottom-before-yellow-casablanca:before, .border-bottom-after-yellow-casablanca:after { border-bottom-color: #f2784b !important; } .border-left-before-yellow-casablanca:before, .border-left-after-yellow-casablanca:after { border-left-color: #f2784b !important; } .border-right-before-yellow-casablanca:before, .border-right-after-yellow-casablanca:after { border-right-color: #f2784b !important; } .bg-yellow-crusta { background: #f3c200 !important; } .bg-yellow-crusta-opacity { background: rgba(243, 194, 0, 0.8) !important; } .bg-hover-yellow-crusta:hover { background: #f3c200 !important; } .font-yellow-crusta { color: #f3c200 !important; } .bg-font-yellow-crusta { color: #ffffff !important; } .border-yellow-crusta { border-color: #f3c200 !important; } .border-top-yellow-crusta { border-top-color: #f3c200 !important; } .border-bottom-yellow-crusta { border-bottom-color: #f3c200 !important; } .border-left-yellow-crusta { border-left-color: #f3c200 !important; } .border-right-yellow-crusta { border-right-color: #f3c200 !important; } .bg-before-yellow-crusta:before, .bg-after-yellow-crusta:after { background: #f3c200 !important; } .border-before-yellow-crusta:before, .border-after-yellow-crusta:after { border-color: #f3c200 !important; } .border-top-before-yellow-crusta:before, .border-top-after-yellow-crusta:after { border-top-color: #f3c200 !important; } .border-bottom-before-yellow-crusta:before, .border-bottom-after-yellow-crusta:after { border-bottom-color: #f3c200 !important; } .border-left-before-yellow-crusta:before, .border-left-after-yellow-crusta:after { border-left-color: #f3c200 !important; } .border-right-before-yellow-crusta:before, .border-right-after-yellow-crusta:after { border-right-color: #f3c200 !important; } .bg-yellow-lemon { background: #F7CA18 !important; } .bg-yellow-lemon-opacity { background: rgba(247, 202, 24, 0.8) !important; } .bg-hover-yellow-lemon:hover { background: #F7CA18 !important; } .font-yellow-lemon { color: #F7CA18 !important; } .bg-font-yellow-lemon { color: #ffffff !important; } .border-yellow-lemon { border-color: #F7CA18 !important; } .border-top-yellow-lemon { border-top-color: #F7CA18 !important; } .border-bottom-yellow-lemon { border-bottom-color: #F7CA18 !important; } .border-left-yellow-lemon { border-left-color: #F7CA18 !important; } .border-right-yellow-lemon { border-right-color: #F7CA18 !important; } .bg-before-yellow-lemon:before, .bg-after-yellow-lemon:after { background: #F7CA18 !important; } .border-before-yellow-lemon:before, .border-after-yellow-lemon:after { border-color: #F7CA18 !important; } .border-top-before-yellow-lemon:before, .border-top-after-yellow-lemon:after { border-top-color: #F7CA18 !important; } .border-bottom-before-yellow-lemon:before, .border-bottom-after-yellow-lemon:after { border-bottom-color: #F7CA18 !important; } .border-left-before-yellow-lemon:before, .border-left-after-yellow-lemon:after { border-left-color: #F7CA18 !important; } .border-right-before-yellow-lemon:before, .border-right-after-yellow-lemon:after { border-right-color: #F7CA18 !important; } .bg-yellow-saffron { background: #F4D03F !important; } .bg-yellow-saffron-opacity { background: rgba(244, 208, 63, 0.8) !important; } .bg-hover-yellow-saffron:hover { background: #F4D03F !important; } .font-yellow-saffron { color: #F4D03F !important; } .bg-font-yellow-saffron { color: #ffffff !important; } .border-yellow-saffron { border-color: #F4D03F !important; } .border-top-yellow-saffron { border-top-color: #F4D03F !important; } .border-bottom-yellow-saffron { border-bottom-color: #F4D03F !important; } .border-left-yellow-saffron { border-left-color: #F4D03F !important; } .border-right-yellow-saffron { border-right-color: #F4D03F !important; } .bg-before-yellow-saffron:before, .bg-after-yellow-saffron:after { background: #F4D03F !important; } .border-before-yellow-saffron:before, .border-after-yellow-saffron:after { border-color: #F4D03F !important; } .border-top-before-yellow-saffron:before, .border-top-after-yellow-saffron:after { border-top-color: #F4D03F !important; } .border-bottom-before-yellow-saffron:before, .border-bottom-after-yellow-saffron:after { border-bottom-color: #F4D03F !important; } .border-left-before-yellow-saffron:before, .border-left-after-yellow-saffron:after { border-left-color: #F4D03F !important; } .border-right-before-yellow-saffron:before, .border-right-after-yellow-saffron:after { border-right-color: #F4D03F !important; } .bg-yellow-soft { background: #c8d046 !important; } .bg-yellow-soft-opacity { background: rgba(200, 208, 70, 0.8) !important; } .bg-hover-yellow-soft:hover { background: #c8d046 !important; } .font-yellow-soft { color: #c8d046 !important; } .bg-font-yellow-soft { color: #ffffff !important; } .border-yellow-soft { border-color: #c8d046 !important; } .border-top-yellow-soft { border-top-color: #c8d046 !important; } .border-bottom-yellow-soft { border-bottom-color: #c8d046 !important; } .border-left-yellow-soft { border-left-color: #c8d046 !important; } .border-right-yellow-soft { border-right-color: #c8d046 !important; } .bg-before-yellow-soft:before, .bg-after-yellow-soft:after { background: #c8d046 !important; } .border-before-yellow-soft:before, .border-after-yellow-soft:after { border-color: #c8d046 !important; } .border-top-before-yellow-soft:before, .border-top-after-yellow-soft:after { border-top-color: #c8d046 !important; } .border-bottom-before-yellow-soft:before, .border-bottom-after-yellow-soft:after { border-bottom-color: #c8d046 !important; } .border-left-before-yellow-soft:before, .border-left-after-yellow-soft:after { border-left-color: #c8d046 !important; } .border-right-before-yellow-soft:before, .border-right-after-yellow-soft:after { border-right-color: #c8d046 !important; } .bg-yellow-haze { background: #c5bf66 !important; } .bg-yellow-haze-opacity { background: rgba(197, 191, 102, 0.8) !important; } .bg-hover-yellow-haze:hover { background: #c5bf66 !important; } .font-yellow-haze { color: #c5bf66 !important; } .bg-font-yellow-haze { color: #ffffff !important; } .border-yellow-haze { border-color: #c5bf66 !important; } .border-top-yellow-haze { border-top-color: #c5bf66 !important; } .border-bottom-yellow-haze { border-bottom-color: #c5bf66 !important; } .border-left-yellow-haze { border-left-color: #c5bf66 !important; } .border-right-yellow-haze { border-right-color: #c5bf66 !important; } .bg-before-yellow-haze:before, .bg-after-yellow-haze:after { background: #c5bf66 !important; } .border-before-yellow-haze:before, .border-after-yellow-haze:after { border-color: #c5bf66 !important; } .border-top-before-yellow-haze:before, .border-top-after-yellow-haze:after { border-top-color: #c5bf66 !important; } .border-bottom-before-yellow-haze:before, .border-bottom-after-yellow-haze:after { border-bottom-color: #c5bf66 !important; } .border-left-before-yellow-haze:before, .border-left-after-yellow-haze:after { border-left-color: #c5bf66 !important; } .border-right-before-yellow-haze:before, .border-right-after-yellow-haze:after { border-right-color: #c5bf66 !important; } .bg-yellow-mint { background: #c5b96b !important; } .bg-yellow-mint-opacity { background: rgba(197, 185, 107, 0.8) !important; } .bg-hover-yellow-mint:hover { background: #c5b96b !important; } .font-yellow-mint { color: #c5b96b !important; } .bg-font-yellow-mint { color: #ffffff !important; } .border-yellow-mint { border-color: #c5b96b !important; } .border-top-yellow-mint { border-top-color: #c5b96b !important; } .border-bottom-yellow-mint { border-bottom-color: #c5b96b !important; } .border-left-yellow-mint { border-left-color: #c5b96b !important; } .border-right-yellow-mint { border-right-color: #c5b96b !important; } .bg-before-yellow-mint:before, .bg-after-yellow-mint:after { background: #c5b96b !important; } .border-before-yellow-mint:before, .border-after-yellow-mint:after { border-color: #c5b96b !important; } .border-top-before-yellow-mint:before, .border-top-after-yellow-mint:after { border-top-color: #c5b96b !important; } .border-bottom-before-yellow-mint:before, .border-bottom-after-yellow-mint:after { border-bottom-color: #c5b96b !important; } .border-left-before-yellow-mint:before, .border-left-after-yellow-mint:after { border-left-color: #c5b96b !important; } .border-right-before-yellow-mint:before, .border-right-after-yellow-mint:after { border-right-color: #c5b96b !important; } .bg-purple { background: #8E44AD !important; } .bg-purple-opacity { background: rgba(142, 68, 173, 0.8) !important; } .bg-hover-purple:hover { background: #8E44AD !important; } .font-purple { color: #8E44AD !important; } .bg-font-purple { color: #ffffff !important; } .border-purple { border-color: #8E44AD !important; } .border-top-purple { border-top-color: #8E44AD !important; } .border-bottom-purple { border-bottom-color: #8E44AD !important; } .border-left-purple { border-left-color: #8E44AD !important; } .border-right-purple { border-right-color: #8E44AD !important; } .bg-before-purple:before, .bg-after-purple:after { background: #8E44AD !important; } .border-before-purple:before, .border-after-purple:after { border-color: #8E44AD !important; } .border-top-before-purple:before, .border-top-after-purple:after { border-top-color: #8E44AD !important; } .border-bottom-before-purple:before, .border-bottom-after-purple:after { border-bottom-color: #8E44AD !important; } .border-left-before-purple:before, .border-left-after-purple:after { border-left-color: #8E44AD !important; } .border-right-before-purple:before, .border-right-after-purple:after { border-right-color: #8E44AD !important; } .bg-purple-plum { background: #8775a7 !important; } .bg-purple-plum-opacity { background: rgba(135, 117, 167, 0.8) !important; } .bg-hover-purple-plum:hover { background: #8775a7 !important; } .font-purple-plum { color: #8775a7 !important; } .bg-font-purple-plum { color: #ffffff !important; } .border-purple-plum { border-color: #8775a7 !important; } .border-top-purple-plum { border-top-color: #8775a7 !important; } .border-bottom-purple-plum { border-bottom-color: #8775a7 !important; } .border-left-purple-plum { border-left-color: #8775a7 !important; } .border-right-purple-plum { border-right-color: #8775a7 !important; } .bg-before-purple-plum:before, .bg-after-purple-plum:after { background: #8775a7 !important; } .border-before-purple-plum:before, .border-after-purple-plum:after { border-color: #8775a7 !important; } .border-top-before-purple-plum:before, .border-top-after-purple-plum:after { border-top-color: #8775a7 !important; } .border-bottom-before-purple-plum:before, .border-bottom-after-purple-plum:after { border-bottom-color: #8775a7 !important; } .border-left-before-purple-plum:before, .border-left-after-purple-plum:after { border-left-color: #8775a7 !important; } .border-right-before-purple-plum:before, .border-right-after-purple-plum:after { border-right-color: #8775a7 !important; } .bg-purple-medium { background: #BF55EC !important; } .bg-purple-medium-opacity { background: rgba(191, 85, 236, 0.8) !important; } .bg-hover-purple-medium:hover { background: #BF55EC !important; } .font-purple-medium { color: #BF55EC !important; } .bg-font-purple-medium { color: #ffffff !important; } .border-purple-medium { border-color: #BF55EC !important; } .border-top-purple-medium { border-top-color: #BF55EC !important; } .border-bottom-purple-medium { border-bottom-color: #BF55EC !important; } .border-left-purple-medium { border-left-color: #BF55EC !important; } .border-right-purple-medium { border-right-color: #BF55EC !important; } .bg-before-purple-medium:before, .bg-after-purple-medium:after { background: #BF55EC !important; } .border-before-purple-medium:before, .border-after-purple-medium:after { border-color: #BF55EC !important; } .border-top-before-purple-medium:before, .border-top-after-purple-medium:after { border-top-color: #BF55EC !important; } .border-bottom-before-purple-medium:before, .border-bottom-after-purple-medium:after { border-bottom-color: #BF55EC !important; } .border-left-before-purple-medium:before, .border-left-after-purple-medium:after { border-left-color: #BF55EC !important; } .border-right-before-purple-medium:before, .border-right-after-purple-medium:after { border-right-color: #BF55EC !important; } .bg-purple-studio { background: #8E44AD !important; } .bg-purple-studio-opacity { background: rgba(142, 68, 173, 0.8) !important; } .bg-hover-purple-studio:hover { background: #8E44AD !important; } .font-purple-studio { color: #8E44AD !important; } .bg-font-purple-studio { color: #ffffff !important; } .border-purple-studio { border-color: #8E44AD !important; } .border-top-purple-studio { border-top-color: #8E44AD !important; } .border-bottom-purple-studio { border-bottom-color: #8E44AD !important; } .border-left-purple-studio { border-left-color: #8E44AD !important; } .border-right-purple-studio { border-right-color: #8E44AD !important; } .bg-before-purple-studio:before, .bg-after-purple-studio:after { background: #8E44AD !important; } .border-before-purple-studio:before, .border-after-purple-studio:after { border-color: #8E44AD !important; } .border-top-before-purple-studio:before, .border-top-after-purple-studio:after { border-top-color: #8E44AD !important; } .border-bottom-before-purple-studio:before, .border-bottom-after-purple-studio:after { border-bottom-color: #8E44AD !important; } .border-left-before-purple-studio:before, .border-left-after-purple-studio:after { border-left-color: #8E44AD !important; } .border-right-before-purple-studio:before, .border-right-after-purple-studio:after { border-right-color: #8E44AD !important; } .bg-purple-wisteria { background: #9B59B6 !important; } .bg-purple-wisteria-opacity { background: rgba(155, 89, 182, 0.8) !important; } .bg-hover-purple-wisteria:hover { background: #9B59B6 !important; } .font-purple-wisteria { color: #9B59B6 !important; } .bg-font-purple-wisteria { color: #ffffff !important; } .border-purple-wisteria { border-color: #9B59B6 !important; } .border-top-purple-wisteria { border-top-color: #9B59B6 !important; } .border-bottom-purple-wisteria { border-bottom-color: #9B59B6 !important; } .border-left-purple-wisteria { border-left-color: #9B59B6 !important; } .border-right-purple-wisteria { border-right-color: #9B59B6 !important; } .bg-before-purple-wisteria:before, .bg-after-purple-wisteria:after { background: #9B59B6 !important; } .border-before-purple-wisteria:before, .border-after-purple-wisteria:after { border-color: #9B59B6 !important; } .border-top-before-purple-wisteria:before, .border-top-after-purple-wisteria:after { border-top-color: #9B59B6 !important; } .border-bottom-before-purple-wisteria:before, .border-bottom-after-purple-wisteria:after { border-bottom-color: #9B59B6 !important; } .border-left-before-purple-wisteria:before, .border-left-after-purple-wisteria:after { border-left-color: #9B59B6 !important; } .border-right-before-purple-wisteria:before, .border-right-after-purple-wisteria:after { border-right-color: #9B59B6 !important; } .bg-purple-seance { background: #9A12B3 !important; } .bg-purple-seance-opacity { background: rgba(154, 18, 179, 0.8) !important; } .bg-hover-purple-seance:hover { background: #9A12B3 !important; } .font-purple-seance { color: #9A12B3 !important; } .bg-font-purple-seance { color: #ffffff !important; } .border-purple-seance { border-color: #9A12B3 !important; } .border-top-purple-seance { border-top-color: #9A12B3 !important; } .border-bottom-purple-seance { border-bottom-color: #9A12B3 !important; } .border-left-purple-seance { border-left-color: #9A12B3 !important; } .border-right-purple-seance { border-right-color: #9A12B3 !important; } .bg-before-purple-seance:before, .bg-after-purple-seance:after { background: #9A12B3 !important; } .border-before-purple-seance:before, .border-after-purple-seance:after { border-color: #9A12B3 !important; } .border-top-before-purple-seance:before, .border-top-after-purple-seance:after { border-top-color: #9A12B3 !important; } .border-bottom-before-purple-seance:before, .border-bottom-after-purple-seance:after { border-bottom-color: #9A12B3 !important; } .border-left-before-purple-seance:before, .border-left-after-purple-seance:after { border-left-color: #9A12B3 !important; } .border-right-before-purple-seance:before, .border-right-after-purple-seance:after { border-right-color: #9A12B3 !important; } .bg-purple-intense { background: #8775a7 !important; } .bg-purple-intense-opacity { background: rgba(135, 117, 167, 0.8) !important; } .bg-hover-purple-intense:hover { background: #8775a7 !important; } .font-purple-intense { color: #8775a7 !important; } .bg-font-purple-intense { color: #ffffff !important; } .border-purple-intense { border-color: #8775a7 !important; } .border-top-purple-intense { border-top-color: #8775a7 !important; } .border-bottom-purple-intense { border-bottom-color: #8775a7 !important; } .border-left-purple-intense { border-left-color: #8775a7 !important; } .border-right-purple-intense { border-right-color: #8775a7 !important; } .bg-before-purple-intense:before, .bg-after-purple-intense:after { background: #8775a7 !important; } .border-before-purple-intense:before, .border-after-purple-intense:after { border-color: #8775a7 !important; } .border-top-before-purple-intense:before, .border-top-after-purple-intense:after { border-top-color: #8775a7 !important; } .border-bottom-before-purple-intense:before, .border-bottom-after-purple-intense:after { border-bottom-color: #8775a7 !important; } .border-left-before-purple-intense:before, .border-left-after-purple-intense:after { border-left-color: #8775a7 !important; } .border-right-before-purple-intense:before, .border-right-after-purple-intense:after { border-right-color: #8775a7 !important; } .bg-purple-sharp { background: #796799 !important; } .bg-purple-sharp-opacity { background: rgba(121, 103, 153, 0.8) !important; } .bg-hover-purple-sharp:hover { background: #796799 !important; } .font-purple-sharp { color: #796799 !important; } .bg-font-purple-sharp { color: #ffffff !important; } .border-purple-sharp { border-color: #796799 !important; } .border-top-purple-sharp { border-top-color: #796799 !important; } .border-bottom-purple-sharp { border-bottom-color: #796799 !important; } .border-left-purple-sharp { border-left-color: #796799 !important; } .border-right-purple-sharp { border-right-color: #796799 !important; } .bg-before-purple-sharp:before, .bg-after-purple-sharp:after { background: #796799 !important; } .border-before-purple-sharp:before, .border-after-purple-sharp:after { border-color: #796799 !important; } .border-top-before-purple-sharp:before, .border-top-after-purple-sharp:after { border-top-color: #796799 !important; } .border-bottom-before-purple-sharp:before, .border-bottom-after-purple-sharp:after { border-bottom-color: #796799 !important; } .border-left-before-purple-sharp:before, .border-left-after-purple-sharp:after { border-left-color: #796799 !important; } .border-right-before-purple-sharp:before, .border-right-after-purple-sharp:after { border-right-color: #796799 !important; } .bg-purple-soft { background: #8877a9 !important; } .bg-purple-soft-opacity { background: rgba(136, 119, 169, 0.8) !important; } .bg-hover-purple-soft:hover { background: #8877a9 !important; } .font-purple-soft { color: #8877a9 !important; } .bg-font-purple-soft { color: #ffffff !important; } .border-purple-soft { border-color: #8877a9 !important; } .border-top-purple-soft { border-top-color: #8877a9 !important; } .border-bottom-purple-soft { border-bottom-color: #8877a9 !important; } .border-left-purple-soft { border-left-color: #8877a9 !important; } .border-right-purple-soft { border-right-color: #8877a9 !important; } .bg-before-purple-soft:before, .bg-after-purple-soft:after { background: #8877a9 !important; } .border-before-purple-soft:before, .border-after-purple-soft:after { border-color: #8877a9 !important; } .border-top-before-purple-soft:before, .border-top-after-purple-soft:after { border-top-color: #8877a9 !important; } .border-bottom-before-purple-soft:before, .border-bottom-after-purple-soft:after { border-bottom-color: #8877a9 !important; } .border-left-before-purple-soft:before, .border-left-after-purple-soft:after { border-left-color: #8877a9 !important; } .border-right-before-purple-soft:before, .border-right-after-purple-soft:after { border-right-color: #8877a9 !important; } /*** Color library demo ***/ .color-demo { border: 1px solid #eee; margin: 0 0 20px 0; cursor: pointer; } .color-demo .color-view { padding: 35px 10px; text-align: center; font-size: 18px; } .color-demo .color-info { border-top: 1px solid #eee; padding: 10px 10px; text-align: center; } .mt-cookie-consent-bar { position: fixed; bottom: 0; z-index: 10101; padding: 10px 25px; width: 100%; background: rgba(0, 0, 0, 0.9); color: #ffffff; left: 0; right: 0; } .mt-cookie-consent-bar .mt-cookie-consent-bar-holder { display: table; width: 100%; } .mt-cookie-consent-bar .mt-cookie-consent-bar-holder .mt-cookie-consent-bar-content { display: table-cell; text-align: left; vertical-align: middle; } .mt-cookie-consent-bar .mt-cookie-consent-bar-holder .mt-cookie-consent-bar-action { display: table-cell; text-align: right; vertical-align: middle; } .mt-cookie-consent-bar.mt-cookie-consent-bar-light { background: rgba(238, 238, 238, 0.9); color: #333; } ================================================ FILE: resources/assets/static/src/themes/global/custom.css ================================================ /* .page-logo { line-height: 75px; font-size: 18px; } .page-logo a { text-decoration:none ; } */ .back-btn-row { text-align: center; margin-top: 30px; margin-bottom: 30px; } .fit-img-preview { display: inline-block; } .fit-img-preview img { max-width: 120px; min-width: 60px; } .open_album_btn { margin-left: 8px; } .fit-loading { position: fixed; filter: alpha(opacity=80); -moz-opacity: 0.8; -khtml-opacity: 0.8; opacity: 0.8; color: #FFF; width: 120px; height: 120px; border-radius: 6px; text-align: center; z-index: 13000; background: url(img/loading.gif) no-repeat 50% 50% #000; } .fit-modal { display: none; position: absolute; filter: alpha(opacity=30); -moz-opacity: 0.3; opacity: 0.3; width: 100%; height: 100%; background: #000; z-index: 11000; top: 0; } .fit-alert, .fit-confirm { display: none; position: absolute; font-family: 'Microsoft YaHei', '黑体', Arial, 'Times New Roman', SimHei !important; font-size: 16px; background: #FFFFFF; width: 85%; max-width: 300px; border-radius: 6px; min-height: 100px; z-index: 12000; box-shadow: 0 0 10px #424040; } .fit-alert .fit-alert-body, .fit-confirm .fit-confirm-body { color: #000000; text-align: center; vertical-align: middle; padding: 30px 35px; } .fit-alert .fit-alert_btn, .fit-confirm .fit-confirm-btn { height: 40px; border-top: 1px solid #cdcdcd; } .fit-alert .fit-alert-btn button, .fit-confirm .fit-confirm-btn button { display: block; float: left; height: 40px; width: 100%; color: #1282fb; background: #FFFFFF; font-weight: bold; border: 0; border-bottom-left-radius: 6px; border-bottom-right-radius: 6px; } .fit-alert .fit-alert-btn .half, .fit-confirm .fit-confirm-btn .half { width: 50%; } .fit-alert .fit-alert-btn .half:first-child, .fit-confirm .fit-confirm-btn .half:first-child { border-bottom-left-radius: 6px; border-bottom-right-radius: 0; } .fit-alert .fit-alert-btn .half:last-child, .fit-confirm .fit-confirm-btn .half:last-child { border-bottom-left-radius: 0; border-bottom-right-radius: 6px; border-left: 1px solid #ddd; } .toast-top-center { margin-top: 16px; } table .sorting { cursor: pointer; padding-right: 20px !important; background: url("img/sort_both.png") 100% 50% no-repeat; } table .sort_asc { cursor: pointer; padding-right: 20px !important; background: url("img/sort_asc.png") 100% 50% no-repeat; } table .sort_desc { cursor: pointer; padding-right: 20px !important; background: url("img/sort_desc.png") 100% 50% no-repeat; } table td { vertical-align: middle !important; } table .level-fa { width: 20px; cursor: pointer; } table .level-1 { } table .level-2 { padding-left: 25px !important; } table .level-3 { padding-left: 50px !important; } table .level-4 { padding-left: 75px !important; } table .level-5 { padding-left: 100px !important; } table .level-6 { padding-left: 125px !important; } /* 上传相关 */ .uploader-holder-markup { position: absolute; width: 100%; height: 100%; top: 0; background: #000000; z-index: 60; } .uploader-holder-tracker { position: absolute; top: 0; left: 0; overflow: hidden; border: 1px dashed #ffffff; z-index: 620; cursor: move; } .uploader-holder-tracker-img { position: absolute; top: 0; left: 0; } .uploader-holder-img-bg { position: absolute; top: 0; left: 0; opacity: 0.6; z-index: 300; } .area-selection { display: none; position: absolute; width: 400px; padding: 10px; border: 1px solid #dddddd; border-radius: 3px; background: #ffffff; z-index: 10055; } .area-selection a { text-decoration: none; } .area-selection .list-inline a { display: inline-block; width: 60px; text-align: center; margin-bottom: 6px; } .tile a:hover { text-decoration: none; } .tile .number a { color: #fff; } .tile .number a i { width: 20px; font-size: 18px; } .tile .number a:hover { color: #ccc; text-underline: none; } .thumbnail.album_item { margin-bottom: 6px; } .thumbnail.album_item img { display: block; max-height: 180px; width: 100%; } .caption.album_item { text-align: center; margin-bottom: 16px; } .code-text { -moz-tab-size: 2; background: #f5f2f0 none repeat scroll 0 0; box-sizing: border-box; color: black; font: 100% Consolas, Monaco, monospace; height: 10em; margin: 0.5em 0; padding: 1em; white-space: pre; width: 100%; word-wrap: normal; } .permission { padding: 8px 16px; margin: 0px; list-style: none; } .permission li { padding: 0px; margin: 0px; padding-bottom: 16px; list-style: none; } .permission .func-node { margin-bottom: 8px; } .permission .func-node .func { display: inline-block; width: 100px; margin-right: 20px; cursor: pointer; font-weight: bold; color: #000; } .permission .func-node .func.active { color: #000; } .permission .func-node .func.notall { color: #888; } .permission .func-node .func.disabled { color: #CCCCCC; } .permission .func-node .func-opt { display: inline-block; min-width: 60px; margin-right: 8px; cursor: pointer; color: #000; } .permission .func-node .func-opt.active { color: #000; } .permission .func-node .func-opt.notall { color: #888; } .permission .func-node .func-opt.disabled { color: #CCCCCC; } .permission .func-node .func-opt i { width: 12px; } .permission .func-tree .sub-permission { margin: 0px; padding: 0px; padding-left: 26px; } .permission .func-tree .sub-permission li { padding: 0px; } ================================================ FILE: resources/assets/static/src/themes/global/darkblue.css ================================================ /* Cubic Bezier Transition */ /*********** Page Header ***********/ /* Header search bar, toggler button & top menu */ .page-header.navbar { background-color: #2b3643; /* Top notification menu/bar */ /* Header seaech box */ /* Toggler button for sidebar expand/collapse and responsive sidebar menu */ } .page-header.navbar .top-menu .navbar-nav { /* Extended Dropdowns */ /* Notification */ /* Inbox */ /* Tasks */ /* User */ /* Language */ /* Dark version */ } .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle > i { color: #79869a; } .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle .badge.badge-default { background-color: #36c6d3; color: #ffffff; } .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle:hover { background-color: #3f4f62; } .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle:hover > i { color: #a4aebb; } .page-header.navbar .top-menu .navbar-nav > li.dropdown.open .dropdown-toggle { background-color: #3f4f62; } .page-header.navbar .top-menu .navbar-nav > li.dropdown.open .dropdown-toggle > i { color: #a4aebb; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu { border-color: #e7eaf0; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu:after { border-bottom-color: #eaedf2; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external { background: #eaedf2; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > h3 { color: #62878f; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > a { color: #337ab7; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > a:hover { color: #23527c; text-decoration: none; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li > a { border-bottom: 1px solid #EFF2F6 !important; color: #888888; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li > a:hover { background: #f8f9fa; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li > a .time { background: #f1f1f1; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li > a:hover .time { background: #e4e4e4; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-toggle > .circle { background-color: #36c6d3; color: #ffffff; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-toggle > .corner { border-color: transparent transparent transparent #36c6d3; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox .dropdown-menu .dropdown-menu-list .subject .from { color: #5b9bd1; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list .progress { background-color: #dfe2e9; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-user > .dropdown-toggle > .username { color: #c6cfda; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-user > .dropdown-toggle > i { color: #c6cfda; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-user > .dropdown-menu { width: 195px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-toggle > .langname { color: #c6cfda; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu { background: #3f4f62; border: 0; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu:after { border-bottom-color: #3f4f62; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu > li.external { background: #2f3b49; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu > li.external > h3 { color: #adbaca; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu > li.external > a:hover { color: #5496cf; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li a, .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu .dropdown-menu-list > li a { color: #bcc7d4; border-bottom: 1px solid #4b5e75 !important; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li a > i, .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu .dropdown-menu-list > li a > i { color: #9dadc0; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li a:hover, .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu .dropdown-menu-list > li a:hover { background: #47596e; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li a { border-bottom: 0 !important; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li.divider { background: #4b5e75; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification.dropdown-dark .dropdown-menu .dropdown-menu-list > li > a .time { background: #354353; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification.dropdown-dark .dropdown-menu .dropdown-menu-list > li > a:hover .time { background: #2b3643; } .page-header.navbar .search-form { background: #232c37; } .page-header.navbar .search-form:hover { background: #3f4f62; } .page-header.navbar .search-form .input-group .form-control { color: #959fad; } .page-header.navbar .search-form .input-group .form-control::-moz-placeholder { color: #929cab; opacity: 1; } .page-header.navbar .search-form .input-group .form-control:-ms-input-placeholder { color: #929cab; } .page-header.navbar .search-form .input-group .form-control::-webkit-input-placeholder { color: #929cab; } .page-header.navbar .search-form .input-group .input-group-btn .btn.submit > i { color: #959fad; } .page-header.navbar .search-form.open { background: #3f4f62; } .page-header.navbar .menu-toggler > span, .page-header.navbar .menu-toggler > span:before, .page-header.navbar .menu-toggler > span:after { background: #a7b5c6; } .page-header.navbar .menu-toggler > span:hover { background: #a7b5c6; } .page-header.navbar .menu-toggler > span:hover:before, .page-header.navbar .menu-toggler > span:hover:after { background: #a7b5c6; } .page-header.navbar .menu-toggler.th-toggle-exit > span { background-color: transparent !important; } /* Default Horizontal Menu */ .page-header.navbar { /* Default Mega Menu */ /* Light Mega Menu */ } .page-header.navbar .hor-menu .navbar-nav { /* Mega menu content */ /* Classic menu */ } .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu { box-shadow: 5px 5px rgba(63, 79, 98, 0.2); } .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > h3 { color: #c6cfda; } .page-header.navbar .hor-menu .navbar-nav > li > a { color: #c6cfda; } .page-header.navbar .hor-menu .navbar-nav > li > a > i { color: #788ea8; } .page-header.navbar .hor-menu .navbar-nav > li:hover > a, .page-header.navbar .hor-menu .navbar-nav > li.open > a, .page-header.navbar .hor-menu .navbar-nav > li > a:hover { color: #d5dce4; background: #3f4f62 !important; } .page-header.navbar .hor-menu .navbar-nav > li:hover > a > i, .page-header.navbar .hor-menu .navbar-nav > li.open > a > i, .page-header.navbar .hor-menu .navbar-nav > li > a:hover > i { color: #889bb2; } .page-header.navbar .hor-menu .navbar-nav > li.active > a, .page-header.navbar .hor-menu .navbar-nav > li.active > a, .page-header.navbar .hor-menu .navbar-nav > li.current > a, .page-header.navbar .hor-menu .navbar-nav > li.current > a { color: white; background: #36c6d3 !important; } .page-header.navbar .hor-menu .navbar-nav > li.active > a > i, .page-header.navbar .hor-menu .navbar-nav > li.active > a > i, .page-header.navbar .hor-menu .navbar-nav > li.current > a > i, .page-header.navbar .hor-menu .navbar-nav > li.current > a > i { color: #788ea8; } .page-header.navbar .hor-menu .navbar-nav > li.active .selected, .page-header.navbar .hor-menu .navbar-nav > li.current .selected { border-top: 6px solid #36c6d3; } .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu { box-shadow: 5px 5px rgba(63, 79, 98, 0.2); background: #3f4f62; } .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a { color: #c6cfda; } .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a > i { color: #c6cfda; } .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li:hover > a { color: #f1f3f6; background: #47596e; } .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li:hover > a > i { color: #f1f3f6; } .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.active > a, .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.active > a:hover, .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.current > a, .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.current > a:hover { color: #f1f3f6; background: #47596e; } .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.active > a > i, .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.active > a:hover > i, .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.current > a > i, .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.current > a:hover > i { color: #f1f3f6; } .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.divider { background-color: #495c72; } .page-header.navbar .hor-menu .navbar-nav > li .dropdown-submenu > a:after { color: #c6cfda; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav { /* Mega menu content */ /* Classic menu */ } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.mega-menu-dropdown > .dropdown-menu { box-shadow: 5px 5px rgba(102, 102, 102, 0.1); } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > h3 { color: #666; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > a { color: #c6cfda; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > a > i { color: #788ea8; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li:hover > a, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > a:hover { color: #d5dce4; background: #3f4f62; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li:hover > a > i, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > a:hover > i { color: #889bb2; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.open > a { color: #333 !important; background: white !important; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.open > a > i { color: #333 !important; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.active > a, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.active > a:hover, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.current > a, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.current > a:hover { color: white; background: #36c6d3; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.active > a > i, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.active > a:hover > i, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.current > a > i, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.current > a:hover > i { color: #788ea8; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu { box-shadow: 5px 5px rgba(102, 102, 102, 0.1); background: white; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li > a { color: #000; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li > a > i { color: #888; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li:hover > a { color: #000; background: whitesmoke; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li:hover > a > i { color: #666; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.active > a, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.active > a:hover, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.current > a, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.current > a:hover { color: #000; background: whitesmoke; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.active > a > i, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.active > a:hover > i, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.current > a > i, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.current > a:hover > i { color: #666; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.divider { background-color: whitesmoke; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu { border: 1px solid #f2f2f2; } .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > .dropdown-menu { border-top: 0; } /* Page sidebar */ .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover, .page-sidebar { background-color: #364150; /* Default sidebar */ /* light sidebar */ /* Sidebar search */ } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu, .page-sidebar .page-sidebar-menu { /* 1st level links */ /* All links */ } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a, .page-sidebar .page-sidebar-menu > li > a { border-top: 1px solid #3d4957; color: #b4bcc8; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i, .page-sidebar .page-sidebar-menu > li > a > i { color: #606C7D; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i[class^="icon-"], .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i[class*="icon-"], .page-sidebar .page-sidebar-menu > li > a > i[class^="icon-"], .page-sidebar .page-sidebar-menu > li > a > i[class*="icon-"] { color: #6b788b; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > .arrow.open:before, .page-sidebar .page-sidebar-menu > li > a > .arrow:before, .page-sidebar .page-sidebar-menu > li > a > .arrow.open:before { color: #606C7D; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.heading > h3, .page-sidebar .page-sidebar-menu > li.heading > h3 { color: #708096; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:hover > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a, .page-sidebar .page-sidebar-menu > li:hover > a, .page-sidebar .page-sidebar-menu > li.open > a { background: #2C3542; color: #b4bcc8; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:hover > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a > i, .page-sidebar .page-sidebar-menu > li:hover > a > i, .page-sidebar .page-sidebar-menu > li.open > a > i { color: #606C7D; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:hover > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:hover > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a > .arrow.open:before, .page-sidebar .page-sidebar-menu > li:hover > a > .arrow:before, .page-sidebar .page-sidebar-menu > li:hover > a > .arrow.open:before, .page-sidebar .page-sidebar-menu > li.open > a > .arrow:before, .page-sidebar .page-sidebar-menu > li.open > a > .arrow.open:before { color: #606C7D; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a, .page-sidebar .page-sidebar-menu > li.active > a, .page-sidebar .page-sidebar-menu > li.active.open > a { background: #36c6d3; border-top-color: transparent; color: #ffffff; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a:hover, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a:hover, .page-sidebar .page-sidebar-menu > li.active > a:hover, .page-sidebar .page-sidebar-menu > li.active.open > a:hover { background: #36c6d3; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a > i, .page-sidebar .page-sidebar-menu > li.active > a > i, .page-sidebar .page-sidebar-menu > li.active.open > a > i { color: #ffffff; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a > .arrow.open:before, .page-sidebar .page-sidebar-menu > li.active > a > .arrow:before, .page-sidebar .page-sidebar-menu > li.active > a > .arrow.open:before, .page-sidebar .page-sidebar-menu > li.active.open > a > .arrow:before, .page-sidebar .page-sidebar-menu > li.active.open > a > .arrow.open:before { color: #ffffff; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active + li > a, .page-sidebar .page-sidebar-menu > li.active + li > a { border-top-color: transparent; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open + li > a, .page-sidebar .page-sidebar-menu > li.active.open + li > a { border-top-color: #3d4957; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:last-child > a, .page-sidebar .page-sidebar-menu > li:last-child > a { border-bottom: 1px solid transparent !important; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .arrow.open:before, .page-sidebar .page-sidebar-menu li > a > .arrow:before, .page-sidebar .page-sidebar-menu li > a > .arrow.open:before { color: #606C7D; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li:hover > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li:hover > a > .arrow.open:before, .page-sidebar .page-sidebar-menu li:hover > a > .arrow:before, .page-sidebar .page-sidebar-menu li:hover > a > .arrow.open:before { color: #606C7D; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li.active > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li.active > a > .arrow.open:before, .page-sidebar .page-sidebar-menu li.active > a > .arrow:before, .page-sidebar .page-sidebar-menu li.active > a > .arrow.open:before { color: #ffffff; } .page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu:hover .sub-menu, .page-sidebar-closed .page-sidebar .page-sidebar-menu:hover .sub-menu { background-color: #364150; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a, .page-sidebar .page-sidebar-menu .sub-menu > li > a { color: #b4bcc8; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > i, .page-sidebar .page-sidebar-menu .sub-menu > li > a > i { color: #606C7D; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > i[class^="icon-"], .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > i[class*="icon-"], .page-sidebar .page-sidebar-menu .sub-menu > li > a > i[class^="icon-"], .page-sidebar .page-sidebar-menu .sub-menu > li > a > i[class*="icon-"] { color: #6b788b; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > .arrow.open:before, .page-sidebar .page-sidebar-menu .sub-menu > li > a > .arrow:before, .page-sidebar .page-sidebar-menu .sub-menu > li > a > .arrow.open:before { color: #606C7D; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li:hover > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.open > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.active > a, .page-sidebar .page-sidebar-menu .sub-menu > li:hover > a, .page-sidebar .page-sidebar-menu .sub-menu > li.open > a, .page-sidebar .page-sidebar-menu .sub-menu > li.active > a { background: #3e4b5c !important; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li:hover > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.open > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.active > a > i, .page-sidebar .page-sidebar-menu .sub-menu > li:hover > a > i, .page-sidebar .page-sidebar-menu .sub-menu > li.open > a > i, .page-sidebar .page-sidebar-menu .sub-menu > li.active > a > i { color: #606C7D; color: #959fae; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li:hover > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li:hover > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.open > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.open > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.active > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.active > a > .arrow.open:before, .page-sidebar .page-sidebar-menu .sub-menu > li:hover > a > .arrow:before, .page-sidebar .page-sidebar-menu .sub-menu > li:hover > a > .arrow.open:before, .page-sidebar .page-sidebar-menu .sub-menu > li.open > a > .arrow:before, .page-sidebar .page-sidebar-menu .sub-menu > li.open > a > .arrow.open:before, .page-sidebar .page-sidebar-menu .sub-menu > li.active > a > .arrow:before, .page-sidebar .page-sidebar-menu .sub-menu > li.active > a > .arrow.open:before { color: #606C7D; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light { /* 1st level links */ } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li:hover > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.open > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li:hover > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.open > a { background: #3a4656; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a { background: #3e4b5c; border-left: 4px solid #36c6d3; color: #f1f1f1; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a:hover, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a:hover, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a:hover, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a:hover { border-left: 4px solid #36c6d3; background: #3a4656; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > i, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a > i, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > i { color: #eeeeee; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > .arrow.open:before, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a > .arrow:before, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a > .arrow.open:before, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > .arrow:before, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > .arrow.open:before { color: #eeeeee; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu { background: #3a4656; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li:hover > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.open > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.active > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li:hover > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.open > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.active > a { background: #3e4b5c !important; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler, .page-sidebar .sidebar-toggler { background: #2c3541; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:after, .page-sidebar .sidebar-toggler > span, .page-sidebar .sidebar-toggler > span:before, .page-sidebar .sidebar-toggler > span:after { background: #a7b5c6; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:hover, .page-sidebar .sidebar-toggler > span:hover { background: #a7b5c6; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:hover:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:hover:after, .page-sidebar .sidebar-toggler > span:hover:before, .page-sidebar .sidebar-toggler > span:hover:after { background: #a7b5c6; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler.th-toggle-exit > span, .page-sidebar .sidebar-toggler.th-toggle-exit > span { background-color: transparent !important; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler:hover, .page-sidebar .sidebar-toggler:hover { background: #212832; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group, .page-sidebar .sidebar-search .input-group { border-bottom: 1px solid #435060; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control, .page-sidebar .sidebar-search .input-group .form-control { background-color: #364150; color: #4e5d6f; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control::-moz-placeholder, .page-sidebar .sidebar-search .input-group .form-control::-moz-placeholder { color: #4e5d6f; opacity: 1; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control:-ms-input-placeholder, .page-sidebar .sidebar-search .input-group .form-control:-ms-input-placeholder { color: #4e5d6f; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control::-webkit-input-placeholder, .page-sidebar .sidebar-search .input-group .form-control::-webkit-input-placeholder { color: #4e5d6f; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .input-group-btn .btn > i, .page-sidebar .sidebar-search .input-group .input-group-btn .btn > i { color: #4e5d6f; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered .input-group, .page-sidebar .sidebar-search.sidebar-search-bordered .input-group { border: 1px solid #435060; } .page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.open .input-group, .page-sidebar-closed .page-sidebar .sidebar-search.open .input-group { background-color: #364150; } .page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.open .remove > i, .page-sidebar-closed .page-sidebar .sidebar-search.open .remove > i { color: #4e5d6f; } .page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid .input-group, .page-sidebar-closed .page-sidebar .sidebar-search.sidebar-search-solid .input-group { background: none; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid .input-group, .page-sidebar .sidebar-search.sidebar-search-solid .input-group { border: 1px solid #2c3541; background: #2c3541; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid .input-group .form-control, .page-sidebar .sidebar-search.sidebar-search-solid .input-group .form-control { background: #2c3541; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid.open .input-group, .page-sidebar .sidebar-search.sidebar-search-solid.open .input-group { border: 1px solid #364150; background: #364150; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid.open .input-group .form-control, .page-sidebar .sidebar-search.sidebar-search-solid.open .input-group .form-control { background: #364150; } .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light { /* 1st level links */ } .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light > li.active > a, .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a { border-left: 0; border-right: 4px solid #36c6d3; } .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light > li.active > a:hover, .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a:hover { border-left: 0; border-right: 4px solid #36c6d3; } /****** Page Footer ******/ .page-footer .page-footer-inner { color: #98a6ba; } .page-footer-fixed .page-footer { background-color: #28303b; } @media (min-width: 992px) { /* 992px */ /* Sidebar menu closed */ .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu { box-shadow: 5px 5px rgba(44, 53, 66, 0.2); } .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu.sidebar-toggler-wrapper, .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu.sidebar-search-wrapper { box-shadow: none; } .page-sidebar-menu.page-sidebar-menu-closed > li:hover { box-shadow: 5px 5px rgba(44, 53, 66, 0.2); } .page-sidebar-menu.page-sidebar-menu-closed > li:hover.sidebar-toggler-wrapper, .page-sidebar-menu.page-sidebar-menu-closed > li:hover.sidebar-search-wrapper { box-shadow: none; } .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu { box-shadow: 5px 5px rgba(44, 53, 66, 0.2); } .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu.sidebar-toggler-wrapper, .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu.sidebar-search-wrapper { box-shadow: none; } /* Light sidebar menu */ .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-closed > li.heading { padding: 0; margin-top: 15px; margin-bottom: 15px; border-top: 1px solid #3d4957 !important; } /* Fixed Sidebar */ .page-sidebar-fixed:not(.page-footer-fixed) .page-content { border-bottom: 0; } .page-sidebar-fixed:not(.page-footer-fixed) .page-footer { background-color: #fff; } .page-sidebar-fixed:not(.page-footer-fixed) .page-footer .page-footer-inner { color: #333; } /* Boxed Layout */ .page-boxed { background-color: #303a47 !important; /* Page container */ /* Page sidebar */ /* Page footer */ } .page-boxed .page-container { background-color: #364150; border-left: 1px solid #3d4957; border-bottom: 1px solid #3d4957; } .page-boxed.page-sidebar-reversed .page-container { border-left: 0; border-right: 1px solid #3d4957; } .page-boxed.page-sidebar-fixed .page-container { border-left: 0; border-bottom: 0; } .page-boxed.page-sidebar-reversed.page-sidebar-fixed .page-container { border-left: 0; border-right: 0; border-bottom: 0; } .page-boxed.page-sidebar-fixed .page-sidebar { border-left: 1px solid #3d4957; } .page-boxed.page-sidebar-reversed.page-sidebar-fixed .page-sidebar { border-right: 1px solid #3d4957; border-left: 0; } .page-boxed.page-sidebar-fixed.page-footer-fixed .page-footer { background-color: #303a47 !important; } .page-boxed.page-sidebar-fixed.page-footer-fixed .page-footer .page-footer-inner { color: #98a6ba; } /* Sidebar Menu Wirh Hoverable Submenu */ .page-sidebar-menu-hover-submenu li:hover a > .arrow { border-right: 8px solid #323c4b; } .page-sidebar-reversed .page-sidebar-menu-hover-submenu li:hover a > .arrow { border-left: 8px solid #323c4b; } .page-sidebar-menu-hover-submenu li:hover > .sub-menu { background: #323c4b !important; } } @media (max-width: 991px) { /* 991px */ /* Page sidebar */ .page-sidebar { background-color: #28303b; /* light sidebar */ } .page-sidebar .page-sidebar-menu > li > a { border-top: 1px solid #364150; } .page-sidebar .page-sidebar-menu > li:hover > a, .page-sidebar .page-sidebar-menu > li.open > a { background: #2e3744; } .page-sidebar .page-sidebar-menu > li:last-child > a { border-bottom: 0 !important; } .page-sidebar .page-sidebar-menu > li .sub-menu { background-color: #28303b !important; } .page-sidebar .page-sidebar-menu .sidebar-search input { background-color: #28303b !important; } .page-sidebar .page-sidebar-menu.page-sidebar-menu-light { /* 1st level links */ } .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li:hover > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.open > a { background: #2e3744; } .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a { background: #2e3744; } .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a:hover, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a:hover { background: #2e3744; } .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu { background: #28303b !important; } .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li:hover > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.open > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.active > a { background: #2e3744 !important; } } @media (max-width: 480px) { /* 480px */ .page-header.navbar { /* Top menu */ } .page-header.navbar .top-menu { background-color: #364150; } .page-header-fixed-mobile .page-header.navbar .top-menu { background-color: #2b3643; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle { background-color: #415265; } .page-header-fixed-mobile .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle { background: none; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle:hover { background-color: #3f4f62; } } /**** Boby ****/ body { background-color: #364150; } /**** CSS3 Spinner Bar ****/ .page-spinner-bar > div, .block-spinner-bar > div { background: #4bccd8; } ================================================ FILE: resources/assets/static/src/themes/global/error.css ================================================ /* Cubic Bezier Transition */ /*** Error Pages ***/ /* 404 page option #1 */ .page-404 { text-align: center; } .page-404 .number { position: relative; top: 35px; display: inline-block; letter-spacing: -10px; margin-top: 0px; margin-bottom: 10px; line-height: 128px; font-size: 128px; font-weight: 300; color: #7bbbd6; text-align: right; } .page-404 .details { margin-left: 40px; display: inline-block; padding-top: 0px; text-align: left; } /* 500 page option #1 */ .page-500 { text-align: center; } .page-500 .number { display: inline-block; letter-spacing: -10px; line-height: 128px; font-size: 128px; font-weight: 300; color: #ec8c8c; text-align: right; } .page-500 .details { margin-left: 40px; display: inline-block; text-align: left; } /* 404 page option #2*/ .page-404-full-page { overflow-x: hidden; padding: 20px; margin-bottom: 20px; background-color: #fafafa !important; } .page-404-full-page .details input { background-color: #ffffff; } .page-404-full-page .page-404 { margin-top: 100px; } /* 500 page option #2*/ .page-500-full-page { overflow-x: hidden; padding: 20px; background-color: #fafafa !important; } .page-500-full-page .details input { background-color: #ffffff; } .page-500-full-page .page-500 { margin-top: 100px; } /* 404 page option #3*/ .page-404-3 { background: #000 !important; } .page-404-3 .page-inner img { right: 0; bottom: 0; z-index: -1; position: absolute; } .page-404-3 .error-404 { color: #fff; text-align: left; padding: 70px 20px 0; } .page-404-3 h1 { color: #fff; font-size: 130px; line-height: 160px; } .page-404-3 h2 { color: #fff; font-size: 30px; margin-bottom: 30px; } .page-404-3 p { color: #fff; font-size: 16px; } @media (max-width: 480px) { .page-404 .number, .page-500 .number, .page-404 .details, .page-500 .details { text-align: center; margin-left: 0px; } .page-404-full-page .page-404 { margin-top: 30px; } .page-404-3 .error-404 { text-align: left; padding-top: 10px; } .page-404-3 .page-inner img { right: 0; bottom: 0; z-index: -1; position: fixed; } } ================================================ FILE: resources/assets/static/src/themes/global/img/flags/readme.txt ================================================ Flag icons - http://www.famfamfam.com These icons are public domain, and as such are free for any use (attribution appreciated but not required). Note that these flags are named using the ISO3166-1 alpha-2 country codes where appropriate. A list of codes can be found at http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 If you find these icons useful, please donate via paypal to mjames@gmail.com (or click the donate button available at http://www.famfamfam.com/lab/icons/silk) Contact: mjames@gmail.com ================================================ FILE: resources/assets/static/src/themes/global/layout.css ================================================ @charset "UTF-8"; /* Cubic Bezier Transition */ @media print { body { background-color: #fff !important; } .page-bar { display: none; } .page-sidebar-wrapper { display: none; } .page-quick-sidebar-wrapper { display: none; } .theme-panel { display: none; } .hidden-print { display: none; } .page-footer { display: none; } .no-page-break { page-break-after: avoid; } .page-container { margin: 0px !important; padding: 0px !important; } .page-content { padding: 0 !important; min-height: 300px !important; padding: 0px 20px 20px !important; margin: 0 !important; } } /*** Page Header ***/ .page-header.navbar { width: 100%; padding: 0 20px 0 20px; margin: 0; border: 0px; padding: 0px; box-shadow: none; height: 50px; min-height: 50px; filter: none; background-image: none; /* Fixed header */ /* Header logo */ /* Search box */ /* Menu Toggler */ /* Top menu */ } .page-header.navbar.navbar-fixed-top { z-index: 9995; } .page-header.navbar.navbar-static-top { z-index: 9995; } .page-header.navbar .page-logo { float: left; display: block; width: 235px; height: 50px; padding-left: 20px; padding-right: 20px; } .page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo { padding: 0; } .page-header.navbar .page-logo > .logo-image, .page-header.navbar .page-logo > a { display: inline-block; float: left; } .page-header.navbar .page-logo .logo-default { margin: 18px 0 0 0; } .page-header.navbar .page-logo .logo-mini { display: none; margin-left: 5px; } .page-header.navbar .page-logo .text-logo { padding-left: 20px; padding-top: 12px; } .page-header.navbar .search-form { display: inline-block; width: 50px; position: relative; float: left; transition: all 0.6s; } .page-header.navbar .search-form .input-group .form-control { height: 50px; border: 0; background: transparent !important; font-size: 13px; padding-left: 0; margin-left: 12px; text-indent: -150000px; } .page-header.navbar .search-form .input-group .form-control:hover { cursor: pointer; } .page-header.navbar .search-form .input-group .input-group-btn { height: 50px; } .page-header.navbar .search-form .input-group .input-group-btn .btn.submit { margin-left: -24px; padding: 0; width: 50px; background: none; margin-top: 4px; display: block; } .page-header.navbar .search-form .input-group .input-group-btn .btn.submit > i { font-size: 15px; } .page-header.navbar .search-form.open { transition: all 0.6s; width: 300px !important; } .page-header.navbar .search-form.open .input-group .form-control { text-indent: 0; } .page-header.navbar .search-form.open .input-group .form-control:hover { cursor: text; } .page-header.navbar .search-form.open .input-group .input-group-btn .btn.submit { margin-left: 0; } .page-header.navbar .menu-toggler { cursor: pointer; opacity: 0.7 ; filter: alpha(opacity=70) ; display: block; webkit-transition: opacity 0.3s; -moz-transition: opacity 0.3s; -ms-transition: opacity 0.3s; -o-transition: opacity 0.3s; transition: opacity 0.3s; } .page-header.navbar .menu-toggler > span { outline: none !important; } .page-header.navbar .menu-toggler > span:hover { background: #ffffff; } .page-header.navbar .menu-toggler > span:hover:before, .page-header.navbar .menu-toggler > span:hover:after { background: #ffffff; } .page-header.navbar .menu-toggler > span, .page-header.navbar .menu-toggler > span:before, .page-header.navbar .menu-toggler > span:after { display: inline-block; width: 16px; height: 1px; background: #ffffff; position: relative; top: -5px; transition: all ease .3s; } .page-header.navbar .menu-toggler > span:before, .page-header.navbar .menu-toggler > span:after { position: absolute; left: 0; content: ''; } .page-header.navbar .menu-toggler > span:before { top: 5px; } .page-header.navbar .menu-toggler > span:after { top: -5px; } .page-header.navbar .menu-toggler.th-toggle-exit > span { background-color: transparent !important; } .page-header.navbar .menu-toggler.th-toggle-exit > span:after { webkit-transform: translateY(5px) rotateZ(45deg); -moz-transform: translateY(5px) rotateZ(45deg); -ms-transform: translateY(5px) rotateZ(45deg); -o-transform: translateY(5px) rotateZ(45deg); transform: translateY(5px) rotateZ(45deg); } .page-header.navbar .menu-toggler.th-toggle-exit > span:before { webkit-transform: translateY(-5px) rotateZ(-45deg); -moz-transform: translateY(-5px) rotateZ(-45deg); -ms-transform: translateY(-5px) rotateZ(-45deg); -o-transform: translateY(-5px) rotateZ(-45deg); transform: translateY(-5px) rotateZ(-45deg); } .page-header.navbar .menu-toggler:hover { webkit-transition: opacity 0.3s; -moz-transition: opacity 0.3s; -ms-transition: opacity 0.3s; -o-transition: opacity 0.3s; transition: opacity 0.3s; opacity: 1 ; filter: alpha(opacity=100) ; } .page-header.navbar .menu-toggler.sidebar-toggler { float: right; margin: 15.5px 0 0 0; } .page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .menu-toggler.sidebar-toggler { margin-right: 13px; } .page-header.navbar .menu-toggler.responsive-toggler { display: none; float: right; margin: 15.5px 6px 0 6px; } .page-header.navbar .top-menu { margin: 0; padding: 0; float: right; } .page-header.navbar .top-menu .navbar-nav { padding: 0; margin-right: 20px; display: block; /* Extended Dropdowns */ /* Notification */ /* Inbox */ /* Tasks */ /* User */ /* Language */ /* Dark version */ } .page-header.navbar .top-menu .navbar-nav > li.dropdown { margin: 0px; padding: 0px 4px; height: 50px; display: inline-block; } .page-header.navbar .top-menu .navbar-nav > li.dropdown:last-child { padding-right: 0px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle { margin: 0px; padding: 19px 10px 10px 10px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle:last-child { padding-right: 0; } .page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle > i { font-size: 17px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle > i.glyphicon { font-size: 16px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle > .badge { font-family: "Open Sans", sans-serif; position: absolute; top: 10px; right: 20px; font-weight: 300; padding: 3px 6px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle:focus { background: none; } .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-menu { margin-top: 3px; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-menu:before { position: absolute; top: -7px; right: 9px; display: inline-block !important; border-right: 7px solid transparent; border-bottom: 7px solid #eee; border-left: 7px solid transparent; border-bottom-color: rgba(0, 0, 0, 0.2); content: ''; } .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-menu:after { position: absolute; top: -6px; right: 10px; display: inline-block !important; border-right: 6px solid transparent; border-bottom: 6px solid #fff; border-left: 6px solid transparent; content: ''; } .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-menu > li > a { color: #555; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu { min-width: 160px; max-width: 275px; width: 275px; z-index: 9995; /* header notifications dropdowns */ } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external { display: block; overflow: hidden; padding: 15px 15px; letter-spacing: 0.5px; -webkit-border-radius: 4px 4px 0 0; -moz-border-radius: 4px 4px 0 0; -ms-border-radius: 4px 4px 0 0; -o-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > h3 { margin: 0; padding: 0; float: left; font-size: 13px; display: inline-block; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > a { display: inline-block; padding: 0; background: none; clear: inherit; font-size: 13px; font-weight: 300; position: absolute; right: 10px; border: 0; margin-top: -1px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > a:hover { text-decoration: none; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list { padding-right: 0 !important; padding-left: 0; list-style: none; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li > a { display: block; clear: both; font-weight: 300; line-height: 20px; white-space: normal; font-size: 13px; padding: 16px 15px 18px; text-shadow: none; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li > a:hover { opacity: 1 ; filter: alpha(opacity=100) ; text-decoration: none; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li:first-child a { border-top: none; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .details { overflow: hidden; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .details .label-icon { margin-right: 10px; -webkit-border-radius: 50%; -moz-border-radius: 50%; -ms-border-radius: 50%; -o-border-radius: 50%; border-radius: 50%; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .details .label-icon i { margin-right: 2px; margin-left: 1px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .details .label-icon .badge { right: 15px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .time { float: right; max-width: 75px; font-size: 11px; font-weight: 400; opacity: 0.7 ; filter: alpha(opacity=70) ; text-align: right; padding: 1px 5px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .photo { float: left; margin: 0 6px 6px 0; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .photo img { height: 40px; width: 40px; -webkit-border-radius: 50% !important; -moz-border-radius: 50% !important; -ms-border-radius: 50% !important; -o-border-radius: 50% !important; border-radius: 50% !important; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .subject { display: block; margin-left: 46px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .subject .from { font-size: 13px; font-weight: 600; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .subject .time { font-size: 12px; font-weight: 400; opacity: 0.5 ; filter: alpha(opacity=50) ; float: right; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .message { display: block !important; font-size: 12px; line-height: 1.3; margin-left: 46px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .task { margin-bottom: 5px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .task .desc { font-size: 13px; font-weight: 300; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .task .percent { float: right; font-weight: 600; display: inline-block; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .progress { display: block; height: 8px; margin: 8px 0 2px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .progress .progress-bar { box-shadow: none; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle { padding: 16px 6px 13px 8px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle > .username { display: inline-block; font-size: 13px; font-weight: 300; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle > img { float: left; margin-top: -5px; margin-right: 5px; height: 29px; display: inline-block; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle > i { display: inline-block; margin-top: 5px; margin: 0; font-size: 13px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-menu { width: 175px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-menu > li > a { font-size: 14px; font-weight: 300; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-menu > li > a i { width: 15px; display: inline-block; margin-right: 9px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-menu > li > a .badge { margin-right: 10px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-language { padding-left: 0; padding-right: 0; margin: 0; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-toggle { padding: 16px 3px 13px 7px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-toggle > img { margin-bottom: 2px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-toggle > i { font-size: 14px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-menu > li > a { font-size: 13px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-menu > li > a > img { margin-bottom: 2px; margin-right: 5px; } .page-header.navbar .top-menu .navbar-nav li.dropdown-dark .dropdown-menu:before { border-left: none; border-right: none; } .page-header.navbar .top-menu .navbar-nav li.dropdown-dark .dropdown-menu .dropdown-menu-list > li.external a { background: none !important; border: none !important; } /* Allow expanded search for above 768px */ @media (min-width: 768px) { /* 768px */ .page-header.navbar { /* Search box */ } .page-header.navbar .search-form.search-form-expanded { width: 200px; } .page-header.navbar .search-form.search-form-expanded .input-group .form-control { text-indent: 0; } .page-header.navbar .search-form.search-form-expanded .input-group .form-control:hover { cursor: text; } .page-header.navbar .search-form.search-form-expanded .input-group .input-group-btn .btn.submit { margin-left: 0; } } /*** Horizontal Menu ***/ .page-header.navbar { /* Header container */ /* Mega menu */ } .page-header.navbar .container { position: relative; } .page-header.navbar .hor-menu { margin: 0 0 0 -17px; margin: 0; float: left; } .page-header.navbar .hor-menu .navbar-nav { position: static; /* Mega menu */ /* Mega Menu Dropdown */ /* Classic menu */ } .page-header.navbar .hor-menu .navbar-nav.navbar-right .dropdown-menu { left: auto; right: 0; } .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown { position: static; } .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu { left: auto; width: auto; } .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content { font-family: "Open Sans", sans-serif; padding: 15px; margin: 0; } .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content.mega-menu-responsive-content { padding: 10px 18px 10px 45px; } .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu { padding: 0; margin: 0; } .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu:last-child { border-right: 0; } .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li { margin: 0 !important; list-style: none; } .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > h3 { margin-top: 5px; padding-left: 6px; font-size: 15px; font-weight: 400; } .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a { display: block; white-space: normal; font-family: "Open Sans", sans-serif; padding: 7px; margin: 0; font-size: 14px; font-weight: 300; } .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a:hover { text-decoration: none; } .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a.iconify { padding: 7px 7px 7px 30px; } .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a.iconify > i { position: absolute; top: auto !important; margin-left: -24px; font-size: 15px; margin-top: 3px !important; } .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a .badge, .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a .label { margin-left: 5px; } .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown.mega-menu-full .dropdown-menu { left: 20px; right: 20px; } .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown:hover > .dropdown-menu { display: block; } .page-header.navbar .hor-menu .navbar-nav > li.menu-dropdown .dropdown-menu:after, .page-header.navbar .hor-menu .navbar-nav > li.menu-dropdown .dropdown-menu:before { display: none !important; } .page-header.navbar .hor-menu .navbar-nav > li > a { font-size: 14px; font-weight: 400; padding: 13px 13px; } .page-header.navbar .hor-menu .navbar-nav > li > a:focus { background: none !important; } .page-header.navbar .hor-menu .navbar-nav > li.current .selected, .page-header.navbar .hor-menu .navbar-nav > li.active .selected { left: 50%; bottom: 0; position: absolute; border-left: 6px solid transparent; border-right: 6px solid transparent; border-top: 6px solid transparent; display: inline-block; margin: 0; width: 0; height: 0px; margin-left: -7px; margin-bottom: -6px; } .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu { margin-top: 0; border: none; } .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a { font-family: "Open Sans", sans-serif; font-size: 14px; font-weight: 300; padding: 9px 10px; white-space: normal; } .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a .label, .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a .badge { font-weight: 300; } .page-header.navbar .hor-menu .navbar-nav > li.classic-menu-dropdown .dropdown-menu { min-width: 195px; max-width: 235px; } .page-header.navbar .hor-menu .navbar-nav > li.classic-menu-dropdown:hover > .dropdown-menu { display: block; } .page-header.navbar .hor-menu .navbar-nav > li .dropdown-submenu > .dropdown-menu { top: 0; } .page-header.navbar .hor-menu .navbar-nav > li .dropdown-submenu > a:after { top: 9px; right: 10px; } /* Form medium devices upto large devices */ @media (min-width: 992px) and (max-width: 1200px) { /* 992px 1200px */ /* Boxed layout */ .page-boxed .page-header.navbar { /* Top menu */ } .page-boxed .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle .username.username-hide-on-mobile { display: none; } .page-boxed .page-header.navbar .top-menu .navbar-nav > li.dropdown-language .dropdown-toggle .langname { display: none; } } @media (min-width: 992px) { /* 992px */ /* Page header */ .page-header.navbar { /* Header logo */ } .page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo { padding: 0; } .page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo { width: 45px; } .page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo .logo-default { display: none; } /* Boxed Layout */ .page-boxed .page-header.navbar { /* Page logo */ /* Top menu */ } .page-boxed .page-header.navbar .page-logo { width: 236px; } .page-boxed .page-header.navbar .top-menu .navbar-nav { margin-right: 0px; } /* Sidebar closed & logo hidden */ .page-sidebar-closed.page-sidebar-closed-hide-logo.page-boxed .page-header.navbar { /* Page logo */ } .page-sidebar-closed.page-sidebar-closed-hide-logo.page-boxed .page-header.navbar .page-logo { width: 46px; } /* Boxed layout & page sidebar fixed layout */ .page-boxed.page-sidebar-fixed .page-header.navbar { /* Page logo */ } .page-boxed.page-sidebar-fixed .page-header.navbar .page-logo { width: 235px; } } @media (max-width: 991px) { /* 991px */ /* Page header */ .page-header.navbar { padding: 0 20px 0 20px; position: relative; clear: both; /* Page logo */ /* Menu Toggler */ /* Top Menu */ } .page-header.navbar .page-logo { width: auto; padding: 0; margin-right: 10px; margin-left: 0px !important; padding-left: 0px !important; } .page-header.navbar .page-logo img { margin-left: 4px !important; } .page-header.navbar .menu-toggler.sidebar-toggler { display: none !important; } .page-header.navbar .menu-toggler.responsive-toggler { display: inline-block; } .page-header.navbar .top-menu .navbar-nav { display: inline-block; margin: 0 10px 0 0; } .page-header.navbar .top-menu .navbar-nav > li { float: left; } .page-header.navbar .top-menu .navbar-nav .nav li.dropdown i { display: inline-block; position: relative; top: 1px; right: 0px; } .page-header.navbar .top-menu .navbar-nav .open .dropdown-menu { position: absolute; } /* Fixed header for mobile */ .page-header-fixed.page-header-fixed-mobile .navbar-fixed-top { position: fixed; } /* Boxed Layout */ .page-boxed .page-header.navbar > .container { max-width: none !important; margin: 0 !important; padding: 0 !important; } } @media (min-width: 768px) and (max-width: 991px) { /* 768px & 991px */ /* Boxed Layout */ .page-boxed .page-header.navbar { margin: auto !important; padding: 0; } .page-boxed .page-header.navbar > .container { margin: auto !important; } } @media (max-width: 767px) { /* 767px */ /* Page header */ .page-header.navbar { padding: 0 10px 0 10px; /* Header logo */ /* Search box */ /* Top navigation menu*/ } .page-header.navbar .page-logo { width: auto; } .page-header.navbar .search-form.open { z-index: 3; left: 10px; right: 10px; position: absolute; width: auto !important; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended > .dropdown-menu { max-width: 255px; width: 255px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu { margin-right: -190px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu:after, .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu:before { margin-right: 190px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox .dropdown-menu { margin-right: -150px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox .dropdown-menu:after, .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox .dropdown-menu:before { margin-right: 150px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu { margin-right: -110px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu:after, .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu:before { margin-right: 110px; } } @media (max-width: 580px) { /* Page header */ .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle .username.username-hide-on-mobile { display: none; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-language .dropdown-toggle .langname { display: none; } } @media (max-width: 480px) { /* 480px */ /* Fixed header for mobile */ .page-header-fixed.page-header-fixed-mobile .page-header.navbar { height: 100px; } .page-header.navbar { /* Top menu */ } .page-header.navbar .top-menu { display: block; clear: both; float: none; } .page-header.navbar .top-menu .navbar-nav { margin-right: 0; } .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle { padding: 19px 6px 10px 6px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-language .dropdown-toggle { padding: 16px 4px 13px 2px; } .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle { padding: 16px 0px 13px 2px; } } /*** Pace - Page Progress ***/ .pace .pace-progress { z-index: 10005; top: 50px; height: 2px; box-shadow: none; } .pace .pace-progress-inner { box-shadow: none; } .pace .pace-inactive { display: none; } .pace .pace-activity { top: 54px; z-index: 10005; right: 20px; border-radius: 10px !important; } @media (max-width: 480px) { /* 480px */ .page-header-fixed .pace .pace-progress { top: 100px; } .page-header-fixed .pace .pace-activity { top: 104px; } } /*** Page container ***/ .page-container { margin: 0px; padding: 0px; position: relative; /* Fixed header */ /* Fixed footer for mobile */ } .page-container:before, .page-container:after { content: " "; display: table; } .page-container:after { clear: both; } .page-header-fixed .page-container { margin-top: 50px; } .page-footer-fixed.page-footer-fixed-mobile .page-container { margin-bottom: 20px !important; } @media (min-width: 992px) { /* Page container in fixed footer */ .page-footer-fixed .page-container { margin-bottom: 20px !important; } } @media (max-width: 991px) { /* Page container */ .page-container { margin: 0 !important; padding: 0 !important; } .page-header-fixed.page-header-fixed-mobile .page-container { margin-top: 50px !important; } } @media (max-width: 480px) { /* Page container */ .page-header-fixed.page-header-fixed-mobile .page-container { margin-top: 100px !important; } } /*** Page sidebar ***/ /* Page Sidebar */ .page-sidebar, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover { /* Default sidebar menu */ /* light sidebar menu */ } .page-sidebar.navbar-collapse, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover.navbar-collapse { padding: 0; box-shadow: none; } .page-sidebar .page-sidebar-menu, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu { list-style: none; margin: 0; padding: 0; /* 1st level links */ /* all links */ } .page-sidebar .page-sidebar-menu > li, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li { display: block; margin: 0; padding: 0; border: 0px; } .page-sidebar .page-sidebar-menu > li.sidebar-toggler-wrapper, .page-sidebar .page-sidebar-menu > li.sidebar-search-wrapper, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-toggler-wrapper, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-search-wrapper { border: 0 !important; } .page-sidebar .page-sidebar-menu > li.sidebar-toggler-wrapper:before, .page-sidebar .page-sidebar-menu > li.sidebar-toggler-wrapper:after, .page-sidebar .page-sidebar-menu > li.sidebar-search-wrapper:before, .page-sidebar .page-sidebar-menu > li.sidebar-search-wrapper:after, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-toggler-wrapper:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-toggler-wrapper:after, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-search-wrapper:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-search-wrapper:after { content: " "; display: table; } .page-sidebar .page-sidebar-menu > li.sidebar-toggler-wrapper:after, .page-sidebar .page-sidebar-menu > li.sidebar-search-wrapper:after, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-toggler-wrapper:after, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-search-wrapper:after { clear: both; } .page-sidebar .page-sidebar-menu > li.start > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.start > a { border-top-color: transparent !important; } .page-sidebar .page-sidebar-menu > li.last > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.last > a { border-bottom-color: transparent !important; } .page-sidebar .page-sidebar-menu > li > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a { display: block; position: relative; margin: 0; border: 0px; padding: 10px 15px; text-decoration: none; font-size: 14px; font-weight: 300; } .page-sidebar .page-sidebar-menu > li > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i { font-size: 16px; margin-right: 5px; text-shadow: none; } .page-sidebar .page-sidebar-menu > li > a > i.glyphicon, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i.glyphicon { margin-left: 1px; margin-right: 4px; } .page-sidebar .page-sidebar-menu > li > a > [class^="icon-"], .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > [class^="icon-"] { margin-left: 1px; margin-right: 4px; } .page-sidebar-fixed .page-sidebar .page-sidebar-menu > li > a, .page-sidebar-fixed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a { transition: all 0.2s ease; } .page-sidebar-reversed.page-sidebar-fixed .page-sidebar .page-sidebar-menu > li > a, .page-sidebar-reversed.page-sidebar-fixed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a { transition: none; } .page-sidebar .page-sidebar-menu > li.heading, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.heading { padding: 15px 15px 15px 15px; } .page-sidebar .page-sidebar-menu > li.heading > h3, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.heading > h3 { margin: 0; padding: 0; font-size: 14px; font-weight: 300; } .page-sidebar .page-sidebar-menu > li.heading + li > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.heading + li > a { border-top: 0; } .page-sidebar .page-sidebar-menu > li.open > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a { font-size: 14px; } .page-sidebar .page-sidebar-menu > li.active > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a { border: none; text-shadow: none; font-size: 14px; } .page-sidebar .page-sidebar-menu > li.active > a > .selected, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .selected { display: block; background-image: none; /* will be set in a theme css file*/ float: right; position: absolute; right: 0px; top: 8px; background: none; width: 0; height: 0; border-top: 12px solid transparent; border-bottom: 12px solid transparent; border-right: 12px solid #ffffff; } .page-sidebar-reversed .page-sidebar .page-sidebar-menu > li.active > a > .selected, .page-sidebar-reversed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .selected { right: auto; left: 0; border-right: 0; border-left: 8px solid #ffffff; } .page-container-bg-solid .page-sidebar .page-sidebar-menu > li.active > a > .selected, .page-container-bg-solid .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .selected { border-color: transparent #eef1f5 transparent transparent; } .page-container-bg-solid.page-sidebar-reversed .page-sidebar .page-sidebar-menu > li.active > a > .selected, .page-container-bg-solid.page-sidebar-reversed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .selected { border-color: transparent transparent transparent #eef1f5; } .page-sidebar .page-sidebar-menu li > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a { position: relative; } .page-sidebar .page-sidebar-menu li > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .arrow:before { float: right; width: 20px; text-align: center; display: inline; font-size: 16px; font-family: FontAwesome; height: auto; content: "\f104"; font-weight: 300; text-shadow: none; position: absolute; top: 4px; right: 14px; } .page-sidebar .page-sidebar-menu li > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .arrow.open:before { content: "\f107"; } .page-sidebar .page-sidebar-menu li > a > .badge, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .badge { float: right; margin-top: 1px; margin-right: 0px; position: absolute; right: 14px; top: 6px; } .page-sidebar .page-sidebar-menu > li > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > .arrow:before { top: 8px; } .page-sidebar .page-sidebar-menu .sub-menu, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu { list-style: none; display: none; padding: 0; margin: 8px 0px 8px 0px; } .page-sidebar .page-sidebar-menu .sub-menu li, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li { background: none; margin: 0px; padding: 0px; margin-top: 1px !important; /* 2nd level sub menu */ } .page-sidebar .page-sidebar-menu .sub-menu li > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > a { display: block; margin: 0; padding: 6px 15px 6px 43px; text-decoration: none; font-size: 14px; font-weight: 300; background: none; } .page-sidebar .page-sidebar-menu .sub-menu li > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > a > i { font-size: 14px; } .page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu { margin: 0; } .page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu > li, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu > li { /* 3rd level sub menu */ } .page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu > li > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu > li > a { padding-left: 60px; } .page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu > li > .sub-menu, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu > li > .sub-menu { margin: 0; } .page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu > li > .sub-menu > li > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu > li > .sub-menu > li > a { padding-left: 80px; } .page-sidebar .page-sidebar-menu .sub-menu.always-open, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu.always-open { display: block; } .page-sidebar .page-sidebar-menu li.active > .sub-menu, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li.active > .sub-menu { display: block; } .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li > a { border: 0; margin: 0; padding-left: 11px; border-left: 4px solid transparent; } .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu { margin: 0; padding: 1px 0; } .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu li > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu li > a { padding-top: 8px; padding-bottom: 8px; } .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu li:first-child, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu li:first-child { margin-top: 0 !important; } .page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li > a, .page-sidebar-reversed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li > a { padding-left: 15px; padding-right: 11px; border-left: 0; border-right: 4px solid transparent; } .page-sidebar .sidebar-toggler, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler { webkit-transition: opacity 0.3s; -moz-transition: opacity 0.3s; -ms-transition: opacity 0.3s; -o-transition: opacity 0.3s; transition: opacity 0.3s; display: block; cursor: pointer; opacity: 0.7 ; filter: alpha(opacity=70) ; padding: 6px 8px; margin-top: 15px; margin-right: 16px; float: right; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .page-sidebar .sidebar-toggler > span, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span { outline: none !important; } .page-sidebar .sidebar-toggler > span:hover, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:hover { background: #ffffff; } .page-sidebar .sidebar-toggler > span:hover:before, .page-sidebar .sidebar-toggler > span:hover:after, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:hover:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:hover:after { background: #ffffff; } .page-sidebar .sidebar-toggler > span, .page-sidebar .sidebar-toggler > span:before, .page-sidebar .sidebar-toggler > span:after, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:after { display: inline-block; width: 16px; height: 1px; background: #ffffff; position: relative; top: -5px; transition: all ease .3s; } .page-sidebar .sidebar-toggler > span:before, .page-sidebar .sidebar-toggler > span:after, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:after { position: absolute; left: 0; content: ''; } .page-sidebar .sidebar-toggler > span:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:before { top: 5px; } .page-sidebar .sidebar-toggler > span:after, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:after { top: -5px; } .page-sidebar .sidebar-toggler.th-toggle-exit > span, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler.th-toggle-exit > span { background-color: transparent !important; } .page-sidebar .sidebar-toggler.th-toggle-exit > span:after, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler.th-toggle-exit > span:after { webkit-transform: translateY(5px) rotateZ(45deg); -moz-transform: translateY(5px) rotateZ(45deg); -ms-transform: translateY(5px) rotateZ(45deg); -o-transform: translateY(5px) rotateZ(45deg); transform: translateY(5px) rotateZ(45deg); } .page-sidebar .sidebar-toggler.th-toggle-exit > span:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler.th-toggle-exit > span:before { webkit-transform: translateY(-5px) rotateZ(-45deg); -moz-transform: translateY(-5px) rotateZ(-45deg); -ms-transform: translateY(-5px) rotateZ(-45deg); -o-transform: translateY(-5px) rotateZ(-45deg); transform: translateY(-5px) rotateZ(-45deg); } .page-sidebar .sidebar-toggler:hover, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler:hover { webkit-transition: opacity 0.3s; -moz-transition: opacity 0.3s; -ms-transition: opacity 0.3s; -o-transition: opacity 0.3s; transition: opacity 0.3s; opacity: 1 ; filter: alpha(opacity=100) ; } .page-sidebar .sidebar-search, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search { padding: 0; margin: 22px 18px 22px 18px; } .page-sidebar .sidebar-search .remove, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .remove { display: none; } .page-sidebar .sidebar-search .remove > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .remove > i { font-size: 16px; } .page-sidebar .sidebar-search .input-group, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group { -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .page-sidebar .sidebar-search .input-group .form-control, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control { border: 0; font-size: 14px; padding: 0; height: auto; line-height: auto; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .page-sidebar .sidebar-search .input-group .input-group-btn .btn, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .input-group-btn .btn { padding: 2px 0 0 0; background-color: transparent; background-repeat: no-repeat; background-position: 100% 3px; } .page-sidebar .sidebar-search .input-group .input-group-btn .btn > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .input-group-btn .btn > i { font-size: 15px; } .page-sidebar .sidebar-search.sidebar-search-bordered, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered { margin: 25px 18px 25px 18px; } .page-sidebar .sidebar-search.sidebar-search-bordered .input-group .form-control, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered .input-group .form-control { font-size: 13px; padding: 6px 8px; } .page-sidebar .sidebar-search.sidebar-search-bordered .input-group .input-group-btn .btn, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered .input-group .input-group-btn .btn { margin-right: 6px; } @media (min-width: 992px) { /* 992px */ .page-sidebar { width: 235px; float: left; position: relative; margin-right: -100%; } .page-full-width .page-sidebar { display: none !important; } .page-sidebar.collapse { display: block; max-height: none !important; } .page-sidebar-reversed .page-sidebar { float: right; margin-right: 0; margin-left: -100%; } .page-sidebar-reversed.page-sidebar-fixed .page-sidebar { margin-left: -235px; } .page-sidebar-reversed.page-sidebar-fixed .page-sidebar-wrapper { position: relative; float: right; } .page-sidebar-fixed .page-sidebar { position: fixed !important; margin-left: 0; top: 50px; } .page-sidebar-fixed .page-sidebar-menu > li.last { margin-bottom: 15px !important; } .page-sidebar-fixed .page-sidebar-menu .sub-menu { height: auto !important; } /* Sidebar Closed */ .page-sidebar-closed .page-sidebar { width: 45px !important; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed { /* sidebar */ width: 45px !important; /* sidebar toggler */ /* sidebar search */ /* sidebar bordered search */ /* sidebar search expanded */ /* sidebar bordered search expanded */ } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li { /* hide opened sub menu */ } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.open > .sub-menu, .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > .sub-menu { display: none !important; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover { width: 256px !important; position: relative !important; z-index: 10000; display: block !important; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a { -webkit-border-radius: 0 4px 0 0; -moz-border-radius: 0 4px 0 0; -ms-border-radius: 0 4px 0 0; -o-border-radius: 0 4px 0 0; border-radius: 0 4px 0 0; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > i { margin-right: 10px; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > .title { display: inline !important; padding-left: 15px; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > .badge { display: block !important; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > .selected { display: none; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover.heading { width: 45px !important; box-shadow: none; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu { width: 210px; position: absolute; z-index: 2000; left: 46px; margin-top: 0; top: 100%; display: block !important; -webkit-border-radius: 0 0 4px 4px; -moz-border-radius: 0 0 4px 4px; -ms-border-radius: 0 0 4px 4px; -o-border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu > li > a { padding-left: 15px !important; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu > li > .sub-menu > li > a { padding-left: 30px !important; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu > li > .sub-menu > li > .sub-menu > li > a { padding-left: 45px !important; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.heading > h3 { display: none; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-toggler-wrapper .sidebar-toggler { margin-right: 8px; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-toggler-wrapper:hover { width: 45px !important; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-search-wrapper:hover { width: 45px !important; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a { padding-left: 11px; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a .selected { right: -3px !important; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a > .badge, .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a > .title, .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a > .arrow { display: none !important; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-toggler { margin-left: 3px; margin-right: 3px; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search .input-group { border-color: transparent; margin-left: -4px; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search .input-group .form-control { display: none; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search .input-group .input-group-btn .btn { display: block; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.sidebar-search-bordered .input-group { padding: 5px 0 3px 0; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open { height: 40px; margin-top: 15px; margin-bottom: 14px; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group { width: 210px; position: relative; z-index: 1; margin-left: 24px; padding: 0; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group .form-control { background: none; border: 0; display: block; padding: 8px 8px; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group .input-group-btn .btn { display: block; margin-right: 8px; margin-top: 1px; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .remove { background-repeat: no-repeat; width: 11px; height: 11px; margin: 10px -5px 8px -7px; display: block; float: left; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open.sidebar-search-bordered { height: 38px; margin-top: 23px; margin-bottom: 23px; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open.sidebar-search-bordered .input-group { padding: 0; } .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-closed > li > a { padding-right: 11px; padding-left: 7px; } .page-sidebar-closed.page-sidebar-reversed .page-sidebar { margin-left: -45px; width: 45px; } .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed { /* sidebar */ /* sidebar search */ } .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > .sub-menu { left: auto; right: 46px; } .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover { margin-left: -211px; } .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a { -webkit-border-radius: 4px 0 0 0; -moz-border-radius: 4px 0 0 0; -ms-border-radius: 4px 0 0 0; -o-border-radius: 4px 0 0 0; border-radius: 4px 0 0 0; } .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > .title { padding-left: 0; padding-right: 15px; } .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > i { margin-right: 0; margin-left: 2px; } .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-search-wrapper:hover, .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-toggler-wrapper:hover { margin-left: 0; } .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group { margin-left: -227px; } .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group .input-group-btn .btn { margin-right: 10px !important; } .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .remove { margin: 9px 4px 12px -16px !important; float: right !important; } .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-closed > li > a { padding-right: 7px; padding-left: 11px; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover { width: 235px !important; display: block; z-index: 10000; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu { width: 235px !important; } .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .selected { display: none !important; } .page-sidebar-closed.page-sidebar-fixed.page-sidebar-reversed .page-sidebar:hover { width: 235px !important; z-index: 10000; margin-left: -235px !important; } .page-sidebar-closed.page-sidebar-fixed.page-sidebar-reversed .page-sidebar:hover .page-sidebar-menu { width: 235px !important; } .page-sidebar-closed.page-sidebar-hide .page-sidebar { display: none !important; } /* Sidebar Menu Wirh Hoverable Submenu */ .page-sidebar-menu.page-sidebar-menu-hover-submenu li .sub-menu { display: none; width: 210px; z-index: 2000; position: absolute; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .page-sidebar-menu.page-sidebar-menu-hover-submenu li .sub-menu > li > a { margin: 3px; } .page-sidebar-menu.page-sidebar-menu-hover-submenu li.active .sub-menu, .page-sidebar-menu.page-sidebar-menu-hover-submenu li.open .sub-menu { display: none !important; } .page-sidebar-menu.page-sidebar-menu-hover-submenu li a > .arrow { display: none; } .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > a > .arrow { display: block; float: right; position: absolute; right: 0; margin-top: -20px; background: none; width: 0; height: 0; border-style: solid; border-top: 12px double transparent; border-bottom: 12px double transparent; border-left: 0; } .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > a > .arrow:after, .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > a > .arrow:before { display: none; } .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > a > .arrow { right: auto; left: 0; border-right: 0; } .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > .sub-menu { display: inline-block !important; } .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > a > .arrow { z-index: 1; right: 0px; margin-top: -23px; } .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > a > .selected { display: none; } .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu { margin-left: 235px; margin-top: -40px; } .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu { margin-left: -210px !important; } .page-sidebar-closed .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu { margin-left: 0; } .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu > li > a { padding-left: 15px; } .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu > li .sub-menu { margin-left: 210px; margin-top: -38px !important; } .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu > li .sub-menu { margin-left: -210px !important; } .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu > li .sub-menu > li > a { padding-left: 10px; padding-right: 10px; } .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-hover-submenu li:hover > .sub-menu { margin-top: -41px; } .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-hover-submenu li:hover > .sub-menu > li > .sub-menu { margin-top: -41px; } } @media (max-width: 991px) { /* 991px */ .page-sidebar { border-top: 0 !important; margin: 20px; } .page-sidebar .sidebar-toggler { display: none; } .page-sidebar .selected { display: none !important; } .page-sidebar.navbar-collapse { max-height: none; /* set some max height to have a scrollable menu on mobile devices */ } .page-sidebar.navbar-collapse.collapse { display: none !important; } .page-sidebar.navbar-collapse.in { border-top: 0 !important; margin: 20px; position: relative; overflow: hidden !important; overflow-y: auto !important; display: block !important; } .page-sidebar.navbar-collapse.navbar-no-scroll { max-height: none !important; } .page-sidebar .mega-menu-responsive-content { padding: 10px 18px 10px 45px; } .page-full-width .page-sidebar-menu { display: block; } } @media (min-width: 768px) and (max-width: 991px) { /* 768px & 991px */ .page-sidebar .btn-navbar.collapsed .arrow { display: none; } .page-sidebar .btn-navbar .arrow { position: absolute; right: 25px; width: 0; height: 0; top: 50px; border-bottom: 15px solid #5f646b; border-left: 15px solid transparent; border-right: 15px solid transparent; } } @media (max-width: 480px) { /* 480px */ /* Page sidebar */ .page-sidebar, .page-sidebar.in { margin: 0 10px 10px 10px !important; } .page-header-fixed.page-header-fixed-mobile .page-sidebar, .page-header-fixed.page-header-fixed-mobile .page-sidebar.in { margin-top: 10px !important; } } /*** Page content ***/ /* Page title */ .page-title { padding: 0px; font-size: 28px; letter-spacing: -1px; display: block; color: #666; margin: 0px 0px 15px 0px; font-weight: 300; /* subtitle */ } .page-title small { font-size: 14px; letter-spacing: 0px; font-weight: 300; color: #888; } .page-content-white .page-title, .page-container-bg-solid .page-title { color: #666; margin-bottom: 20px; margin-top: 20px; } .page-content-white .page-title small, .page-container-bg-solid .page-title small { color: #666; } .page-content-white .page-title { margin: 25px 0; font-size: 24px; } /* Page breadcrumb */ .page-bar { padding: 0px; background-color: #f1f4f7; margin-bottom: 25px; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .page-bar:before, .page-bar:after { content: " "; display: table; } .page-bar:after { clear: both; } .page-bar .page-breadcrumb { display: inline-block; float: left; padding: 8px; margin: 0; list-style: none; } .page-bar .page-breadcrumb > li { display: inline-block; } .ie8 .page-bar .page-breadcrumb > li { margin-right: 1px; } .page-bar .page-breadcrumb > li > a, .page-bar .page-breadcrumb > li > span { color: #888; font-size: 14px; text-shadow: none; } .page-bar .page-breadcrumb > li > i { color: #aaa; font-size: 14px; text-shadow: none; } .page-bar .page-breadcrumb > li > i[class^="icon-"], .page-bar .page-breadcrumb > li > i[class*="icon-"] { color: gray; } .page-bar .page-toolbar { display: inline-block; float: right; padding: 0; } .page-bar .page-toolbar .btn-fit-height { -webkit-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; -ms-border-radius: 0 4px 4px 0; -o-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0; padding-top: 8px; padding-bottom: 8px; } .page-md .page-bar .page-toolbar .btn-fit-height { padding-top: 9px; padding-bottom: 9px; box-shadow: none !important; } .page-content-white .page-bar, .page-container-bg-solid .page-bar { background-color: #ffffff; position: relative; padding: 0px 20px; margin: -25px -20px 0 -20px; } .page-content-white .page-bar .page-breadcrumb, .page-container-bg-solid .page-bar .page-breadcrumb { padding: 11px 0; } .page-content-white .page-bar .page-breadcrumb > li > a, .page-content-white .page-bar .page-breadcrumb > li > span, .page-container-bg-solid .page-bar .page-breadcrumb > li > a, .page-container-bg-solid .page-bar .page-breadcrumb > li > span { color: #888; } .page-content-white .page-bar .page-breadcrumb > li > i, .page-container-bg-solid .page-bar .page-breadcrumb > li > i { color: #aaa; } .page-content-white .page-bar .page-breadcrumb > li > i.fa-circle, .page-container-bg-solid .page-bar .page-breadcrumb > li > i.fa-circle { font-size: 5px; margin: 0 5px; position: relative; top: -3px; opacity: 0.4 ; filter: alpha(opacity=40) ; } .page-content-white .page-bar .page-breadcrumb > li > i[class^="icon-"], .page-content-white .page-bar .page-breadcrumb > li > i[class*="icon-"], .page-container-bg-solid .page-bar .page-breadcrumb > li > i[class^="icon-"], .page-container-bg-solid .page-bar .page-breadcrumb > li > i[class*="icon-"] { color: #8c8c8c; } .page-content-white .page-bar .page-toolbar, .page-container-bg-solid .page-bar .page-toolbar { padding: 6px 0; } .page-content-white .page-bar .page-toolbar .btn, .page-container-bg-solid .page-bar .page-toolbar .btn { margin-top: -2px; } .page-content-white .page-bar .page-toolbar .btn.btn-sm, .page-container-bg-solid .page-bar .page-toolbar .btn.btn-sm { margin-top: 0px; } /* Page content */ .page-content { margin-top: 0px; padding: 0px; background-color: #fff; } .page-container-bg-solid .page-content { background: #eef1f5; } .page-content-white .page-content .page-bar { border-bottom: 1px solid #e7ecf1; } .page-content-white.page-md .page-content .page-bar, .page-container-bg-solid.page-md .page-content .page-bar { border-radius: 0 !important; } .page-full-width .page-content { margin-left: 0px !important; } @media (min-width: 992px) { /* 992px */ /* Page content */ .page-content-wrapper { float: left; width: 100%; } .page-content-wrapper .page-content { margin-left: 235px; margin-top: 0px; min-height: 600px; padding: 25px 20px 10px 20px; } .page-content-wrapper .page-content.no-min-height { min-height: auto; } .page-sidebar-fixed.page-sidebar-hover-on .page-content-wrapper .page-content { margin-left: 45px; } .page-sidebar-reversed .page-content-wrapper .page-content { margin-left: 0 !important; margin-right: 235px !important; } .page-sidebar-reversed.page-sidebar-fixed.page-sidebar-hover-on .page-content-wrapper .page-content { margin-left: 0; margin-right: 45px; } .page-sidebar-reversed.page-sidebar-closed .page-content-wrapper .page-content { margin-left: 0 !important; margin-right: 45px !important; } .page-sidebar-closed .page-content-wrapper .page-content { margin-left: 45px !important; } .page-sidebar-closed.page-sidebar-hide .page-content-wrapper .page-content { margin-left: 0 !important; } .page-sidebar-closed.page-sidebar-reversed.page-sidebar-hide .page-content-wrapper .page-content { margin-right: 0 !important; } .page-full-width .page-content-wrapper .page-content { margin-left: 0px !important; } } @media (max-width: 991px) { /* 991px */ /* Bg solid content's breadcrumb */ .page-content-white .page-bar, .page-container-bg-solid .page-bar { margin-top: -20px; } /* Boxed page container */ .page-boxed > .container { max-width: none !important; margin: 0 !important; padding: 0 !important; } /* Page content */ .page-content-wrapper .page-content { margin: 0px !important; padding: 20px 20px 20px 20px !important; min-height: 280px; } } @media (min-width: 768px) and (max-width: 991px) { /* 768px & 991px */ /* Boxed page container */ .page-boxed > .container { margin: auto !important; } } @media (max-width: 767px) { /* 767px */ /* Page content */ .page-content-wrapper .page-content { padding: 20px 10px 10px 10px !important; overflow: hidden; /* Page title */ } .page-content-wrapper .page-content .page-title { margin-bottom: 20px; font-size: 18px; } .page-content-wrapper .page-content .page-title small { font-size: 13px; padding-top: 3px; } } @media (max-width: 480px) { /* 480px */ /* Dashboard date range panel */ .page-content-wrapper .page-content .page-title small { display: block; clear: both; } } /*** Page footer ***/ .page-footer { padding: 8px 20px 5px 20px; font-size: 13px; height: 33px; } .page-footer:before, .page-footer:after { content: " "; display: table; } .page-footer:after { clear: both; } .page-footer .page-footer-inner { float: left; display: inline-block; } .page-footer-fixed.page-footer-fixed-mobile .page-footer { position: fixed; left: 0; right: 0; z-index: 10000; bottom: 0; } .page-footer-fixed.page-footer-fixed-mobile.page-sidebar-fixed .page-footer { margin-left: 0 !important; } @media (min-width: 992px) { /* 992px */ /* Default footer */ .page-footer { clear: left; } /* Fixed footer */ .page-footer-fixed .page-footer { position: fixed; left: 0; right: 0; z-index: 10000; bottom: 0; } /* Footer with footer sidebar */ .page-sidebar-fixed.page-sidebar-closed .page-footer { margin-left: 45px; } .page-sidebar-fixed.page-footer-fixed .page-footer { margin-left: 0 !important; } /* Fixed Sidebar */ .page-sidebar-fixed .page-footer { margin-left: 235px; padding: 8px 20px 5px 20px; } /* Boxed page */ .page-boxed .page-footer { padding: 8px 0 5px 0; } .page-boxed.page-sidebar-fixed .page-footer { padding-right: 20px; padding-left: 20px; } /* Page sidebar reversed */ .page-sidebar-reversed.page-sidebar-fixed .page-footer { margin-left: 0; margin-right: 235px; padding: 8px 20px 5px 20px; } .page-sidebar-reversed.page-sidebar-fixed.page-footer-fixed .page-footer { margin-left: 0; margin-right: 0; } .page-sidebar-reversed.page-sidebar-fixed.page-sidebar-closed .page-footer { margin-right: 45px; } } @media (max-width: 991px) { /* 991px */ /* Boxed Layout */ .page-boxed .page-footer { padding-left: 0px; padding-right: 0px; } } @media (max-width: 767px) { /* 767px */ /* Default footer & boxed footer */ .page-footer, .page-boxed .page-footer { padding-left: 10px; padding-right: 10px; } /* Fixed footer */ .page-footer-fixed .page-footer .container { padding-left: 0; padding-right: 0; } } /* Scroll Top Top */ .scroll-to-top { display: inline-block; padding: 1px; text-align: center; position: fixed; bottom: 10px; z-index: 10001; display: none; right: 10px; } .scroll-to-top > i { display: inline-block; color: #687991; font-size: 30px; opacity: 0.6 ; filter: alpha(opacity=60) ; } .scroll-to-top:hover { cursor: pointer; } .scroll-to-top:hover > i { opacity: 1 ; filter: alpha(opacity=100) ; } @media (min-width: 992px) { /* 992px */ .scroll-to-top { right: 20px; } } @media (max-width: 991px) { /* 991px */ .scroll-to-top { bottom: 10px; right: 10px; } .scroll-to-top > i { font-size: 28px; } } /*** Theme Panel ***/ .theme-panel { width: 420px; margin-top: -13px; margin-right: 0px; z-index: 100; float: right; position: relative; /* content solid bg color */ } .theme-panel > .toggler { top: 4px; right: 0; padding: 20px; cursor: pointer; position: absolute; background: #536881 url(img/icon-color.png) center no-repeat; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .theme-panel > .toggler:hover { background-color: #3f4f62 !important; } .theme-panel > .toggler-close { display: none; top: 4px; right: 0; padding: 20px; z-index: 101; cursor: pointer; position: absolute; background: #2b3643 url(img/icon-color-close.png) center no-repeat !important; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .theme-panel > .toggler-close:hover { background-color: #212933 !important; } .theme-panel > .theme-options { top: 4px; right: 0; display: none; position: absolute; z-index: 100; background: #2b3643; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .theme-panel > .theme-options > .theme-option { color: #c6cfda; padding: 15px; border-top: 1px solid #354353; margin-top: 0px; margin-bottom: 0px; } .theme-panel > .theme-options > .theme-option > span { text-transform: uppercase; display: inline-block; width: 145px; font-size: 13px; font-weight: 300; } .theme-panel > .theme-options > .theme-option > select.form-control { display: inline; width: 135px; padding: 2px; text-transform: lowercase; } .theme-panel > .theme-options > .theme-option.theme-colors { border-top: 0; } .theme-panel > .theme-options > .theme-option.theme-colors > span { display: block; width: auto; } .theme-panel > .theme-options > .theme-option.theme-colors > ul { list-style: none; padding: 0; display: block; margin-bottom: 10px !important; margin-top: 15px; } .theme-panel > .theme-options > .theme-option.theme-colors > ul > li { width: 40px; height: 40px; margin: 0 4px; cursor: pointer; list-style: none; float: left; border: solid 1px #707070; /* theme colors */ } .theme-panel > .theme-options > .theme-option.theme-colors > ul > li:first-child { margin-left: 0; } .theme-panel > .theme-options > .theme-option.theme-colors > ul > li:hover, .theme-panel > .theme-options > .theme-option.theme-colors > ul > li.current { border: solid 2px #d64635; } .theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-default { background: #333438; } .theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-darkblue { background: #2b3643; } .theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-blue { background: #2D5F8B; } .theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-grey { background: #697380; } .theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-light { background: #F9FAFD; } .theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-light2 { background: #F1F1F1; } .page-content-white .theme-panel, .page-container-bg-solid .theme-panel { position: absolute; margin-top: 30px; margin-right: 20px; right: 0; } .page-content-white .theme-panel > .toggler1, .page-container-bg-solid .theme-panel > .toggler1 { background: #BFCAD1 url(img/icon-color.png) center no-repeat; } .page-content-white.page-sidebar-reversed .theme-panel, .page-container-bg-solid.page-sidebar-reversed .theme-panel { margin-right: 255px; } .page-content-white.page-sidebar-reversed.page-sidebar-closed .theme-panel, .page-container-bg-solid.page-sidebar-reversed.page-sidebar-closed .theme-panel { margin-right: 65px; } /****************** Page Quick Sidebar ******************/ /* Quick sidebar toggler */ .page-header .top-menu .dropdown-quick-sidebar-toggler > .dropdown-toggle { padding: 19px 10px 10px 10px !important; } .page-header .top-menu .dropdown-quick-sidebar-toggler > .dropdown-toggle i { top: 0px; } .page-header .top-menu .dropdown-quick-sidebar-toggler > .dropdown-toggle i:before { content: ""/*rtl:""*/; } .page-quick-sidebar-open .page-header .top-menu .dropdown-quick-sidebar-toggler > .dropdown-toggle i:before { content: ""/*rtl:""*/; } /* Page Portlet Fullscreen */ .page-portlet-fullscreen .page-quick-sidebar-wrapper, .page-portlet-fullscreen .page-quick-sidebar-toggler { z-index: -1; } /* Quick sidebar toggler */ .page-quick-sidebar-toggler { overflow: hidden; z-index: 99999; display: none; width: 28px; height: 27px; position: fixed; top: 10px; right: 15px; text-align: center; padding-top: 6px; } .page-quick-sidebar-toggler:hover { background: #303a43; } .page-quick-sidebar-open .page-quick-sidebar-toggler { display: inline-block; } .page-quick-sidebar-open .page-quick-sidebar-toggler:hover { background: none; } .page-quick-sidebar-toggler > i { color: #99a8b5; font-size: 17px; } .page-quick-sidebar-toggler > i:hover { color: #fff !important; } .page-quick-sidebar-open .page-quick-sidebar-toggler > i:before { content: ""/*rtl:""*/; } /* Quick sidebar wrapper */ .page-quick-sidebar-wrapper { transition: right 0.3s; z-index: 10500; position: fixed; top: 0; bottom: 0; width: 320px; right: -320px; overflow: hidden; color: #99a8b5; background: #21282e; } .page-quick-sidebar-open .page-quick-sidebar-wrapper { transition: right 0.3s; right: 0; } .page-quick-sidebar-wrapper .page-quick-sidebar { background: #21282e; /* Quick sidebar tabs content */ /* Quick sidebar general list heading */ /* Quick sidebar general list-items */ /* Inner content */ /* Quick sidebar list */ /* Quick sidebar list item */ /* Quick sidebar list item shown */ /* Quick sidebar chat */ /* Quick sidebar alerts */ /* Quick sidebar settings */ } .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs { margin: 0; padding: 0; border: 0; } .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li { display: table-cell !important; width: 1% !important; padding: 0; margin: 0; float: none; } .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li > a { position: relative; display: block; text-align: center; border: 0; height: auto; font-size: 14px; padding: 45px 15px 8px; text-transform: uppercase; background: none; margin-right: 0; color: #90a1af; border: 0; border-bottom: 3px solid rgba(243, 86, 93, 0.3); -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; outline: none !important; } .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li > a > .badge { position: absolute; top: 45px; right: 3px; } .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li.active > a, .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li:hover > a { border: 0; border-bottom: 3px solid #f3565d; background: none; color: #fff; text-decoration: none; } .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu { border: 0; background: #36424c; box-shadow: 5px 5px rgba(97, 117, 135, 0.1); margin-top: 8px; margin-right: 20px; } .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu:before { position: absolute; top: -7px; right: 19px; display: inline-block !important; border-right: 7px solid transparent; border-left: 7px solid transparent; border-bottom: 7px solid #36424c; content: ''; } .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu:after { position: absolute; top: -6px; right: 20px; display: inline-block !important; border-right: 6px solid transparent; border-left: 6px solid transparent; border-bottom: 7px solid #36424c; content: ''; } .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu > li > a { padding: 10px 15px; color: #99a8b5; } .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu > li > a > i { color: #93a3b1; } .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu > li:hover > a { background: #3d4a55; color: #99a8b5; } .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu > li:hover > a > i { color: #9babb8; } .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu > li.active > a { background: #38444f; color: #99a8b5; } .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu > li.divider { background-color: #3d4a55; } .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li.open > a.dropdown-toggle { border-bottom: 3px solid #f3565d; background: none; text-decoration: none; color: #90a1af; } .page-quick-sidebar-wrapper .page-quick-sidebar .tab-content { margin: 0; padding: 0; } .page-quick-sidebar-wrapper .page-quick-sidebar .list-heading { font-size: 16px; margin: 10px 10px; color: #6c8296; } .page-quick-sidebar-wrapper .page-quick-sidebar .list-items { margin: 0; padding: 0; list-style: none; } .page-quick-sidebar-wrapper .page-quick-sidebar .list-items > li { margin: 0; padding: 15px; background: none; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #273037; } .page-quick-sidebar-wrapper .page-quick-sidebar .list-items > li:hover { background: #273037; } .page-quick-sidebar-wrapper .page-quick-sidebar .list-items > li:last-child { border-bottom: 0; } .page-quick-sidebar-wrapper .page-quick-sidebar .list-items.borderless li { border: 0; } .page-quick-sidebar-wrapper .page-quick-sidebar .inner-content { margin: 10px 10px; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-list { position: absolute !important; width: 320px !important; transition: margin 0.3s; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item { width: 320px; position: absolute !important; width: 320px !important; transition: margin 0.3s; margin-left: 320px; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item .page-quick-sidebar-nav { padding: 15px 10px 0px 10px; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item .page-quick-sidebar-nav .page-quick-sidebar-back-to-list { vertical-align: middle; display: inline-block; font-size: 14px; color: #90a1af; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item .page-quick-sidebar-nav .page-quick-sidebar-back-to-list:hover { text-decoration: none; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item .page-quick-sidebar-nav .page-quick-sidebar-back-to-list > i { font-size: 17px; line-height: 17px; vertical-align: top; margin-right: 3px; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-list { transition: margin 0.3s; margin-left: -320px; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-list .slimScrollBar, .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-list .slimScrollRail { display: none !important; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-item { transition: margin 0.3s; margin-left: 0; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users { padding: 10px 0; position: relative; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media { padding: 15px 15px; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object { border-radius: 50% !important; width: 45.71429px; opacity: 0.8; filter: alpha(opacity=80); float: left; margin-right: 10px; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object:before, .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object:after { content: " "; display: table; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object:after { clear: both; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media:hover { cursor: pointer; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media:hover .media-object { opacity: 1; filter: alpha(opacity=100); } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading { margin: 5px 0 0 0; font-size: 14px; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading-sub { font-size: 11px; text-transform: uppercase; color: #657b8d; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading-small { font-size: 10px; color: #5d7081; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-status { margin-top: 10px; right: 10px; position: absolute; display: inline-block; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages { padding: 0px 10px; position: relative; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post { transition: display 0.3s; padding: 5px 0; margin: 10px auto; font-size: 13px; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .body { color: #c3c3c3; display: block; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .avatar { width: 45.71429px; border-radius: 50% !important; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .avatar { float: left; margin-right: 10px; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .avatar { float: right; margin-left: 10px; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .name { font-size: 12px; font-weight: 300; color: #8496a7; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .datetime { font-size: 12px; font-weight: 300; color: #8496a7; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .message { display: block; padding: 5px; position: relative; color: #90a1af; background: #36424c; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .message { text-align: left; margin-left: 55px; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .message .arrow { display: block; position: absolute; top: 9px; left: -6px; width: 0; height: 0; border-top: 6px solid transparent; border-bottom: 6px solid transparent; border-right-width: 6px; border-right-style: solid; border-right-color: #36424c; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .message { margin-right: 55px; text-align: right; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .message .arrow { display: block; position: absolute; top: 9px; right: -6px; border-top: 6px solid transparent; border-bottom: 6px solid transparent; border-left-width: 6px; border-left-style: solid; border-left-color: #36424c; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .name, .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .datetime { text-align: right; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-form { padding: 20px 10px 15px 10px; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list { padding: 10px 0; position: relative; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li a { color: #7e91a2; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li a .label { margin-top: 5px; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li a .desc { text-decoration: underline; padding: 0; color: #788c9e; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li a .date { color: #5d7081; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list { padding: 10px 0; position: relative; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list .list-items li .bootstrap-switch { margin-top: -3px; float: right; border: 0; min-width: 59px; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list .list-items li .form-control { width: 75px !important; padding: 4px 4px !important; float: right; border: 0; margin-top: -4px; } .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list .list-items li select.form-control { padding: 4px 0px !important; } /*** Page Loading ***/ .page-on-load { background: #fefefe; } .page-on-load .page-header, .page-on-load .page-container, .page-on-load .page-footer, .page-on-load > .clearfix { display: none; transition: all 2s; } ================================================ FILE: resources/assets/static/src/themes/global/plugins.css ================================================ @charset "UTF-8"; /****************************** 3RD PARTY PLUGIN CUSTOMIZATION ******************************/ /* Cubic Bezier Transition */ /*** SELECT2 ***/ .select2-container--bootstrap .select2-search--dropdown .select2-search__field, .select2-container--bootstrap .select2-selection, .select2-container--bootstrap.select2-container--focus .select2-selection, .select2-container--bootstrap.select2-container--open .select2-selection { -webkit-box-shadow: none; box-shadow: none; } .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice__remove { cursor: pointer; display: inline-block; font-weight: 700; margin-right: 3px; } .select2-container--bootstrap .select2-results__group { display: block; font-size: 12px; white-space: nowrap; font-weight: 600; font-family: "Open Sans", sans-serif; } .select2-container--bootstrap .select2-selection { font-family: "Open Sans", sans-serif; } .modal-open .select2-dropdown { z-index: 10060; } .modal-open .select2-close-mask { z-index: 10055; } .modal-open .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field { width: auto !important; } .select2-result-repository { padding-top: 4px; padding-bottom: 3px; } .select2-result-repository__avatar { float: left; width: 60px; margin-right: 10px; } .select2-result-repository__avatar img { width: 100%; height: auto; border-radius: 2px; } .select2-result-repository__meta { margin-left: 70px; } .select2-result-repository__title { color: black; font-weight: bold; word-wrap: break-word; line-height: 1.1; margin-bottom: 4px; } .select2-result-repository__forks, .select2-result-repository__stargazers { margin-right: 1em; } .select2-result-repository__forks, .select2-result-repository__stargazers, .select2-result-repository__watchers { display: inline-block; color: #aaa; font-size: 11px; } .select2-result-repository__description { font-size: 13px; color: #777; margin-top: 4px; } .select2-results__option--highlighted .select2-result-repository__title { color: white; } .select2-results__option--highlighted .select2-result-repository__forks, .select2-results__option--highlighted .select2-result-repository__stargazers, .select2-results__option--highlighted .select2-result-repository__description, .select2-results__option--highlighted .select2-result-repository__watchers { color: #c1d7e9; } ================================================ FILE: resources/assets/static/themes/global/login.css ================================================ /* Cubic Bezier Transition */ /*** Login page ***/ /* logo page */ .login { background-color: #666 !important; } .login .logo { margin: 60px auto 20px auto; padding: 15px; text-align: center; } .login .content { background: url(./img/bg-white-lock.png) repeat; width: 360px; margin: 0 auto; margin-bottom: 0px; padding: 30px; padding-top: 20px; padding-bottom: 15px; -webkit-border-radius: 7px; -moz-border-radius: 7px; -ms-border-radius: 7px; -o-border-radius: 7px; border-radius: 7px; } .login .content h3 { color: #eee; } .login .content h4 { color: #eee; } .login .content p, .login .content label { color: #fff; } .login .mt-checkbox > span:after { border-color: #eee; } .login .content .login-form, .login .content .forget-form { padding: 0px; margin: 0px; } .login .content .form-control { background-color: #fff; } .login .content .forget-form { display: none; } .login .content .register-form { display: none; } .login .content .form-title { font-weight: 300; margin-bottom: 25px; } .login .content .form-actions { background-color: transparent; clear: both; border: 0px; padding: 0px 30px 25px 30px; margin-left: -30px; margin-right: -30px; } .login .content .forget-form .form-actions { border: 0; margin-bottom: 0; padding-bottom: 20px; } .login .content .register-form .form-actions { border: 0; margin-bottom: 0; padding-bottom: 0px; } .login .content .form-actions .rememberme { margin-top: 8px; display: inline-block; } .login .content .form-actions .btn { margin-top: 1px; } .login .content .forget-password { border-top: 1px dotted #eee; margin-top: 25px; } .login .content .create-account { border-top: 1px dotted #eee; padding-top: 10px; margin-top: 15px; } .login .content .create-account a { display: inline-block; margin-top: 5px; } /* select2 dropdowns */ .login .content .select2-container i { display: inline-block; position: relative; color: #ccc; z-index: 1; top: 1px; margin: 4px 4px 0px -1px; width: 16px; height: 16px; font-size: 16px; text-align: center; } .login .content .has-error .select2-container i { color: #b94a48; } .login .content .select2-container a span { font-size: 13px; } .login .content .select2-container a span img { margin-left: 4px; } /* footer copyright */ .login .copyright { text-align: center; margin: 0 auto; padding: 10px; color: #eee; font-size: 13px; } @media (max-width: 480px) { /*** Login page ***/ .login .logo { margin-top: 10px; } .login .content { padding: 30px; width: 222px; } .login .content h3 { font-size: 22px; } .login .checkbox { font-size: 13px; } } ================================================ FILE: resources/assets/static/themes/index/app.css ================================================ /** global start **/ body { font-family: "Open Sans", sans-serif; font-weight: 300; } pre { tab-size: 4; -moz-tab-size: 4; } .page-container { width: 100%; } .page-container > .page-cover { position: absolute; width: 25%; } .page-container > .page-content { position: absolute; width: 100%; padding-left: 25%; overflow: auto; } .page-container > .page-content > .page-content-body { margin-top: 55px; } .navbar-home { margin-left: 25%; } .navbar-default { border: 0; background: #fff; border-bottom: 2px solid #efefef; } .navbar-default .navbar-nav > .active > a { background: #fff; border-bottom: 2px solid #333; } .navbar-default .navbar-nav > .active > a:hover { background: #fff; } .navbar-default .navbar-form .header-search { border-radius: 18px; } .navbar-default .header-user-icon { padding: 8px; } .navbar-default .header-user-icon > img { width: 36px; border-radius: 18px; } .page-container > .page-cover .web-name { position: absolute; left: 16px; bottom: 32px; font-size: 24px; color: #fff; } .page-content-body { overflow: auto; } .inner-page-content { max-width: 640px; margin-top: 75px; } .footer { } .footer .footer-inner { padding: 0 30px 30px; } @media (max-width: 768px ) { .page-cover { display: none; } .page-container > .page-content { padding-left: 0; } .navbar-home { margin-left: 0; } } /** global end **/ /** home page start **/ .page-content-body .tags { margin: 16px 0 32px; } .page-content-body .tags .tag-item { display: inline-block; padding: 4px 8px; color: #333; background: #fff; border: 1px solid #ccc; border-radius: 16px; font-size: 13px; margin-right: 8px; margin-bottom: 8px; text-align: center; vertical-align: middle; white-space: nowrap; text-decoration: none; } .page-content-body .tags .tag-item:hover { background: #e6e6e6; border-color: #adadad; text-decoration: none; } .page-content-body .tags .tag-item.active { color: #fff; background: #5cb85c; border-color: #4cae4c; } .page-content-body .tags .tag-item.active:hover, .page-content-body .tags .tag-item.active:active, .page-content-body .tags .tag-item.active:visited { color: #fff; background: #449d44; border-color: #398439; } .page-content-body .list-item { border-bottom: 1px dashed #cdcdcd; margin-bottom: 16px; } .page-content-body .list-item > .list-item-row { margin-bottom: 12px; } .page-content-body .list-item > .list-item-row.list-sub { font-size: 12px; } .page-content-body .list-item > .list-item-row > .list-title { font-size: 16px; font-weight: 400; color: #666; } .page-content-body .list-item > .list-item-row > .list-title:hover { text-decoration: none; color: #000; } .page-content-body .list-item > .list-item-row .link { } .page-content-body .list-item > .list-item-row .link:hover { text-decoration: none; } /** home page end **/ /** detail page start **/ .like-section button { color: red; } .comments-section { position: relative; } .comments-section .comments-list { list-style: none; margin: 0; padding: 0 0 16px; } .comments-section .comments-list li { margin: 6px 0; padding-bottom: 6px; border-bottom: 1px solid #eee; } .comments-section .comments-list li .user-info { padding: 6px 0 0; } .comments-section .comments-list li .content { padding: 16px 0; } .comments-section .comments-list blockquote { font-size: 13px; } .send-answer-section { position: relative; } .send-answer-content { min-height: 120px; resize: none; padding-bottom: 30px; } .send-answer-btn { bottom: 6px; right: 6px; } .send-answer-length { position: absolute; bottom: 6px; left: 6px; } .send-comment-section { position: relative; } .send-comment-section .send-comment-content { min-height: 120px; resize: none; padding-bottom: 30px; } .send-comment-section .send-comment-btn { position: absolute; bottom: 6px; right: 6px; } .send-comment-section .send-comment-length { position: absolute; bottom: 6px; left: 6px; } /** detail page end **/ /** auth page start **/ .auth > .auth-left { position: inherit; } .auth > .auth-right { position: inherit; } .auth > .auth-right > .auth-content { margin-top: 35%; } .auth-sns-logo { font-size: 26px; border-top: 1px dashed #e3e3e3; padding-top: 16px; } .auth-sns-logo a { display: inline-block; margin: 0 6px; color: #cdcdcd; } .auth-sns-logo a:hover { color: #666; } @media (max-width: 992px ) { .auth-left { position: absolute !important; bottom: 0; } .auth-right { position: absolute !important; top: 0; } .auth-content { margin-top: 0 !important; } } /** auth page end **/ ================================================ FILE: resources/assets/static/themes/index/articles.css ================================================ .article-content { font-size: 16px; line-height: 26px; padding-bottom: 100px; } .article-content img { width: 98%; } ================================================ FILE: resources/npm/package.json ================================================ { "name": "laravel-smart", "version": "1.0.0", "description": "smart + laravel", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [ "smart", "laravel-admin" ], "author": "Zix", "repository": { "type": "git", "url": "git@git.coding.net:HBWYCM/php-whlz.git" }, "license": "MIT", "dependencies": { "block-ui": "^2.70.1", "bootpag": "^1.0.7", "bootstrap": "^3.3.7", "bootstrap-datetime-picker": "^2.4.4", "bootstrap-hover-dropdown": "^2.2.1", "bootstrap-switch": "^3.3.4", "echarts": "^3.7.2", "font-awesome": "^4.7.0", "jcrop-0.9.12": "^0.9.12", "jquery": "^3.2.1", "jquery-slimscroll": "^1.3.8", "jquery.backstretch": "^2.1.15", "jquery.counterup": "^2.1.0", "js-cookie": "^2.1.4", "kindeditor": "^4.1.10", "markdown": "^0.5.0", "moment": "^2.19.1", "normalize.css": "^4.2.0", "owl.carousel": "^2.2.0", "select2": "^4.0.5", "simple-line-icons-webfont": "^4.0.3", "simplemde": "^1.11.2", "toastr": "^2.1.2", "waypoints": "^4.0.1" }, "devDependencies": { "del": "^2.2.0", "fancybox": "^3.0.0", "gulp": "^3.9.1", "gulp-clean-css": "^2.0.6", "gulp-concat": "^2.6.0", "gulp-rename": "^1.2.2", "gulp-uglify": "^1.5.3" } } ================================================ FILE: resources/views/auth/login.blade.php ================================================ @extends('layouts.app') @section('content')
        Login
        {{ csrf_field() }}
        @if ($errors->has('email')) {{ $errors->first('email') }} @endif
        @if ($errors->has('password')) {{ $errors->first('password') }} @endif
        @endsection ================================================ FILE: resources/views/auth/passwords/email.blade.php ================================================ @extends('layouts.app') @section('content')
        Reset Password
        @if (session('status'))
        {{ session('status') }}
        @endif
        {{ csrf_field() }}
        @if ($errors->has('email')) {{ $errors->first('email') }} @endif
        @endsection ================================================ FILE: resources/views/auth/passwords/reset.blade.php ================================================ @extends('layouts.app') @section('content')
        Reset Password
        {{ csrf_field() }}
        @if ($errors->has('email')) {{ $errors->first('email') }} @endif
        @if ($errors->has('password')) {{ $errors->first('password') }} @endif
        @if ($errors->has('password_confirmation')) {{ $errors->first('password_confirmation') }} @endif
        @endsection ================================================ FILE: resources/views/auth/register.blade.php ================================================ @extends('layouts.app') @section('content')
        Register
        {{ csrf_field() }}
        @if ($errors->has('name')) {{ $errors->first('name') }} @endif
        @if ($errors->has('email')) {{ $errors->first('email') }} @endif
        @if ($errors->has('password')) {{ $errors->first('password') }} @endif
        @endsection ================================================ FILE: resources/views/generate/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        {!! form_radios('module',$param['module']) !!}
        {!! csrf_field() !!}

        选择组件

        单个生成
        如: 用户登录
        如: auth
        如: Login
        $item ) :?>

        @stop ================================================ FILE: resources/views/home.blade.php ================================================ @extends('layouts.app') @section('content')
        Dashboard
        @if (session('status'))
        {{ session('status') }}
        @endif You are logged in!
        @endsection ================================================ FILE: resources/views/index/index.blade.php ================================================ @extends('backend::public.layout') @section('content') @stop ================================================ FILE: resources/views/layouts/app.blade.php ================================================ {{ config('app.name', 'Laravel') }}
        @yield('content')
        ================================================ FILE: resources/views/meralbum/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        ID 排序 图片 文件大小 mime类型 图片尺寸 描述 状态  
        @stop ================================================ FILE: resources/views/meralbumcatalog/index.blade.php ================================================ @extends('backend::public.layout') @section('content') @stop ================================================ FILE: resources/views/merfunc/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        ID 名称 模块 排序 是否菜单 是否功能 状态  
        @stop ================================================ FILE: resources/views/mergoodscatalog/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        {!! csrf_field() !!}
        ID 排序 类型 上级 名称 图标 状态  
        @stop ================================================ FILE: resources/views/merrole/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        ID 排序 名称 状态 等级  
        @stop ================================================ FILE: resources/views/merrole/permission.blade.php ================================================
        ================================================ FILE: resources/views/mersysuser/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        ID 头像 用户名 手机号码 状态 创建时间 最后登录  
        @stop ================================================ FILE: resources/views/meruser/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        ID 头像 用户名 模块 手机号码 状态 创建时间 最后登录 测试  
        @stop ================================================ FILE: resources/views/modulefunc/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        {{ $param['pageTitle'] }}
        ID 名称 排序 是否菜单 是否功能 状态  
        @stop ================================================ FILE: resources/views/modulerole/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        ID 排序 名称 状态 等级  
        @stop ================================================ FILE: resources/views/modulerole/permission.blade.php ================================================
        ================================================ FILE: resources/views/public/footer.blade.php ================================================ ================================================ FILE: resources/views/public/header.blade.php ================================================
        ================================================ FILE: resources/views/public/layout.blade.php ================================================ {{ $param['pageTitle'] }} - {{ config('moduleName') }} {!! $css !!} @include('backend::public.header')
        @yield('content')
        @include('backend::public.footer') {!! $js !!} ================================================ FILE: resources/views/public/layout1.blade.php ================================================ {{ $param['pageTitle'] }} - {{ config('moduleName') }} @yield('css' , 'css样式') @yield('header' , '头部')
        {{ $body }}
        @yield('footer' , '底部') @yield('js' , 'js引入') ================================================ FILE: resources/views/public/sidebar_menu.blade.php ================================================ ================================================ FILE: resources/views/simulator/index.blade.php ================================================ @extends('backend::public.layout') @section('content')

        Uri


        Header


        Params


        返回结果


        
                                        
        
                                        
        @stop ================================================ FILE: resources/views/simulator/params.blade.php ================================================
        $item ) :?>
        $row ) :?>

        ================================================ FILE: resources/views/sysapilog/index.blade.php ================================================ @extend('backend::public.layout') @section('content') {!! csrf_field() !!}
         
        @stop ================================================ FILE: resources/views/sysappversion/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        ID 设备 版本 下载地址 更新描述 强制更新 状态 创建时间  
        @stop ================================================ FILE: resources/views/sysarea/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        ID 名称 状态  
        @stop ================================================ FILE: resources/views/sysfunc/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        ID 名称 排序 是否菜单 是否功能 状态  
        @stop ================================================ FILE: resources/views/sysmail/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        ID 类型 收信人 收信地址 主题 验证码 状态 创建时间 发送时间  
        @stop ================================================ FILE: resources/views/sysmerchant/detail.blade.php ================================================ @extends('backend::public.layout') @section('content') @stop ================================================ FILE: resources/views/sysmerchant/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        {!! csrf_field() !!}
        ID 排序 LOGO 名称 电话 联系人 状态  
        @stop ================================================ FILE: resources/views/sysmodules/index.blade.php ================================================ @extends('backend::public.layout') @section('content') {!! csrf_field() !!}
        ID 模块名称 标识 状态 缩略图 版本号 作者 排序序号  
        @stop ================================================ FILE: resources/views/sysmodules/role.blade.php ================================================ @extends('backend::public.layout') @section('content')
        ID 排序 名称 状态 等级  
        @stop ================================================ FILE: resources/views/syspush/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        ID 分类 标题 设备类型 别名 标签 激光ID 附加参数 状态 发送时间 创建时间  
        @stop ================================================ FILE: resources/views/sysrole/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        ID 排序 名称 状态 等级  
        @stop ================================================ FILE: resources/views/sysrole/permission.blade.php ================================================
        ================================================ FILE: resources/views/syssettings/index.blade.php ================================================ @extends('Backend::public.layout') @section('content') {!! csrf_field() !!}
        配置分组 名称 配置类型 配置值 创建时间  
        @stop ================================================ FILE: resources/views/syssettings/sms.blade.php ================================================ @extends('Backend::public.layout') @section('content') {!! csrf_field() !!} @stop ================================================ FILE: resources/views/syssms/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        ID 短信类型 手机号 发送内容 状态 创建时间 验证时间 发送时间  
        @stop ================================================ FILE: resources/views/sysuser/index.blade.php ================================================ @extends('backend::public.layout') @section('content')
        ID 头像 用户名 手机号码 状态 创建时间 最后登录 测试  
        @stop ================================================ FILE: resources/views/welcome.blade.php ================================================ Laravel
        @if (Route::has('login')) @endif
        ================================================ FILE: resources/views/widget/Checkbox.blade.php ================================================ ================================================ FILE: resources/views/widget/File.blade.php ================================================ ================================================ FILE: resources/views/widget/Hidden.blade.php ================================================ ================================================ FILE: resources/views/widget/Image.blade.php ================================================ ================================================ FILE: resources/views/widget/Radio.blade.php ================================================
        @foreach($data as $k=>$v) @endforeach
        ================================================ FILE: resources/views/widget/Text.blade.php ================================================
        {{ $help }}
        ================================================ FILE: resources/views/widget/Textarea.blade.php ================================================ ================================================ FILE: router/routes.php ================================================ strtolower('Backend' ), 'namespace' => 'Smart\\Controllers\\Backend' , 'middleware'=> ['web'] ],function(Router $router ){ $router->group(['prefix' => 'auth','middleware' => ['auth.resetPassword']],function($router){ $router->post('changepassword' , 'AuthController@changePassword'); }); }); Route::group(['prefix' => 'backend/index', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'Index@index'); }); //系统功能 Route::group(['prefix' => 'backend/sysfunc', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'SysFunc@index'); Route::get('read', 'SysFunc@read'); Route::post('update_privilege/{funcId}', 'SysFunc@update_privilege'); Route::post('update/{id}', 'SysFunc@update'); Route::post('insert', 'SysFunc@insert'); Route::post('destroy', 'SysFunc@destroy'); }); //系统角色 Route::group(['prefix' => 'backend/sysrole', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'SysRole@index'); Route::get('read', 'SysRole@read'); Route::post('get_permission', 'SysRole@get_permission'); Route::post('get_privilegedata', 'SysRole@get_privilegeData'); Route::post('update_permission', 'SysRole@update_permission'); Route::post('update/{id}', 'SysRole@update'); Route::post('insert', 'SysRole@insert'); Route::post('destroy', 'SysRole@destroy'); }); //系统用户 Route::group(['prefix' => 'backend/sysuser', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'SysUser@index'); Route::get('read', 'SysUser@read'); Route::post('get_permission', 'SysUser@get_permission'); Route::post('get_privilegedata', 'SysUser@get_privilegeData'); Route::post('update_permission', 'SysUser@update_permission'); Route::post('update/{id}', 'SysUser@update'); Route::post('insert', 'SysUser@insert'); Route::post('destroy', 'SysUser@destroy'); Route::get('reset_pwd/{id}', 'SysUser@reset_pwd'); Route::get('read_album_catalog', 'SysUser@read_album_catalog'); Route::get('read_album', 'SysUser@read_album'); Route::post('upload', 'SysUser@upload'); Route::post('test', 'SysUser@test'); }); //区域管理 Route::group(['prefix' => 'backend/sysarea', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'SysArea@index'); Route::get('read', 'SysArea@read'); Route::post('get_permission', 'SysArea@get_permission'); Route::post('get_privilegedata', 'SysArea@get_privilegeData'); Route::post('update_permission', 'SysArea@update_permission'); Route::post('update/{id}', 'SysArea@update'); Route::post('insert', 'SysArea@insert'); Route::post('destroy', 'SysArea@destroy'); }); //商品分类 Route::group(['prefix' => 'backend/mergoodscatalog', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'MerGoodsCatalog@index'); Route::get('read', 'MerGoodsCatalog@read'); Route::post('get_permission', 'MerGoodsCatalog@get_permission'); Route::post('get_privilegedata', 'MerGoodsCatalog@get_privilegeData'); Route::post('update_permission', 'MerGoodsCatalog@update_permission'); Route::post('update/{id}', 'MerGoodsCatalog@update'); Route::post('insert', 'MerGoodsCatalog@insert'); Route::post('destroy', 'MerGoodsCatalog@destroy'); }); //机构管理 Route::group(['prefix' => 'backend/sysmerchant', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'SysMerchant@index'); Route::get('read', 'SysMerchant@read'); Route::get('read_detail/{id}', 'SysMerchant@read_detail'); Route::get('read_area/{pid}', 'SysMerchant@read_area'); Route::post('update/{id}', 'SysMerchant@update'); Route::post('insert', 'SysMerchant@insert'); Route::post('destroy', 'SysMerchant@destroy'); Route::post('upload', 'SysMerchant@upload'); Route::get('read_album_catalog','SysMerchant@read_album_catalog'); }); //机构功能 Route::group(['prefix' => 'backend/merfunc', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'MerFunc@index'); Route::get('read', 'MerFunc@read'); Route::post('update/{id}', 'MerFunc@update'); Route::post('insert', 'MerFunc@insert'); Route::post('destroy', 'MerFunc@destroy'); Route::post('update_privilege/{funcId}', 'MerFunc@update_privilege'); }); //机构角色 Route::group(['prefix' => 'backend/merrole', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'MerRole@index'); Route::get('read', 'MerRole@read'); Route::post('update/{id}', 'MerRole@update'); Route::post('insert', 'MerRole@insert'); Route::post('destroy', 'MerRole@destroy'); Route::post('get_permission', 'MerRole@get_permission'); Route::post('get_privilegedata', 'MerRole@get_privilegeData'); Route::post('update_permission', 'MerRole@update_permission'); }); //系统用户 Route::group(['prefix' => 'backend/mersysuser', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index/{merId?}', 'MerSysUser@index'); Route::get('read', 'MerSysUser@read'); Route::post('update/{id}', 'MerSysUser@update'); Route::post('insert/{merId}', 'MerSysUser@insert'); Route::post('destroy/{merId}', 'MerSysUser@destroy'); Route::get('reset_pwd/{id}', 'MerSysUser@reset_pwd'); }); Route::group(['prefix' => 'backend/meruser', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'MerUser@index'); Route::get('read', 'MerUser@read'); Route::post('get_permission', 'MerUser@get_permission'); Route::post('get_privilegedata', 'MerUser@get_privilegeData'); Route::post('update_permission', 'MerUser@update_permission'); Route::post('update/{id}', 'MerUser@update'); Route::post('insert', 'MerUser@insert'); Route::post('destroy', 'MerUser@destroy'); Route::get('reset_pwd/{id}', 'MerUser@reset_pwd'); Route::get('read_album_catalog', 'MerUser@read_album_catalog'); Route::post('upload', 'MerUser@upload'); Route::get('read_album', 'MerUser@read_album'); }); //APP版本管理 Route::group(['prefix' => 'backend/sysappversion', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'SysAppVersion@index'); Route::get('read', 'SysAppVersion@read'); Route::post('update/{id}', 'SysAppVersion@update'); Route::post('insert', 'SysAppVersion@insert'); Route::post('destroy', 'SysAppVersion@destroy'); }); //消息推送 Route::group(['prefix' => 'backend/syspush', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'SysPush@index'); Route::get('read', 'SysPush@read'); Route::post('update/{id}', 'SysPush@update'); Route::post('insert', 'SysPush@insert'); Route::post('destroy', 'SysPush@destroy'); }); //短信 Route::group(['prefix' => 'backend/syssms', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'SysSms@index'); Route::get('read', 'SysSms@read'); Route::post('update/{id}', 'SysSms@update'); Route::post('insert', 'SysSms@insert'); Route::post('destroy', 'SysSms@destroy'); }); //邮件 Route::group(['prefix' => 'backend/sysmail', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'SysMail@index'); Route::get('read', 'SysMail@read'); Route::post('update/{id}', 'SysMail@update'); Route::post('insert', 'SysMail@insert'); Route::post('destroy', 'SysMail@destroy'); Route::post('send', 'SysMail@send'); }); //代码生成 Route::group(['prefix' => 'backend/generate', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'Generate@index'); Route::get('get_system_info', 'Generate@get_system_info'); Route::post('create_system', 'Generate@create_system'); Route::post('create_api', 'Generate@create_api'); Route::get('destroy_system_file', 'Generate@destroy_system_file'); }); Route::group(['prefix' => 'backend/meralbum', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index/{id?}', 'MerAlbum@index'); Route::get('read', 'MerAlbum@read'); }); Route::group(['prefix' => 'backend/meralbumcatalog', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'MerAlbumCatalog@index'); Route::get('read', 'MerAlbumCatalog@read'); Route::get('read_album/{id}', 'MerAlbumCatalog@read_album'); }); Route::group([ 'prefix' => strtolower('Backend'), 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web', 'auth.permission'], ], function () { Route::group(['prefix' => 'sysmodules'], function () { Route::get('index', 'SysModule@index')->name('backend.sysmodules.index'); Route::get('read_album_catalog', 'SysModule@read_album_catalog'); Route::get('read', 'SysModule@read')->name('backend.sysmodules.read'); Route::post('insert', 'SysModule@insert')->name('backend.sysmodules.insert'); Route::post('update/{id}', 'SysModule@update')->name('backend.sysmodules.update'); Route::post('destroy', 'SysModule@destroy')->name('backend.sysmodules.destory'); Route::post('upload', 'SysModule@upload'); Route::get('read_album', 'SysModule@read_album'); Route::get('income', 'SysModule@income'); }); Route::group(['prefix' => 'modulefunc'], function () { Route::get('index', 'ModuleFunc@index')->name('backend.modulefunc.index'); Route::get('read', 'ModuleFunc@read')->name('backend.modulefunc.read'); Route::post('insert', 'ModuleFunc@insert')->name('backend.modulefunc.insert'); Route::post('update/{id}', 'ModuleFunc@update')->name('backend.modulefunc.update'); Route::post('destroy', 'ModuleFunc@destroy')->name('backend.modulefunc.destroy'); }); Route::group(['prefix' => 'modulerole'], function () { Route::get('index', 'ModuleRole@index')->name('backend.modulerole.index')->middleware('auth.permission'); Route::get('read', 'ModuleRole@read')->name('backend.modulerole.read'); Route::post('insert', 'ModuleRole@insert')->name('backend.modulerole.insert'); Route::post('update/{id}', 'ModuleRole@update')->name('backend.modulerole.update'); Route::post('destroy', 'ModuleRole@destroy')->name('backend.modulerole.destroy'); }); }); //接口模拟器 Route::group(['prefix' => 'backend/simulator', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'Simulator@index'); Route::get('read_api', 'Simulator@read_api'); Route::get('read_params', 'Simulator@read_params'); }); //设置配置 Route::group(['prefix' => 'backend/syssettings', 'namespace' => 'Smart\Controllers\Backend', 'middleware' => ['web']], function () { Route::get('index', 'SysSettings@index'); Route::get('read', 'SysSettings@read'); Route::post('insert', 'SysSettings@insert'); Route::post('update/{id}', 'SysSettings@update'); Route::post('destroy', 'SysSettings@destroy'); Route::get('group/{group}', 'SysSettings@indexGroup'); }); //接口路由 Route::group(['prefix' => 'api/{version}', 'namespace' => 'App\Http\Controllers\Api', 'middleware' => ['api','auth.cors']], function () { Route::any('{direction}/{action}', 'Index@index'); }); ================================================ FILE: src/Auth/Database/seeds/AdminTableSeeder.php ================================================ insertGetId( [ 'module' => 'backend', 'username' => config('backend.defaultAdmin'), 'password' => bcrypt(config('backend.defaultPwd')), 'status' => 1, 'name' => 'admin', 'email' => config('backend.defaultEmail'), 'icon' => '', 'phone' => '', 'api_token' => '', 'signed_at' => Carbon::now(), 'signed_ip' => '', ] ); $role_id = DB::table('sys_role')->insertGetId( [ 'sort' => 10, 'module' => 'backend', 'name' => '系统管理员', 'status' => 1, 'rank' => 5, 'mer_id' => 0, 'desc' => '', ] ); DB::table('sys_user_role')->insert([ [ 'user_id' => $user_id, 'role_id' => $role_id, ], ]); //默认功能菜单模板 $default_func = [ 'pid' => 0, 'module' => 'backend', 'is_menu' => 1, 'is_func' => 0, 'color' => 'default', 'level' => 1, 'status' => 1, 'uri' => '', 'icon' => '', 'name' => '', 'sort' => 1, 'desc' => '', ]; //新增权限 DB::table('sys_func')->insert([ //一级菜单 extend($default_func, [ 'name' => '首页', 'icon' => 'icon-home', 'uri' => 'backend/index/index', ]), extend($default_func, [ 'name' => '系统', 'icon' => 'icon-settings', ]), extend($default_func, [ 'name' => '平台用户', 'icon' => 'icon-users', ]), extend($default_func, [ 'name' => '机构', 'icon' => 'icon-globe', ]), extend($default_func, [ 'name' => '工具', 'icon' => 'icon-wrench', ]), //二级菜单 系统 extend($default_func, [ 'name' => '系统功能', 'icon' => '', 'uri' => 'backend/sysfunc/index', 'pid' => 2, 'level' => 2, ]), extend($default_func, [ 'name' => '系统角色', 'icon' => '', 'uri' => 'backend/sysrole/index', 'pid' => 2, 'level' => 2, ]), extend($default_func, [ 'name' => '系统用户', 'icon' => '', 'uri' => 'backend/sysuser/index', 'pid' => 2, 'level' => 2, ]), /*extend($default_func , [ 'name' => '系统用户组', 'icon' => '', 'uri' => 'backend/sysgroup/index', 'pid' => 2, 'level' => 2 */ //二级菜单 工具 extend($default_func, [ 'name' => 'APP版本管理', 'icon' => '', 'uri' => 'backend/sysappversion/index', 'pid' => 5, 'level' => 2, ]), extend($default_func, [ 'name' => '消息推送', 'icon' => '', 'uri' => 'backend/syspush/index', 'pid' => 5, 'level' => 2, ]), extend($default_func, [ 'name' => '短信', 'icon' => '', 'uri' => 'backend/syssms/index', 'pid' => 5, 'level' => 2, ]), extend($default_func, [ 'name' => '邮件', 'icon' => '', 'uri' => 'backend/sysmail/index', 'pid' => 5, 'level' => 2, ]), extend($default_func, [ 'name' => '代码生成', 'icon' => '', 'uri' => 'backend/generate/index', 'pid' => 5, 'level' => 2, ]), extend($default_func, [ 'name' => '接口模拟器', 'icon' => '', 'uri' => 'backend/simulator/index', 'pid' => 5, 'level' => 2, ]), //机构 extend($default_func, [ 'name' => '机构管理', 'icon' => '', 'uri' => 'backend/sysmerchant/index', 'pid' => 4, 'level' => 2, ]), extend($default_func, [ 'name' => '机构功能', 'icon' => '', 'uri' => 'backend/merfunc/index', 'pid' => 4, 'level' => 2, ]), extend($default_func, [ 'name' => '机构角色', 'icon' => '', 'uri' => 'backend/merrole/index', 'pid' => 4, 'level' => 2, ]), //平台用户 extend($default_func, [ 'name' => '平台用户管理', 'icon' => '', 'uri' => 'backend/meruser/index', 'pid' => 3, 'level' => 2, ]), extend($default_func, [ 'name' => '模块管理', 'icon' => '', 'uri' => 'backend/sysmodules/index', 'pid' => 5, 'level' => 2, ]), ] ); } } ================================================ FILE: src/Console/InstallCommand.php ================================================ input->getArgument('module')); if($module){ $this->initDirectory($module); $this->initView( $module ); $this->initRoutes($module); $this->initConfig($module); $this->initController($module); $this->initExampleController($module); $this->initMigration($module); $this->initMiddleware($module); $this->initProviders($module); }else{ $this->initData($module); } // $this->info('laravel-smart install success!'); } /** * 初始化数据 */ public function initData($module){ //默认安装基础数据 $this->call('migrate'); if( SysUser::count() == 0){ $this->call('db:seed' , [ '--class' => AdminTableSeeder::class]); } $this->line('initData success!'); } /** * 初始化模块目录 * @param $module */ public function initDirectory($module){ if($module){ SysModule::FirstOrCreate(['name'=>$module , 'symbol'=>strtolower($module),'displayorder'=>0,'version'=>'1.0','author'=>'MR.Z','status'=>1]); }else{ $this->makeDir($module); $this->line('initDirectory success!'); } } /** * 初始化控制器 * @param $module */ public function initController($module){ //基类 $this->directory = app_path($module); $base_path = 'Controllers/module.txt'; $content = $this->getContent($base_path ,['module' => $module]); $this->makeDir('Controllers'); $this->laravel['files']->put( app_path($module).'/Controllers/'.$module.'.php' , $content); $this->line('initController success!'); } public function initExampleController($module){ $example_path = 'Controllers/index.txt'; $content = $this->getContent($example_path , ['module' => $module]); $this->laravel['files']->put( app_path($module).'/Controllers/IndexController.php' , $content); $this->line('initExampleController success!'); } public function initMigration($module){ $this->makeDir('migrations'); $this->line('init migration success!'); } public function initMiddleware($module){ $this->makeDir('middlewares'); $this->line('init middlewares success!'); } public function initProviders($module){ $this->directory = app_path($module); $this->makeDir('Providers'); $providers_path = 'providers/mainproviders.txt'; $content = $this->getContent($providers_path , ['module' => $module]); $this->laravel['files']->put( app_path($module).'/Providers/MainProvider.php' , $content); $this->line('init providers success!'); } /** * 初始化视图 * @param $module */ public function initView($module){ $this->directory = app_path($module); $this->makeDir('views'); $view_path = 'views/Index/index.txt'; $this->makeDir('views/Index'); $content = $this->getContent($view_path , ['module' => $module]); $this->laravel['files']->put( app_path($module).'/views/Index/index.blade.php' , $content); $this->line('initView success!'); } /** * 初始化模块路由文件 * @param $module */ public function initRoutes($module){ $route_path = 'routes.txt'; $content = $this->getContent($route_path , ['module' => $module]); $this->laravel['files']->put(app_path($module).'/routes.php' , $content); $this->line('initRoutes success!'); } public function initConfig($module){ $config_path = 'config.txt'; $content = $this->getContent($config_path , ['module' => $module]); $this->laravel['files']->put(app_path($module).'/config.php' , $content); $this->line('initConfig success!'); } protected function getContent($path , $param){ $template_path = __DIR__.'/../../templates/module/'.$path; $tmp_content = $this->laravel['files']->get($template_path); $param_keys = array_keys($param); $param_keys = array_map(function($i){ return '{'.$i.'}';},$param_keys ); return str_replace( $param_keys , array_values($param) ,$tmp_content ); } /** * Make new directory. * * @param string $path */ protected function makeDir($path = '') { $this->laravel['files']->makeDirectory("{$this->directory}/$path", 0755, true, true); } } ================================================ FILE: src/Console/UninstallCommand.php ================================================ confirm('你确认要卸载laravel-smart吗?')) { return; } array_map(function ($file) { $this->call('migrate:rollback'); $this->laravel['files']->deleteDirectory(app_path($file)); }, config('backend.directory')); $this->laravel['files']->deleteDirectory(public_path('smart')); $this->laravel['files']->delete(config_path('backend.php')); $this->info('卸载laravel-smart 成功!'); // } } ================================================ FILE: src/Controllers/Backend/AuthController.php ================================================ * Date: 2017/9/16 * Time: 13:31 */ namespace Smart\Controllers\Backend; use Facades\Smart\Service\ServiceManager; use Illuminate\Http\Request; use Smart\Service\SysUserService; use Illuminate\Foundation\Auth\ResetsPasswords; use Illuminate\Support\Facades\Auth; class AuthController extends Backend { use ResetsPasswords; protected $autoload_service = 0; public function __construct(Request $request){ parent::__construct($request); $this->service = ServiceManager::make( SysUserService::class ); } public function changePassword(Request $request){ $password = $request->password; $id = Auth::id(); $result = $this->service->resetPwd($id, $password); return json($result); } } ================================================ FILE: src/Controllers/Backend/Backend.php ================================================ middleware('auth'); } public function _init($pageTitle = '新页面'){ parent::_init($pageTitle); $SysFuncService = ServiceManager::make(SysFuncService::class ); $this->user = Auth::user(); $sysRole = $this->user->sysRole; $roles = $sysRole->pluck('id')->toArray(); $menuData = []; if(Auth::id() == config('backend.superAdminId')){ $menuData = $SysFuncService->getByCond(['isMenu' => 1, 'status' => 1, 'module' => $this->module]); }else{ $menuData = $SysFuncService->getMenuByRole( $roles, ucfirst($this->module) ); } $this->_addData('menuData',$menuData); $this->_addData( 'user', $this->user ); } public function _displayWithLayout( $view = 'index'){ return view($view)->with($this->data)->with('js' , $this->_makeJs())->with('css' , $this->_makeCss()); } } ================================================ FILE: src/Controllers/Backend/Generate.php ================================================ * Date: 2017/9/25 * Time: 14:45 */ namespace Smart\Controllers\Backend; use Facades\Smart\Service\ServiceManager; use Illuminate\Http\Request; use Smart\Service\GenerateService; class Generate extends Backend { /** * 构造函数 * Generate constructor. */ public function index() { $this->_init('代码生成'); $this->_addData('tables', $this->service->getTables()); //uri $this->_addParam('uri', [ 'getSystemInfo' => full_uri('Backend/Generate/get_system_info'), 'createSystem' => full_uri('Backend/Generate/create_system'), 'createApi' => full_uri('Backend/Generate/create_api'), 'destroySystemFile' => full_uri('Backend/Generate/destroy_system_file'), ]); $modules = explode(',',config('backend.module_ext')); $modules = array_combine($modules, $modules); $this->_addParam([ 'type' => $this->service->type, 'module' => $this->service->module, 'viewType' => $this->service->viewType, 'tableType' => $this->service->tableType, 'apiVer' => $this->service->apiVer, 'apiParams' => $this->service->apiParams, 'apiAuthUser' => $this->service->apiAuthUser, // 'modules' => $modules, 'systemDefault' => [ 'module' => 'Backend', 'tableName' => $this->data['tables'][0]->tableName, ], 'systemComponentsDefault' => [ 'tableType' => 'grid', 'viewType' => 'portlet', ], 'apiDefault' => [ 'apiVersion' => 'v1', 'authUser' => '1', ], ]); //需要引入的 css 和 js $this->_addCssLib('node_modules/select2/dist/css/select2.min.css'); $this->_addJsLib('node_modules/select2/dist/js/select2.min.js'); $this->_addJsLib('node_modules/select2/dist/js/i18n/zh-CN.js'); return $this->_displayWithLayout('backend::generate.index'); } function get_system_info(Request $request) { $type = $request->input('type'); $tableName = $request->input('tableName'); $module = $request->input('module'); $Generate = GenerateService::instance(); $result = []; if ($type == 'system') { $result = $Generate->getSystemInfo($tableName, $module, TRUE); } return json($result); } function create_system(Request $request) { $data = $request->except('components._token'); $result = $this->service->createSystem($data); return json($result); } function create_api(Request $request) { $data = [ 'name' => $request->input('name'), 'directory' => $request->input('directory'), 'params' => $request->input('params'), 'desc' => $request->input('desc'), 'apiVersion' => $request->input('apiVersion'), 'authUser' => $request->input('authUser'), ]; $result = $this->service->createApi($data); return json($result); } function destroy_system_file(Request $request) { $temp = $request->input('temp'); $tableName = $request->input('tableName'); $module = $request->input('module'); $result = $this->service->deleteSystemFile($module, $tableName, $temp); return json($result); } } ================================================ FILE: src/Controllers/Backend/Index.php ================================================ controller}.init(); EOF; $this->_addJsCode($jsCode); } public function index(Request $request) { $this->_init('首页'); $this->_addJsLib('node_modules/waypoints/lib/jquery.waypoints.min.js'); $this->_addJsLib('node_modules/jquery.counterup/jquery.counterup.min.js'); $this->_addJsLib('node_modules/echarts/dist/echarts.min.js'); $stat = cache('stat'); if (!$stat) { $stat = [ 'articles' => DB::table('mer_articles')->count(), 'users' => DB::table('mer_user')->count('id'), 'api' => DB::table('sys_api_log')->whereTime('created_at', '>', date('Y-m-d'))->count(), 'download' => 0, ]; cache('stat', $stat, 300); } $charts = $this->_getCharts($stat); $this->_addData('stat', $stat); $this->_addParam('charts', $charts); $this->_addParam( 'uri', [ 'chPwd' => full_uri( 'backend/auth/changepassword' ), ] ); return $this->_displayWithLayout('backend::index.index'); } /** * 获取图表数据 * * @param $stat * * @return array */ private function _getCharts($stat) { $data = DB::table('sys_statistics')->orderBy('created_at', 'ASC')->take(29)->get()->toArray(); $period = []; $users = []; $api = []; foreach ($data as $item) { $item = get_object_vars($item); $period[] = substr($item['created_at'], 5, 5); $users[] = $item['users_today']; $api[] = $item['api']; } $period[] = date('m-d'); $users[] = DB::table('mer_user')->whereDate('reg_at', '>', date('Y-m-d'))->count(); $api[] = $stat['api']; return [ 'users' => [ 'period' => $period, 'data' => $users, ], 'api' => [ 'period' => $period, 'data' => $api, ], ]; } } ================================================ FILE: src/Controllers/Backend/MerAlbum.php ================================================ * @version 2.0 , 2017-11-28 */ use Facades\Smart\Service\ServiceManager; use Illuminate\Http\Request; use Smart\Service\MerAlbumService; use Smart\Service\MerAlbumCatalogService; use Smart\Controllers\Backend\Backend; class MerAlbum extends Backend{ /** * MerAlbum constructor. */ //页面入口 public function index(Request $request ) { $id = $request->route('id'); $albums = $this->service->getModel()->find($id); $this->_init( 'MerAlbum' ); //uri $this->_addParam( 'uri', [ ] ); //查询参数 $this->_addParam( 'query', [ 'keyword' => $request->input( 'keyword', '' ), 'status' => $request->input( 'status', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ] ); //其他参数 $this->_addParam( [ 'defaultRow' => $this->service->getDefaultRow() , 'status' => $this->service->status , ] ); //需要引入的 css 和 js $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' ); $this->_addJsLib( 'static/plugins/dmg-ui/Uploader.js' ); return $this->_displayWithLayout('backend::MerAlbum.index'); } /** * 读取 * @return response->Json */ public function read(Request $request) { $config = [ 'status' => $request->input( 'status', '' ), 'keyword' => $request->input( 'keyword', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ]; $data['rows'] = $this->service->getByCond( $config ); $config['count'] = TRUE; $data['total'] = $this->service->getByCond( $config ); return json(ajax_arr( '查询成功', 0, $data ) ); } public function upload(Request $request){ $param = $request->all( ); $param['isKE'] = $request->input( 'isKE' , 0 ); $param['merId'] = $this->merId; $Upload = ServiceManager::make( UploadService::class ); return json( $Upload->doUpload( $param ) ); } public function read_album(Request $request){ $MerAlbum = MerAlbumService::instance(); $config = [ 'field' => [ 'id' , 'uri' , 'mimes' , 'desc' , 'img_size' ] , 'merId' => $this->merId , 'catalog' => $request->input( 'catalog' , '' ) , 'sort' => 'id' , 'order' => 'DESC' , 'status' => 1 , 'page' => $request->input( 'page' , 1 ) , 'pageSize' => $request->input( 'pageSize' , 12 ) , ]; $result['rows'] = $MerAlbum->getByCond( $config ); $config['count'] = TRUE; $result['total'] = $MerAlbum->getByCond( $config ); return json( $result ); } /** * 取相册分类 * * @return Json */ public function read_album_catalog() { $MerAlbumCatalog = MerAlbumCatalogService::instance(); $result = $MerAlbumCatalog->getByCond( [ 'field' => [ 'id' , 'tag' ] , 'merId' => $this->merId , 'sort' => 'sort' , 'order' => 'ASC' , 'status' => 1 , 'getAll' => TRUE ] ); return json( $result ); } } ================================================ FILE: src/Controllers/Backend/MerAlbumCatalog.php ================================================ * @version 2.0 , 2017-11-28 */ use Facades\Smart\Service\ServiceManager; use Illuminate\Http\Request; use Smart\Service\MerAlbumCatalogService; use Smart\Controllers\Backend\Backend; class MerAlbumCatalog extends Backend { /** * MerAlbumCatalog constructor. */ //页面入口 public function index(Request $request) { $this->_init( 'MerAlbumCatalog' ); //uri $this->_addParam( 'uri', [ 'upload' => full_uri( 'backend/meralbumcatalog/upload' ), 'albumCatalog' => full_uri( 'backend/meralbumcatalog/read_album_catalog' ), 'album' => full_uri( 'backend/meralbum/index' ), ] ); //查询参数 $this->_addParam( 'query', [ 'keyword' => $request->input( 'keyword', '' ), 'status' => $request->input( 'status', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ] ); //上传参数 $this->_addParam('uploadParam' , [ 'width' => 300 , 'height' => 300 , 'saveAsAlbum' => TRUE, 'albumTag' => '默认相册', ]); //相册参数 $this->_addParam( 'albumParam', [ 'defaultTag' => '默认相册', 'pageSize' => 12, ] ); //其他参数 $this->_addParam( [ 'defaultRow' => $this->service->getDefaultRow() , 'status' => $this->service->status , ] ); //需要引入的 css 和 js $this->_addCssLib('node_modules/jcrop-0.9.12/css/jquery.Jcrop.min.css'); $this->_addJsLib('node_modules/jcrop-0.9.12/js/jquery.Jcrop.min.js'); $this->_addJsLib( 'static/plugins/dmg-ui/Uploader.js' ); $this->_addJsLib( 'static/plugins/dmg-ui/tiles.js' ); return $this->_displayWithLayout('backend::MerAlbumCatalog.index'); } /** * 读取 * @return response->Json */ public function read(Request $request) { $config = [ 'status' => $request->input( 'status', '' ), 'keyword' => $request->input( 'keyword', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ]; $data['rows'] = $this->service->getByCond( $config ); $config['count'] = TRUE; $data['total'] = $this->service->getByCond( $config ); return json(ajax_arr( '查询成功', 0, $data ) ); } } ================================================ FILE: src/Controllers/Backend/MerAlbumTag.php ================================================ * @version 2.0 , 2017-11-28 */ use Facades\Smart\Service\ServiceManager; use Illuminate\Http\Request; use Smart\Service\MerAlbumTagService; use Smart\Controllers\Backend\Backend; class MerAlbumTag extends Backend { /** * MerAlbumTag constructor. */ //页面入口 public function index(Request $request) { $this->_init( 'MerAlbumTag' ); //uri $this->_addParam( 'uri', [ ] ); //查询参数 $this->_addParam( 'query', [ 'keyword' => $request->input( 'keyword', '' ), 'status' => $request->input( 'status', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ] ); //其他参数 $this->_addParam( [ 'defaultRow' => $this->service->getDefaultRow() , 'status' => $this->service->status , ] ); //需要引入的 css 和 js $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' ); return $this->_displayWithLayout('Backend::MerAlbumTag.index'); } /** * 读取 * @return response->Json */ public function read(Request $request) { $config = [ 'status' => $request->input( 'status', '' ), 'keyword' => $request->input( 'keyword', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ]; $data['rows'] = $this->service->getByCond( $config ); $config['count'] = TRUE; $data['total'] = $this->service->getByCond( $config ); return json(ajax_arr( '查询成功', 0, $data ) ); } } ================================================ FILE: src/Controllers/Backend/MerFunc.php ================================================ * Date: 2017/9/21 * Time: 15:49 */ namespace Smart\Controllers\Backend; use Facades\Smart\Service\ServiceManager; use Smart\Service\SysFuncPrivilegeService; use Smart\Service\SysFuncService; use Illuminate\Http\Request; class MerFunc extends Backend { /** * MerFunc constructor. */ public $autoload_service = 0; public $controller = 'SysFunc'; public function __construct(Request $request){ parent::__construct($request); $this->service = ServiceManager::make( \Smart\Service\SysFuncService::class ); $jsCode = <<controller}.init(); EOF; $this->_addJsCode($jsCode); } //页面入口 public function index(Request $request) { $this->_init( '机构功能' ); //uri $this->_addParam( 'uri', [ 'updatePrivilege' => full_uri( 'Backend/MerFunc/update_privilege', [ 'funcId' => '' ] ), ] ); $modules = explode(',',config('backend.module_ext')); $modules = array_combine($modules, $modules); //查询参数 $this->_addParam( 'query', [ 'keyword' => $request->input( 'keyword', '' ), 'status' => $request->input( 'status', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ] ); //其他参数 $SysFuncPrivilege = ServiceManager::make( SysFuncPrivilegeService::class ); $this->_addParam( [ 'defaultRow' => $this->service->getDefaultRow(), 'module' => '', 'status' => $this->service->status, 'isMenu' => $this->service->isMenu, 'isFunc' => $this->service->isFunc, 'privilege' => $SysFuncPrivilege->name, 'alias' => $SysFuncPrivilege->alias, 'modules' => $modules, ] ); //需要引入的 css 和 js $this->_addJsLib( 'static/plugins/dmg-ui/TreeGrid.js' ); return $this->_displayWithLayout('backend::merfunc.index'); } /** * 读取 * @return \Json */ function read(Request $request) { $module = $request->module ?: explode(',',config('backend.module_ext')); $config = [ 'module' => $module , 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), 'withPrivilege' => TRUE ]; $data['rows'] = $this->service->getByCond( $config ); $config['count'] = TRUE; $data['total'] = $this->service->getByCond( $config ); return json( ajax_arr( '查询成功', 0, $data ) ); } /** * 更新权限 * * @return \Json */ function update_privilege(Request $request , $funcId) { $data = $request->except( '_token' ); $SysFuncPrivilege = SysFuncPrivilegeService::instance(); $ret = $SysFuncPrivilege->updateByFunc( $funcId, $data ); return json( $ret ); } } ================================================ FILE: src/Controllers/Backend/MerGoodsCatalog.php ================================================ * Date: 2017/9/21 * Time: 09:33 */ namespace Smart\Controllers\Backend; use Facades\Smart\Service\ServiceManager; use Smart\Service\MerGoodsCatalogService; use Illuminate\Http\Request; class MerGoodsCatalog extends Backend { /** * MerGoodsCatalog constructor. */ //页面入口 public function index(Request $request) { $this->_init( 'MerGoodsCatalog' ); //uri $this->_addParam( 'uri' , [ 'upload' => full_uri( 'backend/mergoodscatalog/upload' ) , 'albumCatalog' => full_uri( 'backend/mergoodscatalog/read_album_catalog' ) , 'album' => full_uri( 'backend/mergoodscatalog/read_album' ) , ] ); //查询参数 $this->_addParam( 'query' , [ 'keyword' => $request->input( 'keyword' , '' ) , 'status' => $request->input( 'status' , '' ) , 'page' => $request->input( 'page' , 1 ) , 'pageSize' => $request->input( 'pageSize' , 10 ) , 'sort' => $request->input( 'sort' , 'id' ) , 'order' => $request->input( 'order' , 'DESC' ) , ] ); //上传参数 $this->_addParam( 'uploadParam' , [ 'width' => 300 , 'height' => 300 , 'saveAsAlbum' => TRUE , 'albumTag' => '图标' , ] ); //相册参数 $this->_addParam( 'albumParam' , [ 'defaultTag' => '图标' , 'pageSize' => 12 , ] ); //其他参数 $this->_addParam( [ 'defaultRow' => $this->service->getDefaultRow() , 'status' => $this->service->status , 'type' => $this->service->type ] ); //需要引入的 css 和 js $this->_addCssLib( 'node_modules/jcrop-0.9.12/css/jquery.Jcrop.min.css' ); $this->_addJsLib( 'node_modules/jcrop-0.9.12/js/jquery.Jcrop.min.js' ); $this->_addJsLib( 'static/plugins/dmg-ui/Uploader.js' ); $this->_addJsLib( 'static/plugins/dmg-ui/TreeGrid.js' ); return $this->_displayWithLayout('backend::mergoodscatalog.index'); } /** * 读取 * @return \Json */ public function read(Request $request) { $config = [ 'status' => $request->input( 'status' , '' ) , 'keyword' => $request->input( 'keyword' , '' ) , 'sort' => $request->input( 'sort' , 'id' ) , 'order' => $request->input( 'order' , 'DESC' ) , ]; $data['rows'] = $this->service->getByCond( $config ); return json( ajax_arr( '查询成功' , 0 , $data ) ); } } ================================================ FILE: src/Controllers/Backend/MerRole.php ================================================ * Date: 2017/9/21 * Time: 15:49 */ namespace Smart\Controllers\Backend; use Facades\Smart\Service\ServiceManager; use Smart\Service\SysFuncPrivilegeService; use Smart\Service\SysFuncService; use Smart\Service\SysRolePermissionService; use Smart\Service\SysRoleService; use Illuminate\Http\Request; class MerRole extends Backend { /** * SysRole constructor. */ protected $autoload_service = false; public $controller = 'SysRole'; public function __construct(Request $request){ parent::__construct($request); $this->service = ServiceManager::make( \Smart\Service\SysRoleService::class ); $jsCode = <<controller}.init(); EOF; $this->_addJsCode($jsCode); } //页面入口 public function index(Request $request) { $this->_init( '机构角色管理' ); //uri $this->_addParam( 'uri', [ 'getPermission' => full_uri( 'backend/merrole/get_permission' ), 'getPrivilegeData' => full_uri( 'backend/merrole/get_privilegeData'), 'updatePermission' => full_uri( 'backend/merrole/update_permission' ) ] ); $modules = explode(',',config('backend.module_ext')); $modules = array_combine($modules, $modules); //查询参数 $this->_addParam( 'query', [ 'keyword' => $request->input( 'keyword', '' ), 'status' => $request->input( 'status', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ] ); //其他参数 $this->_addParam( [ 'defaultRow' => $this->service->getDefaultRow(), 'status' => $this->service->status, 'rank' => $this->service->rank, 'modules' => $modules, ] ); //需要引入的 css 和 js $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' ); return $this->_displayWithLayout('backend::merrole.index'); } //读取 function read(Request $request) { $param = [ 'status' => $request->input( 'status', '' ), 'keyword' => $request->input( 'keyword', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), 'module' => $request->input( 'module', '' ), ]; $data['rows'] = $this->service->getByCond( $param ); $param['count'] = TRUE; $data['total'] = $this->service->getByCond( $param ); return json( ajax_arr( '查询成功', 0, $data ) ); } /** * 新建 * * @return \Json */ public function insert(Request $request) { $data = $request->except( '_token' ); $data['module'] = $request->module; return json( $this->service->insert( $data ) ); } function get_permission(Request $request) { $roleId = $request->input( 'roleId' ); $role = $this->service->getById($roleId); $SysFuncPrivilege = SysFuncPrivilegeService::instance(); $data['privilegeName'] = $SysFuncPrivilege->name; //取角色操作权限 $SysRolePermission = SysRolePermissionService::instance(); $ret['privilegeData'] = $SysRolePermission->getByRole( $roleId ); //取所有功能与操作 $SysFunc = SysFuncService::instance(); $data['funcData'] = $SysFunc->getByCond( [ 'module' => $role->module, 'status' => 1, 'withPrivilege' => TRUE, ] ); return view('backend::merrole.permission')->with($data); } function get_privilegeData(Request $request){ $roleId = $request->input( 'roleId' ); $SysRolePermission = SysRolePermissionService::instance(); return response()->json($SysRolePermission->getByRole( $roleId )); } //更新授权 function update_permission(Request $request) { $roleId = $request->input( 'roleId' ); $privilegeArr = $request->input( 'privilegeArr' ); $SysRolePermission = SysRolePermissionService::instance(); $ret = $SysRolePermission->updateRolePermission( $roleId, $privilegeArr ); return json( $ret ); } } ================================================ FILE: src/Controllers/Backend/MerSysUser.php ================================================ * Date: 2017/9/21 * Time: 13:31 */ namespace Smart\Controllers\Backend; use Smart\Service\MerSysUserService; use Smart\Service\SysRoleService; use Smart\Service\SysUserService; use Illuminate\Http\Request; use Facades\Smart\Service\ServiceManager; class MerSysUser extends Backend { /** * SysMerUser constructor. */ /** * 页面显示接口 * * @return string */ public function index(Request $request , $merId = 0) { $merId = $merId ?: $request->input('merId'); $this->_init( '系统用户' ); $this->_addParam( 'uri' , [ 'menu' => '/backend/sysmerchant/index' , 'insert' => full_uri( 'backend/mersysuser/insert' , [ 'merId' => $merId ] ) , 'destroy' => full_uri( 'backend/mersysuser/destroy' , [ 'merId' => $merId ] ) , 'upload' => full_uri( 'backend/mersysuser/upload' ) , 'resetPwd' => full_uri( 'backend/mersysuser/reset_pwd' , [ 'id' => '' ] ) , 'albumCatalog' => full_uri( 'backend/mersysuser/read_album_catalog' ) , 'album' => full_uri( 'backend/mersysuser/read_album' ) , ] ); //上传参数 $this->_addParam( 'uploadParam' , [ 'width' => 300 , 'height' => 300 , 'saveAsAlbum' => TRUE , 'albumTag' => '头像' , ] ); //相册参数 $this->_addParam( 'albumParam' , [ 'defaultTag' => '头像' , 'pageSize' => 12 , ] ); //查询参数 $this->_addParam( 'query' , [ 'merId' => $merId , 'keyword' => $request->input( 'keyword' , '' ) , 'status' => $request->input( 'status' , '' ) , 'page' => $request->input( 'page' , 1 ) , 'pageSize' => $request->input( 'pageSize' , 10 ) , ] ); $SysRole = SysRoleService::instance(); //附加参数 $this->_addParam( [ 'defaultRow' => $this->service->getDefaultRow() , 'defaultPwd' => config( 'backend.defaultPwd' ) , 'status' => $this->service->status , 'roles' => $SysRole->getByModule( 'mp' ) ] ); $this->_addCssLib( 'node_modules/jcrop-0.9.12/css/jquery.Jcrop.min.css' ); $this->_addJsLib( 'node_modules/jcrop-0.9.12/js/jquery.Jcrop.min.js' ); $this->_addJsLib( 'static/plugins/dmg-ui/Uploader.js' ); $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' ); return $this->_displayWithLayout('backend::mersysuser.index'); } /** * 读取 */ public function read(Request $request) { $config = [ 'module' => 'mp' , 'merId' => $request->input( 'merId' , '' ) , 'keyword' => $request->input( 'keyword' , '' ) , 'status' => $request->input( 'status' , '' ) , 'page' => $request->input( 'page' , 1 ) , 'pageSize' => $request->input( 'pageSize' , 10 ) , 'withRoles' => TRUE , 'merchant' => TRUE ]; $data['rows'] = $this->service->getByCond( $config ); $config['count'] = TRUE; $data['total'] = $this->service->getByCond( $config ); return json( ajax_arr( '查询成功' , 0 , $data ) ); } public function insert(Request $request) { $merId = $request->route('merId'); $data = $request->except( '_token' ); $data['module'] = 'mp'; $MerSysUser = MerSysUserService::instance(); $result = $MerSysUser->insert( $merId , $data ); return json( $result ); } public function update(Request $request , $id) { $data = $request->except( '_token' ); $MerSysUser = MerSysUserService::instance(); $result = $MerSysUser->update( $id , $data ); return json( $result ); } public function destroy(Request $request) { $merId = $request->route( 'merId' ); $ids = $request->input( 'ids' ); $MerSysUser = MerSysUserService::instance(); $result = $MerSysUser->destroy( $merId , $ids ); return json( $result ); } /** * 重置密码 * * @return Json */ public function reset_pwd(Request $request , $id) { $result = $this->service->resetPwd( $id , config( 'backend.defaultPwd' ) ); return json( $result ); } } ================================================ FILE: src/Controllers/Backend/MerUser.php ================================================ * Date: 2017/9/16 * Time: 13:31 */ namespace Smart\Controllers\Backend; use Facades\Smart\Service\ServiceManager; use Illuminate\Http\Request; use Smart\Models\SysUser as SysUserModel; use Smart\Service\SysRoleService; use Smart\Service\SysUserService; use Smart\Service\SysUserDeviceService; class MerUser extends Backend { /** * SysUser constructor. */ /** * 页面显示接口 * * @return string */ public function index(Request $request) { $this->_init('系统用户'); $this->_addParam('uri', [ 'upload' => full_uri('backend/meruser/upload'), 'resetPwd' => full_uri('backend/meruser/reset_pwd', ['id' => '']), 'albumCatalog' => full_uri('backend/meruser/read_album_catalog'), 'album' => full_uri('backend/meruser/read_album'), 'test' => full_uri('backend/meruser/test'), 'merRoleRead' => full_uri('backend/merrole/read'), ]); $modules = explode(',',config('backend.module_ext')); $modules = array_combine($modules, $modules); //上传参数 $this->_addParam('uploadParam', [ 'width' => 300, 'height' => 300, 'saveAsAlbum' => TRUE, 'albumTag' => '头像', ]); //相册参数 $this->_addParam('albumParam', [ 'defaultTag' => '头像', 'pageSize' => 12, ]); //查询参数 $this->_addParam('query', [ 'module' => $request->input('module', ''), 'keyword' => $request->input('keyword', ''), 'status' => $request->input('status', ''), 'page' => $request->input('page', 1), 'pageSize' => $request->input('pageSize', 10), ]); $SysRole = SysRoleService::instance(); $sysUserDevice = SysUserDeviceService::instance(); $module = $request->input('module') ?? 'backend'; //附加参数 $this->_addParam([ 'defaultRow' => $this->service->getDefaultRow(), 'defaultPwd' => config('backend.defaultPwd'), 'status' => $this->service->status, 'roles' => $SysRole->getByModule($module), 'for_test' => $sysUserDevice->for_test, 'modules' => $modules, ]); $this->_addCssLib('node_modules/jcrop-0.9.12/css/jquery.Jcrop.min.css'); $this->_addJsLib('node_modules/jcrop-0.9.12/js/jquery.Jcrop.min.js'); $this->_addJsLib('static/plugins/dmg-ui/Uploader.js'); $this->_addJsLib('static/plugins/dmg-ui/TableGrid.js'); return $this->_displayWithLayout('backend::meruser.index'); } /** * 读取 */ public function read(Request $request) { $config = [ 'module' => $request->input('module', ''), 'keyword' => $request->input('keyword', ''), 'status' => $request->input('status', ''), 'page' => $request->input('page', 1), 'pageSize' => $request->input('pageSize', 10), 'withRoles' => TRUE, 'withTest' => TRUE, ]; $data['rows'] = $this->service->getByCond($config); $config['count'] = TRUE; $data['total'] = $this->service->getByCond($config); return response()->json(ajax_arr('查询成功', 0, $data)); } public function test(Request $request) { $id = $request->id; $sysuser = SysUserModel::with('UserDevice')->find($id); $for_test = $request->input('for_test'); if ($for_test) { $sysuser->api_token = md5(http_build_query($request->all()) . json_encode(['created_at' => time()])); $sysuser->save(); } $data = [ 'device' => 'iphone', 'api_version' => 'v1', 'for_test' => $for_test, ]; if (empty($sysuser->UserDevice)) { $result = $sysuser->UserDevice()->create($data); $msg = '新增成功'; } else { $sysuser->UserDevice->for_test = $for_test; $sysuser->UserDevice->save(); $msg = '更新成功'; } return json(ajax_arr($msg, 0)); } /** * 重置密码 * * @return json */ public function reset_pwd($id) { $result = $this->service->resetPwd($id, config('backend.defaultPwd')); return json($result); } } ================================================ FILE: src/Controllers/Backend/ModuleFunc.php ================================================ * @version 2.0 , 2018-06-15 */ use Facades\Smart\Service\ServiceManager; use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use Smart\Service\SysFuncPrivilegeService; use Smart\Service\SysFuncService; use Smart\Service\SysModuleService; class ModuleFunc extends Backend { /** * SysFunc constructor. */ //页面入口 public function index(Request $request) { $this->_init('系统功能'); //uri $this->_addParam('uri', [ 'updatePrivilege' => full_uri('Backend/SysFunc/update_privilege', ['funcId' => '']), ]); //查询参数 $this->_addParam('query', [ 'id' => $request->input('id', ''), 'keyword' => $request->input('keyword', ''), 'status' => $request->input('status', ''), 'page' => $request->input('page', 1), 'pageSize' => $request->input('pageSize', 10), 'sort' => $request->input('sort', 'id'), 'order' => $request->input('order', 'DESC'), ]); $sysModule = ServiceManager::make(SysModuleService::class); $module = $sysModule->getById($request->input('id', '')); //其他参数 $SysFuncPrivilege = SysFuncPrivilegeService::instance(); $this->_addParam([ 'defaultRow' => array_merge($this->service->getDefaultRow(), ['module' => $module->symbol]), 'status' => $this->service->status, 'isMenu' => $this->service->isMenu, 'isFunc' => $this->service->isFunc, 'privilege' => $SysFuncPrivilege->name, 'alias' => $SysFuncPrivilege->alias, 'module_name' => $module->symbol, 'nav' => Route::currentRouteName(), 'func_uri' => route('backend.modulefunc.index', ['id' => $request->input('id', '')]), 'role_uri' => route('backend.modulerole.index', ['id' => $request->input('id', '')]), ]); //需要引入的 css 和 js $this->_addJsLib('static/plugins/dmg-ui/TreeGrid.js'); return $this->_displayWithLayout('backend::ModuleFunc.index'); } /** * 读取 * @return response->Json */ public function read(Request $request) { $module_name = ServiceManager::make(SysModuleService::class)->getById($request->input('id'))->symbol; $config = [ 'module' => $module_name, 'status' => $request->input('status', ''), 'keyword' => $request->input('keyword', ''), 'sort' => $request->input('sort', 'id'), 'order' => $request->input('order', 'DESC'), 'withPrivilege' => TRUE, ]; $data['rows'] = $this->service->getByCond($config); return json(ajax_arr('查询成功', 0, $data)); } } ================================================ FILE: src/Controllers/Backend/ModuleRole.php ================================================ _init('模块角色管理'); //uri $this->_addParam('uri', [ 'getPermission' => full_uri('backend/sysrole/get_permission'), 'getPrivilegeData' => full_uri('backend/sysrole/get_privilegeData'), 'updatePermission' => full_uri('backend/sysrole/update_permission'), ]); //查询参数 $this->_addParam('query', [ 'id' => $request->input('id', ''), 'keyword' => $request->input('keyword', ''), 'status' => $request->input('status', ''), 'page' => $request->input('page', 1), 'pageSize' => $request->input('pageSize', 10), 'sort' => $request->input('sort', 'id'), 'order' => $request->input('order', 'DESC'), ]); $sysModule = ServiceManager::make(SysModuleService::class); $module = $sysModule->getById($request->input('id', '')); //其他参数 $this->_addParam([ 'defaultRow' => $this->service->getDefaultRow(), 'status' => $this->service->status, 'rank' => $this->service->rank, 'module_name' => $module->symbol, 'nav' => Route::currentRouteName(), 'func_uri' => route('backend.modulefunc.index', ['id' => $request->input('id', '')]), 'role_uri' => route('backend.modulerole.index', ['id' => $request->input('id', '')]), ]); //需要引入的 css 和 js $this->_addJsLib('static/plugins/dmg-ui/TableGrid.js'); return $this->_displayWithLayout('backend::modulerole.index'); } //读取 function read(Request $request) { $module_name = ServiceManager::make(SysModuleService::class)->getById($request->input('id'))->symbol; $param = [ 'module' => $module_name, 'status' => $request->input('status', ''), 'keyword' => $request->input('keyword', ''), 'page' => $request->input('page', 1), 'pageSize' => $request->input('pageSize', 10), 'sort' => $request->input('sort', 'id'), 'order' => $request->input('order', 'DESC'), ]; $data['rows'] = $this->service->getByCond($param); $param['count'] = TRUE; $data['total'] = $this->service->getByCond($param); return response()->json(ajax_arr('查询成功', 0, $data)); } function get_permission(Request $request) { $roleId = $request->input('roleId'); $SysFuncPrivilege = SysFuncPrivilegeService::instance(); $data['privilegeName'] = $SysFuncPrivilege->name; //取角色操作权限 //取所有功能与操作 $SysFunc = SysFuncService::instance(); $data['funcData'] = $SysFunc->getByCond([ 'module' => 'backend', 'status' => 1, 'withPrivilege' => TRUE, ]); //var_dump(view( 'sysrole/index' )); // var_dump($data); //return view( 'sysrole/permission' )->with($data); return view('backend::sysrole/permission')->with($data); // return $ret; } function get_privilegeData(Request $request) { $roleId = $request->input('roleId'); $SysRolePermission = SysRolePermissionService::instance(); return response()->json($SysRolePermission->getByRole($roleId)); } //更新授权 function update_permission(Request $request) { $roleId = $request->input('roleId'); $privilegeArr = $request->input('privilegeArr'); $SysRolePermission = SysRolePermissionService::instance(); $ret = $SysRolePermission->updateRolePermission($roleId, $privilegeArr); return response()->json($ret); } } ================================================ FILE: src/Controllers/Backend/Simulator.php ================================================ * Date: 2017/9/18 * Time: 16:41 */ namespace Smart\Controllers\Backend; use cebe\markdown\MarkdownExtra; use Facades\Smart\Service\ServiceManager; use Illuminate\Http\Request; use Smart\Service\SimulatorService; use Smart\Service\SysMerchantService; use Smart\Service\SysUserService; use Smart\Lib\Discover; class Simulator extends Backend { public $deviceOsVersion = '10.0.0'; public $apiVersion = 'v1'; /** * Simulator constructor. */ public function __construct(Request $request) { parent::__construct($request); $this->apiVersion = config('backend.api.apiVersion'); } //页面入口 public function index() { $this->_init('接口模拟器'); // var_dump($services);exit; //uri $this->_addParam('uri', [ 'readApi' => full_uri('backend/simulator/read_api'), 'readParams' => full_uri('backend/simulator/read_params'), 'api' => $this->baseUri . "api/", 'readme' => full_uri('backend/simulator/read_me'), ]); $SysUser = SysUserService::instance(); $SysMerchant = SysMerchantService::instance(); /* $versions = [ 'v1' => [ [ 'version' => 'v1', 'text' => 'v1', ] ], 'v2' => [ [ 'version' => 'v2', 'text' => 'v2', ] ], ];*/ $discover = new Discover; $versions = $discover->version(); //其他参数 $this->_addParam([ 'deviceOsVersion' => $this->deviceOsVersion, 'apiVersion' => $this->apiVersion, 'secret' => config('backend.secret'), 'testToken' => $SysUser->getForTest(), 'testMer' => $SysMerchant->getForTest(), 'versions' => $versions, 'defaultValue' => [ 'token' => '', //取一个token 'merId' => 1, ], ]); //需要引入的 css 和 js $this->_addJsLib('static/plugins/jquery-md5/jQuery.md5.js'); return $this->_displayWithLayout('backend::simulator.index'); } //读取结果 function read_api(Request $request) { if($request->filled('version')){ $apiVersion = $request->input('version'); }else{ $apiVersion = $this->apiVersion; } // $Simulator = SimulatorService::instance(); $ret = $this->service->readApi($apiVersion); return json($ret); } public function read_version(){ //TODO 版本控制未完成 $ret = $this->service->readVersion(); return json($ret); } function read_params(Request $request) { $directory = $request->input('directory'); $action = $request->input('action'); $action = ucfirst($action); $method = $request->input('method', ''); $version = $request->input('version',$this->apiVersion); $service = "App\\Api\\Service\\{$version}\\{$directory}\\{$action}Service"; $instance = $service::instance(); if (empty($method)) { $key = array_keys($instance->allowRequestMethod); $method = $key[0]; } $data['method'] = $method; $data['allowRequestMethod'] = $instance->allowRequestMethod; $data['defaultParams'] = $instance->defaultParams[$method]; $data['defaultResponse'] = $this->_fixDefaultResponse($instance->defaultResponse[$method]); return view('backend::simulator.params')->with($data); } /** * 优化前台显示 default response * * @param $defaultResponse * * @return string */ private function _fixDefaultResponse($defaultResponse) { foreach ($defaultResponse as $key => &$item) { if (is_array($item)) { if (isset($item[0])) { $item = $item[0]; } else { foreach ($item as $k => &$i) { if (is_array($i)) { if (isset($i[0])) { $i = $i[0]; } } } } } } return json_encode($defaultResponse, JSON_UNESCAPED_UNICODE); } //文档 function read_me() { $this->_init('文档'); $parser = new MarkdownExtra(); $readme = $parser->parse(file_get_contents(base_path() . './README.md')); $this->_addData('readme', $readme); $this->_addParam('uri', [ 'menu' => '/backend/simulator/index', ]); $this->_addJsLib('static/js/backend/SimulatorReadme.js'); $this->data['initPageJs'] = FALSE; $this->data['jsCode'][] = 'SimulatorReadme.init()'; return $this->_displayWithLayout('backend::readme'); } } ================================================ FILE: src/Controllers/Backend/SysApiLog.php ================================================ * @version 2.0 , 2017-09-25 */ use Illuminate\Http\Request; use Facades\Smart\Service\ServiceManager; use Smart\Service\SysApiLogService; class SysApiLog extends Backend { /** * SysApiLog constructor. */ //页面入口 public function index(Request $request) { $this->_init( 'SysApiLog' ); //uri $this->_addParam( 'uri', [ ] ); //查询参数 $this->_addParam( 'query', [ 'keyword' => $request->input( 'keyword', '' ), 'status' => $request->input( 'status', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ] ); //其他参数 $this->_addParam( [ 'defaultRow' => $this->service->getDefaultRow() , 'status' => $this->service->status , ] ); //需要引入的 css 和 js $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' ); return $this->_displayWithLayout(); } /** * 读取 * @return response->Json */ public function read(Request $request) { $config = [ 'status' => $request->input( 'status', '' ), 'keyword' => $request->input( 'keyword', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ]; $data['rows'] = $this->service->getByCond( $config ); $config['count'] = TRUE; $data['total'] = $this->service->getByCond( $config ); return json(ajax_arr( '查询成功', 0, $data ) ); } } ================================================ FILE: src/Controllers/Backend/SysAppVersion.php ================================================ * Date: 2017/9/22 * Time: 16:55 */ namespace Smart\Controllers\Backend; use Smart\Service\SysAppVersionService; use Facades\Smart\Service\ServiceManager; use Illuminate\Http\Request; class SysAppVersion extends Backend { /** * SysAppVersion constructor. */ //页面入口 public function index(Request $request) { $this->_init( 'APP版本管理' ); //uri $this->_addParam( 'uri' , [ ] ); //查询参数 $this->_addParam( 'query' , [ 'keyword' => $request->input( 'keyword' , '' ) , 'status' => $request->input( 'status' , '' ) , 'page' => $request->input( 'page' , 1 ) , 'pageSize' => $request->input( 'pageSize' , 10 ) , 'sort' => $request->input( 'sort' , 'id' ) , 'order' => $request->input( 'order' , 'DESC' ) , ] ); //其他参数 $this->_addParam( [ 'defaultRow' => $this->service->getDefaultRow() , 'status' => $this->service->status , 'device' => $this->service->device ] ); //需要引入的 css 和 js $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' ); return $this->_displayWithLayout('backend::sysappversion.index'); } /** * 读取 * @return Json */ public function read(Request $request) { $config = [ 'status' => $request->input( 'status' , '' ) , 'keyword' => $request->input( 'keyword' , '' ) , 'page' => $request->input( 'page' , 1 ) , 'pageSize' => $request->input( 'pageSize' , 10 ) , 'sort' => $request->input( 'sort' , 'id' ) , 'order' => $request->input( 'order' , 'DESC' ) , ]; $data['rows'] = $this->service->getByCond( $config ); $config['count'] = TRUE; $data['total'] = $this->service->getByCond( $config ); return json( ajax_arr( '查询成功' , 0 , $data ) ); } } ================================================ FILE: src/Controllers/Backend/SysArea.php ================================================ * Date: 2017/9/18 * Time: 15:29 */ namespace Smart\Controllers\Backend; use Smart\Service\SysAreaService; use Facades\Smart\Service\ServiceManager; use Illuminate\Http\Request; class SysArea extends Backend { /** * SysArea constructor. */ //页面入口 public function index(Request $request) { $pid = $request->input( 'pid', 0 ); $title = '区域管理'; if ( $pid > 0 ) { $parentData = $this->service->getById( $pid ); $title = $parentData['text'] . ' 的下级区域'; } $this->_init( $title ); //uri $this->_addParam( 'uri', [ ] ); //查询参数 $this->_addParam( 'query', [ 'pid' => $pid, 'keyword' => $request->input( 'keyword', '' ), 'status' => $request->input( 'status', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 50 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), 'getAll' => false, ] ); //其他参数 $this->_addParam( [ 'defaultRow' => $this->service->getDefaultRow(), 'status' => $this->service->status, ] ); //需要引入的 css 和 js $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' ); return $this->_displayWithLayout('backend::sysarea.index'); } /** * 读取 * @return Json */ public function read(Request $request) { $config = [ 'pid' => $request->input( 'pid', 0 ), 'status' => $request->input( 'status', '' ), 'keyword' => $request->input( 'keyword', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 50 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ]; $data['rows'] = $this->service->getByCond( $config ); $config['count'] = TRUE; $data['total'] = $this->service->getByCond( $config ); return response()->json( ajax_arr( '查询成功', 0, $data ) ); } } ================================================ FILE: src/Controllers/Backend/SysBase.php ================================================ '' , //页面title 'jsLib' => [] , //自定义js uri 'cssLib' => [] , //自定义css uri 'param' => [ //页面需要用到的参数 'uri' => [] , ] , 'initPageJs' => TRUE , //是否加载本页面 js 'jsCode' => [ //其余js代码 //"Layout.setSidebarMenuActiveLink('match');" ] , ]; public function __construct(Request $request) { $routeAction = Route::currentRouteAction(); $routes = $this->parseRouteAction($routeAction); $this->baseUri = config('backend.baseUri'); $this->module = strtolower($routes['module']); $this->controller = $routes['controller']; $this->action = $routes['action']; $this->_initClassJs(); if($this->autoload_service){ $this->_initService(); $jsCode = <<controller}.init(); EOF; $this->_addJsCode($jsCode); } } private function _initService(){ if(class_exists('App\\'.ucfirst($this->module).'\\Service\\'.$this->controller.'Service')){ $this->service = ServiceManager::make( 'App\\'.$this->module.'\\Service\\'.$this->controller.'Service'); }elseif(class_exists('App\\Service\\'.$this->controller.'Service')){ $this->service = ServiceManager::make( 'App\\Service\\'.$this->controller.'Service'); }elseif(class_exists('Smart\\Service\\'.$this->controller.'Service')){ $this->service = ServiceManager::make( 'Smart\\Service\\'.$this->controller.'Service'); } } private function parseRouteAction($routeAction){ // $routeAction = 'App\Http\Controllers\Backend\SysFunc@index'; preg_match('/^Smart\\\Controllers\\\(?P\w+)\\\(?P\w+)@(?P\w+)/', $routeAction, $matches); if( empty($matches) ){ preg_match('/^App\\\(?P\w+)\\\Controllers\\\(?P\w+)@(?P\w+)/', $routeAction, $matches); } return $matches; } public function _init($pageTitle = '新页面'){ $currentBaseUri = "{$this->baseUri}{$this->module}/{$this->controller}/"; $this->data['param']['pageTitle'] = $pageTitle; $this->data['param']['uri'] = [ 'base' => $this->baseUri , 'module' => "{$this->baseUri}{$this->module}/index/index" , 'img' => config( 'backend.image.imgUri' ) , 'menu' => "" , 'this' => full_uri( $currentBaseUri . $this->action ) , 'chPwd' => full_uri( "backend/auth/changePassword" ) , 'read' => full_uri( $currentBaseUri . 'read' ) , 'insert' => full_uri( $currentBaseUri . 'insert' ) , 'update' => full_uri( $currentBaseUri . 'update' , [ 'id' => '' ] ) , 'destroy' => full_uri( $currentBaseUri . 'destroy' ) , ]; } public function _initClassJs( ){ $this->classJs = $this->classJs ?: $this->controller; } /** * 生成页面js uri * * @return string */ public function _getPageJsPath() { return "static/js/{$this->module}/{$this->classJs}.js"; } public function _addJsLib($uri){ $this->data['jsLib'][] = $uri; } public function _addJsCode($code = ''){ $this->data['jsCode'][] = $code; } public function _addCssLib($uri){ $this->data['cssLib'][] = $uri; } public function _addCssCode($code){ $this->data['jsCode'][] = $code; } public function _addParam( $key , $value = '' ){ if ( is_array( $key ) ) { foreach ( $key as $k => $v ) { $this->data['param'][ $k ] = $v; } } else { if ( is_array( $value ) ) { if ( isset( $this->data['param'][ $key ] ) ) { $this->data['param'][ $key ] = array_merge( $this->data['param'][ $key ] , $value ); } else { $this->data['param'][ $key ] = $value; } } else { $this->data['param'][ $key ] = $value; } } } public function _addData($key ,$value){ if ( is_array( $key ) ) { foreach ( $key as $k => $v ) { $this->data[ $k ] = $v; } } else { if ( is_array( $value ) ) { if ( isset( $this->data[ $key ] ) ) { $this->data[ $key ] = array_merge( $this->data[ $key ] , $value ); } else { $this->data[ $key ] = $value; } } else { $this->data[ $key ] = $value; } } } public function _makeJs(){ $html = []; //引用页面JS文件 if ( $this->data['initPageJs'] ) { $this->data['jsLib'][] = $this->_getPageJsPath(); $this->className && $this->data['jsCode'][] = $this->className . '.init();'; } foreach ( $this->data['jsLib'] as $item ) { $html[] = ''; } if($this->data['jsCode']){ $html[] = ''; } return join( "\n" , $html ); } public function _makeCss(){ $html = []; foreach ( $this->data['cssLib'] as $item ) { $html[] = ''; } return join( "\n" , $html ); } public function _empty(){ } public function upload(Request $request){ $param = $request->all( ); $param['isKE'] = $request->input( 'isKE' , 0 ); $param['merId'] = $this->merId; $Upload = ServiceManager::make( UploadService::class ); return json( $Upload->doUpload( $param ) ); } public function read_album(Request $request){ $MerAlbum = MerAlbumService::instance(); $config = [ 'field' => [ 'id' , 'uri' , 'mimes' , 'desc' , 'img_size' ] , 'merId' => $this->merId , 'catalog' => $request->input( 'catalog' , '' ) , 'sort' => 'id' , 'order' => 'DESC' , 'status' => 1 , 'page' => $request->input( 'page' , 1 ) , 'pageSize' => $request->input( 'pageSize' , 12 ) , ]; $result['rows'] = $MerAlbum->getByCond( $config ); $config['count'] = TRUE; $result['total'] = $MerAlbum->getByCond( $config ); return json( $result ); } /** * 取相册分类 * * @return Json */ public function read_album_catalog() { $MerAlbumCatalog = MerAlbumCatalogService::instance(); $result = $MerAlbumCatalog->getByCond( [ 'field' => [ 'id' , 'tag' ] , 'merId' => $this->merId , 'sort' => 'sort' , 'order' => 'ASC' , 'status' => 1 , 'getAll' => TRUE ] ); return json( $result ); } public function read_area($pid){ $SysArea = SysAreaService::instance(); $cacheName = config( 'backend.areaCachePrefix' ) . $pid; $data = cache( $cacheName ); if ( empty( $data ) ) { $data = $SysArea->getByCond( [ 'pid' => $pid , 'getAll' => TRUE ] ); cache( $cacheName , $data , 86400 ); } return json( ajax_arr( '查询成功' , 0 , $data ) ); } public function insert(Request $request){ $data = $request->except('_token'); return json($this->service->insert($data)); } public function update(Request $request ,$id){ $data = $request->except('_token' ); return json( $this->service->update( $id , $data ) ); } public function destroy(Request $request){ $data = $request->all(); return json( $this->service->destroy( $data['ids'])); } } ================================================ FILE: src/Controllers/Backend/SysFunc.php ================================================ _init('系统功能'); //uri $this->_addParam('uri', [ 'updatePrivilege' => full_uri('Backend/SysFunc/update_privilege', ['funcId' => '']), ]); //查询参数 $this->_addParam('query', [ 'module' => 'backend', 'keyword' => $request->input('keyword', ''), 'status' => $request->input('status', ''), 'page' => $request->input('page', 1), 'pageSize' => $request->input('pageSize', 10), 'sort' => $request->input('sort', 'id'), 'order' => $request->input('order', 'DESC'), ]); //其他参数 $SysFuncPrivilege = SysFuncPrivilegeService::instance(); $this->_addParam([ 'defaultRow' => $this->service->getDefaultRow(), 'status' => $this->service->status, 'isMenu' => $this->service->isMenu, 'isFunc' => $this->service->isFunc, 'privilege' => $SysFuncPrivilege->name, 'alias' => $SysFuncPrivilege->alias, ]); //需要引入的 css 和 js $this->_addJsLib('static/plugins/dmg-ui/TreeGrid.js'); // var_dump($request->server());exit; return $this->_displayWithLayout('backend::sysfunc/index'); } /** * 读取 */ function read(Request $request) { $config = [ 'module' => $request->input('module',''), 'status' => $request->input('status', ''), 'keyword' => $request->input('keyword', ''), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input('sort', 'id'), 'order' => $request->input('order', 'DESC'), 'module' => 'backend', 'withPrivilege' => TRUE, ]; $data['rows'] = $this->service->getByCond( $config ); $config['count'] = TRUE; $data['total'] = $this->service->getByCond( $config ); return response()->json(ajax_arr('查询成功', 0, $data)); } /** * 更新权限 * */ function update_privilege(Request $request) { $funcId = $request->funcId; $data = $request->all(); $SysFuncPrivilege = SysFuncPrivilegeService::instance(); $ret = $SysFuncPrivilege->updateByFunc($funcId, $data); return response()->json($ret); } } ================================================ FILE: src/Controllers/Backend/SysMail.php ================================================ * Date: 2017/9/25 * Time: 14:22 */ namespace Smart\Controllers\Backend; use Smart\Service\SysMailService; use Illuminate\Http\Request; use Facades\Smart\Service\ServiceManager; class SysMail extends Backend { //页面入口 public function index(Request $request) { $this->_init( '邮件' ); //uri $this->_addParam( 'uri' , [ 'send' => full_uri( 'backend/sysmail/send' ) ] ); //查询参数 $this->_addParam( 'query' , [ 'keyword' => $request->input( 'keyword' , '' ) , 'status' => $request->input( 'status' , '' ) , 'page' => $request->input( 'page' , 1 ) , 'pageSize' => $request->input( 'pageSize' , 10 ) , 'sort' => $request->input( 'sort' , 'id' ) , 'order' => $request->input( 'order' , 'DESC' ) , ] ); //其他参数 $this->_addParam( [ 'defaultRow' => $this->service->getDefaultRow() , 'status' => $this->service->status , 'type' => $this->service->type ] ); //需要引入的 css 和 js $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' ); return $this->_displayWithLayout('backend::sysmail.index'); } /** * 读取 * @return \Json */ public function read(Request $request) { $config = [ 'status' => $request->input( 'status' , '' ) , 'keyword' => $request->input( 'keyword' , '' ) , 'page' => $request->input( 'page' , 1 ) , 'pageSize' => $request->input( 'pageSize' , 10 ) , 'sort' => $request->input( 'sort' , 'id' ) , 'order' => $request->input( 'order' , 'DESC' ) , ]; $data['rows'] = $this->service->getByCond( $config ); $config['count'] = TRUE; $data['total'] = $this->service->getByCond( $config ); return json( ajax_arr( '查询成功' , 0 , $data ) ); } public function send(Request $request) { $id = $request->input('id'); $result = $this->service->sendById( $id ); return json( $result ); } } ================================================ FILE: src/Controllers/Backend/SysMerchant.php ================================================ * Date: 2017/9/18 * Time: 17:40 */ namespace Smart\Controllers\Backend; use Smart\Service\SysMerchantService; use Illuminate\Http\Request; use Facades\Smart\Service\ServiceManager; class SysMerchant extends Backend { //页面入口 public function index(Request $request) { $this->_init( '机构管理' ); //uri $this->_addParam( 'uri' , [ 'area' => full_uri( 'backend/sysmerchant/read_area' , [ 'pid' => '' ] ) , 'upload' => full_uri( 'backend/sysmerchant/upload' ) , 'albumCatalog' => full_uri( 'backend/sysmerchant/read_album_catalog' ) , 'album' => full_uri( 'backend/sysmerchant/read_album' ) , 'detail' => full_uri( 'backend/Sysmerchant/read_detail' , [ 'id' => '' ] ) ] ); //查询参数 $this->_addParam( 'query' , [ 'keyword' => $request->input( 'keyword' , '' ) , 'status' => $request->input( 'status' , '' ) , 'page' => $request->input( 'page' , 1 ) , 'pageSize' => $request->input( 'pageSize' , 10 ) , 'sort' => $request->input( 'sort' , 'id' ) , 'order' => $request->input( 'order' , 'DESC' ) , ] ); //上传参数 $this->_addParam( 'uploadParam' , [ 'width' => 300 , 'height' => 300 , 'saveAsAlbum' => TRUE , 'albumTag' => '图标' , ] ); //相册参数 $this->_addParam( 'albumParam' , [ 'defaultTag' => '图标' , 'pageSize' => 12 , ] ); //其他参数 $this->_addParam( [ 'defaultRow' => $this->service->getDefaultRow() , 'status' => $this->service->status , 'forTest' => $this->service->forTest , ] ); //需要引入的 css 和 js $this->_addCssLib( 'node_modules/jcrop-0.9.12/css/jquery.Jcrop.min.css' ); $this->_addJsLib( 'node_modules/jcrop-0.9.12/js/jquery.Jcrop.min.js' ); $this->_addJsLib( 'static/plugins/dmg-ui/Uploader.js' ); $this->_addJsLib( 'static/plugins/dmg-ui/AreaSelection.js' ); $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' ); return $this->_displayWithLayout('backend::sysmerchant.index'); } /** * 读取 * @return \Json */ function read(Request $request) { $config = [ 'status' => $request->input( 'status' , '' ) , 'keyword' => $request->input( 'keyword' , '' ) , 'page' => $request->input( 'page' , 1 ) , 'pageSize' => $request->input( 'pageSize' , 10 ) , 'sort' => $request->input( 'sort' , 'id' ) , 'order' => $request->input( 'order' , 'DESC' ) , 'withSysUser' => TRUE ]; $data['rows'] = $this->service->getByCond( $config ); $config['count'] = TRUE; $data['total'] = $this->service->getByCond( $config ); return json( ajax_arr( '查询成功' , 0 , $data ) ); } function read_detail($id) { $merData = $this->service->getById( $id ); $this->_init( "机构 " . $merData['name'] . ' 管理页' ); $this->_addParam( 'uri' , [ 'menu' => '/backend/sysmerchant/index' , ] ); $this->_addData( 'merId' , $id ); $this->_addData( 'initPageJs' , FALSE ); $this->_addJsLib( 'static/js/backend/SysMerchantDetail.js' ); $this->_addJsCode( 'SysMerchantDetail.init()' ); return $this->_displayWithLayout( 'backend::sysmerchant.detail' ); } } ================================================ FILE: src/Controllers/Backend/SysModule.php ================================================ * @version 2.0 , 2018-06-13 */ use Facades\Smart\Service\ServiceManager; use Illuminate\Http\Request; use Smart\Service\SysModuleService; class SysModule extends Backend { //页面入口 public function index(Request $request) { $this->_init('模块列表'); //uri $this->_addParam('uri', [ 'modulefunc' => 'backend/modulefunc/index', ]); //查询参数 $this->_addParam('query', [ 'keyword' => $request->input('keyword', ''), 'status' => $request->input('status', ''), 'page' => $request->input('page', 1), 'pageSize' => $request->input('pageSize', 10), 'sort' => $request->input('sort', 'id'), 'order' => $request->input('order', 'DESC'), ]); //其他参数 $this->_addParam([ 'defaultRow' => $this->service->getDefaultRow(), 'status' => $this->service->status, ]); //需要引入的 css 和 js $this->_addJsLib( 'static/plugins/dmg-ui/Uploader.js' ); $this->_addJsLib( 'static/plugins/dmg-ui/AreaSelection.js' ); $this->_addJsLib('static/plugins/dmg-ui/TableGrid.js'); return $this->_displayWithLayout('backend::sysmodules.index'); } /** * 读取 * @return response->Json */ public function read(Request $request) { $config = [ 'status' => $request->input('status', ''), 'keyword' => $request->input('keyword', ''), 'page' => $request->input('page', 1), 'pageSize' => $request->input('pageSize', 10), 'sort' => $request->input('sort', 'id'), 'order' => $request->input('order', 'DESC'), ]; $data['rows'] = $this->service->getByCond($config); $config['count'] = TRUE; $data['total'] = $this->service->getByCond($config); return json(ajax_arr('查询成功', 0, $data)); } } ================================================ FILE: src/Controllers/Backend/SysPush.php ================================================ * Date: 2017/9/22 * Time: 17:20 */ namespace Smart\Controllers\Backend; use Smart\Service\SysPushService; use Illuminate\Http\Request; use Facades\Smart\Service\ServiceManager; class SysPush extends Backend { //页面入口 public function index(Request $request , SysPushService $sysPushService) { $this->_init( '消息推送' ); //uri $this->_addParam( 'uri', [ 'send' => full_uri( 'backend/syspush/send' ) ] ); //查询参数 $this->_addParam( 'query', [ 'keyword' => $request->input( 'keyword', '' ), 'status' => $request->input( 'status', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ] ); //其他参数 $this->_addParam( [ 'defaultRow' => $this->service->getDefaultRow(), 'status' => $this->service->status, 'catalog' => $this->service->catalog, 'platform' => $this->service->platform ] ); //需要引入的 css 和 js $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' ); return $this->_displayWithLayout('backend::syspush.index'); } /** * 读取 * @return \Json */ function read(Request $request) { $config = [ 'status' => $request->input( 'status', '' ), 'keyword' => $request->input( 'keyword', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ]; $data['rows'] = $this->service->getByCond( $config ); $config['count'] = TRUE; $data['total'] = $this->service->getByCond( $config ); return json( ajax_arr( '查询成功', 0, $data ) ); } function send(Request $request) { $id = $request->input( 'id' ); $result = $this->service->sendById( $id ); return json( $result ); } } ================================================ FILE: src/Controllers/Backend/SysRole.php ================================================ _init('系统角色管理'); //uri $this->_addParam('uri', [ 'getPermission' => full_uri('backend/sysrole/get_permission'), 'getPrivilegeData' => full_uri('backend/sysrole/get_privilegeData'), 'updatePermission' => full_uri('backend/sysrole/update_permission'), ]); //查询参数 $this->_addParam('query', [ 'keyword' => $request->input('keyword', ''), 'status' => $request->input('status', ''), 'page' => $request->input('page', 1), 'pageSize' => $request->input('pageSize', 10), 'sort' => $request->input('sort', 'id'), 'order' => $request->input('order', 'DESC'), ]); //其他参数 $this->_addParam([ 'defaultRow' => $this->service->getDefaultRow(), 'status' => $this->service->status, 'rank' => $this->service->rank, ]); //需要引入的 css 和 js $this->_addJsLib('static/plugins/dmg-ui/TableGrid.js'); return $this->_displayWithLayout('backend::sysrole/index'); } //读取 function read(Request $request) { $param = [ 'status' => $request->input('status', ''), 'keyword' => $request->input('keyword', ''), 'page' => $request->input('page', 1), 'pageSize' => $request->input('pageSize', 10), 'sort' => $request->input('sort', 'id'), 'order' => $request->input('order', 'DESC'), ]; $data['rows'] = $this->service->getByCond($param); $param['count'] = TRUE; $data['total'] = $this->service->getByCond($param); return response()->json(ajax_arr('查询成功', 0, $data)); } function get_permission(Request $request) { $roleId = $request->input('roleId'); $SysFuncPrivilege = SysFuncPrivilegeService::instance(); $data['privilegeName'] = $SysFuncPrivilege->name; //取角色操作权限 //取所有功能与操作 $SysFunc = SysFuncService::instance(); $data['funcData'] = $SysFunc->getByCond([ 'module' => $request->input('module', 'backend'), 'status' => 1, 'withPrivilege' => TRUE, ]); //var_dump(view( 'sysrole/index' )); // var_dump($data); //return view( 'sysrole/permission' )->with($data); return view('backend::sysrole/permission')->with($data); // return $ret; } function get_privilegeData(Request $request) { $roleId = $request->input('roleId'); $SysRolePermission = SysRolePermissionService::instance(); return response()->json($SysRolePermission->getByRole($roleId)); } //更新授权 function update_permission(Request $request) { $roleId = $request->input('roleId'); $privilegeArr = $request->input('privilegeArr'); $SysRolePermission = SysRolePermissionService::instance(); $ret = $SysRolePermission->updateRolePermission($roleId, $privilegeArr); return response()->json($ret); } } ================================================ FILE: src/Controllers/Backend/SysSettings.php ================================================ * @version 2.0 , 2018-06-25 */ use Facades\Smart\Service\ServiceManager; use Illuminate\Http\Request; use Smart\Service\SysSettingsService; class SysSettings extends Backend { //页面入口 public function index(Request $request) { $this->_init('SysSettings'); //uri $this->_addParam('uri', [ ]); //查询参数 $this->_addParam('query', [ 'keyword' => $request->input('keyword', ''), 'status' => $request->input('status', ''), 'page' => $request->input('page', 1), 'pageSize' => $request->input('pageSize', 10), 'sort' => $request->input('sort', 'id'), 'order' => $request->input('order', 'DESC'), ]); //其他参数 $this->_addParam([ 'defaultRow' => $this->service->getDefaultRow(), 'status' => $this->service->status, ]); //需要引入的 css 和 js $this->_addJsLib('static/plugins/dmg-ui/TableGrid.js'); return $this->_displayWithLayout('backend::SysSettings.index'); } //设置相关组的配置参数 public function indexGroup(Request $request, $group) { $this->_init($group); return $this->_displayWithLayout('backend::SysSettings.' . $group); } /** * 读取 * @return response->Json */ public function read(Request $request) { $config = [ 'status' => $request->input('status', ''), 'keyword' => $request->input('keyword', ''), 'page' => $request->input('page', 1), 'pageSize' => $request->input('pageSize', 10), 'sort' => $request->input('sort', 'id'), 'order' => $request->input('order', 'DESC'), ]; $data['rows'] = $this->service->getByCond($config); $config['count'] = TRUE; $data['total'] = $this->service->getByCond($config); return json(ajax_arr('查询成功', 0, $data)); } } ================================================ FILE: src/Controllers/Backend/SysSms.php ================================================ * Date: 2017/9/25 * Time: 10:20 */ namespace Smart\Controllers\Backend; use Smart\Service\SysSmsService; use Illuminate\Http\Request; use Facades\Smart\Service\ServiceManager; class SysSms extends Backend { //页面入口 public function index(Request $request) { $this->_init( '短信' ); //uri $this->_addParam( 'uri', [ ] ); //查询参数 $this->_addParam( 'query', [ 'keyword' => $request->input( 'keyword', '' ), 'status' => $request->input( 'status', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ] ); //其他参数 $this->_addParam( [ 'defaultRow' => $this->service->getDefaultRow(), 'status' => $this->service->status, 'type' => $this->service->type ] ); //需要引入的 css 和 js $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' ); return $this->_displayWithLayout('backend::syssms.index'); } /** * 读取 * @return \Json */ function read(Request $request) { $config = [ 'status' => $request->input( 'status', '' ), 'keyword' => $request->input( 'keyword', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ]; $data['rows'] = $this->service->getByCond( $config ); $config['count'] = TRUE; $data['total'] = $this->service->getByCond( $config ); return json( ajax_arr( '查询成功', 0, $data ) ); } } ================================================ FILE: src/Controllers/Backend/SysUser.php ================================================ * Date: 2017/9/16 * Time: 13:31 */ namespace Smart\Controllers\Backend; use Facades\Smart\Service\ServiceManager; use Illuminate\Http\Request; use Smart\Models\SysUser as SysUserModel; use Smart\Service\SysRoleService; use Smart\Service\SysUserService; use Smart\Service\SysUserDeviceService; class SysUser extends Backend { /** * SysUser constructor. */ /** * 页面显示接口 * * @return string */ public function index(Request $request) { $this->_init('系统用户'); $this->_addParam('uri', [ 'upload' => full_uri('backend/sysuser/upload'), 'resetPwd' => full_uri('backend/sysuser/reset_pwd', ['id' => '']), 'albumCatalog' => full_uri('backend/sysuser/read_album_catalog'), 'album' => full_uri('backend/sysuser/read_album'), 'test' => full_uri('backend/sysuser/test'), ]); //上传参数 $this->_addParam('uploadParam', [ 'width' => 300, 'height' => 300, 'saveAsAlbum' => TRUE, 'albumTag' => '头像', ]); //相册参数 $this->_addParam('albumParam', [ 'defaultTag' => '头像', 'pageSize' => 12, ]); //查询参数 $this->_addParam('query', [ 'keyword' => $request->input('keyword', ''), 'status' => $request->input('status', ''), 'page' => $request->input('page', 1), 'pageSize' => $request->input('pageSize', 10), ]); $SysRole = SysRoleService::instance(); $sysUserDevice = SysUserDeviceService::instance(); //附加参数 $this->_addParam([ 'defaultRow' => $this->service->getDefaultRow(), 'defaultPwd' => config('backend.defaultPwd'), 'status' => $this->service->status, 'roles' => $SysRole->getByModule($this->module), 'for_test' => $sysUserDevice->for_test, ]); $this->_addCssLib('node_modules/jcrop-0.9.12/css/jquery.Jcrop.min.css'); $this->_addJsLib('node_modules/jcrop-0.9.12/js/jquery.Jcrop.min.js'); $this->_addJsLib('static/plugins/dmg-ui/Uploader.js'); $this->_addJsLib('static/plugins/dmg-ui/TableGrid.js'); return $this->_displayWithLayout('backend::sysuser.index'); } /** * 读取 */ public function read(Request $request) { $config = [ 'module' => 'backend', 'keyword' => $request->input('keyword', ''), 'status' => $request->input('status', ''), 'page' => $request->input('page', 1), 'pageSize' => $request->input('pageSize', 10), 'withRoles' => TRUE, 'withTest' => TRUE, ]; $data['rows'] = $this->service->getByCond($config); $config['count'] = TRUE; $data['total'] = $this->service->getByCond($config); return response()->json(ajax_arr('查询成功', 0, $data)); } public function test(Request $request) { $id = $request->id; $sysuser = SysUserModel::with('UserDevice')->find($id); $for_test = $request->input('for_test'); if ($for_test) { $sysuser->api_token = md5(http_build_query($request->all()) . json_encode(['created_at' => time()])); $sysuser->save(); } $data = [ 'device' => 'iphone', 'api_version' => 'v1', 'for_test' => $for_test, ]; if (empty($sysuser->UserDevice)) { $result = $sysuser->UserDevice()->create($data); $msg = '新增成功'; } else { $sysuser->UserDevice->for_test = $for_test; $sysuser->UserDevice->save(); $msg = '更新成功'; } return json(ajax_arr($msg, 0)); } /** * 重置密码 * * @return json */ public function reset_pwd($id) { $result = $this->service->resetPwd($id, config('backend.defaultPwd')); return json($result); } } ================================================ FILE: src/Controllers/Controller.php ================================================ createModel()->newQuery(); // 用于标识是否是第一个登录字段,如果包含多个登录字段,使用 OR 查询 $flag = false; foreach ($credentials as $key => $value) { if (Str::contains($key, 'password')) { continue; } if ($flag) { $query->orWhere($key, $value); } else { $query->where($key, $value); $flag = true; } } return $query->first(); } } ================================================ FILE: src/Interfaces/TokenService.php ================================================ * Date: 2017/9/30 * Time: 15:29 */ interface TokenService{ } ================================================ FILE: src/Lib/Discover.php ================================================ root_dir = app_path().'/Api'; $this->filesystem = resolve('files'); } //获取版本 public function version(){ $dir = $this->root_dir.'/Service'; $dirs = $this->filesystem->directories($dir); $data = []; foreach($dirs as $dir_children){ $version = substr($dir_children, strrpos($dir_children,'/')+1); $data[$version ] = [ [ 'version' => $version, 'text' => $version, ] ]; } return $data; } //获取版本所在目录 public function dir($version){ //列出版本下的目录 } //获取服务类 public function service($version){ $dir = app_path('Api') . '/Service/' . $version; $files = $this->filesystem->allFiles($dir); $class_func = function($file_path){ $class_tmp = Str::after($file_path, base_path()); $class_arr = explode('/' ,$class_tmp); $class_arr = array_filter($class_arr); $class_arr = array_map(function($val){ return Str::studly($val); }, $class_arr); return Str::before( join('\\', $class_arr), '.php'); }; $data = []; foreach($files as $file){ $filename = $file->getRelativePathname(); $class = substr( $filename, 0, strripos($filename , 'Service.php')); $class = $class_func($file); $name = $this->_parser($class); $directory = $this->filesystem->dirname($file); $dir = substr($directory , strrpos($directory,'/')+1); $action = strtolower(Str::before($this->filesystem->name($file),'Service')); $data[$dir][] = ['directory' => $dir, 'action' =>$action , 'text'=> $name]; } return $data; /*$discover_path = function ($dir) use (&$discover_path, $filesystem){ $dirs = $filesystem->directories($dir); foreach($dirs as $dir_children){ $version = substr($dir_children, strrpos($dir_children,'/')+1); // substr($dir_children,) $files = $filesystem->allFiles($dir_children); foreach($files as $file){ $service = $filesystem->name($file); // echo $service."\n"; } $discover_path($dir_children); } }; $tmp = $discover_path($dir); //获取到版本号目录 $dirs = $filesystem->directories($dir); $version = []; foreach($dirs as $version){ array_push($version, $filesystem->name($dir)); } return $version;*/ } private function _parser($class){ $ref = new ReflectionClass( $class ); $doc = $ref->getDocComment(); preg_match( '#^/\*\*(.*)\*/#s', $doc, $comment ); $comment = trim( $comment [1] ); preg_match_all( '#^\s*\*(.*)#m', $comment, $lines ); $name = trim( $lines[1][0] ); preg_match_all( '/@deprecated([^@]*)/', $comment, $matches ); if ( empty( $matches[0] ) ) { return $name; } else { return FALSE; } } } ================================================ FILE: src/Middleware/CheckToken.php ================================================ api = ApiService::instance(); $this->api->debug = false; } public function handle($request, Closure $next) { $api = $this->api; $timestamp = $request->header( 'timestamp' ); $signature = $request->header( 'signature' ); if ( ! $api->validTimestamp( $timestamp ) ) { json( $api->getError( 405 ) )->send(); } $params = $request->all(); $api->log( 'params' , $params ); //取时间戳 $params['timestamp'] = $timestamp; //检查签名 if ( ! $api->validSignature( $params , $signature ) ) { json( $api->getError( 406 ) )->send() ; } // 参数错误 if ( ! is_array( $params ) || empty( $params ) ) { json( $api->getError( 400 ) )->send() ; } return $next($request); } public function terminate($request , $response){ $header = [ 'timestamp' => $request->header( 'timestamp' ) , 'signature' => $request->header( 'signature' ) , 'device' => $request->header( 'device' ) , 'deviceOsVersion' => $request->header( 'device-os-version' ) , 'appVersion' => $request->header( 'app-version' ) , 'apiVersion' => $request->input('version') , ]; $this->api->logStat( $header ); $this->api->log( 'headerData' , $header ); } } ================================================ FILE: src/Middleware/Cors.php ================================================ header('Access-Control-Allow-Origin', '*'); $response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, Accept, multipart/form-data, application/json'); $response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS'); $response->header('Access-Control-Allow-Credentials', 'false'); return $response; } } ================================================ FILE: src/Middleware/Permission.php ================================================ getById(Auth::id())->with('sysRole')->get(); $role = $roles->firstWhere('id', config('backend.superAdminId')); if ($role) { return $next($request); } if (empty($privilege)) { return response()->json(['msg' => '校验权限必填', 'code' => 422]); } //当前操作对应的id $funcUri = $module . '/' . $func . '/index'; $sysFuncService = ServiceManager::make(SysFuncService::class); $sysFunc = $sysFuncService->getByUri($funcUri); $data = $sysFunc->sysFuncPrivileges()->where('name', $privilege == 'index' ? 'read' : $privilege)->first(); //当前 if (empty($data)) { return response()->json(['msg' => '当前用户未设置任何权限', 'code' => 422]); } $privilege_id = $data->id; $sysRoleService = ServiceManager::make(SysRoleService::class); //筛选出符合条件的角色 foreach ($roles as $role) { //从角色中筛选出含该功能的角色 $sysRole = $sysRoleService->getById($role->id); $data = $sysRole::with('sysFuncPrivileges')->get(); foreach ($data as $d) { //只要有一个角色符合条件,就说明验证通过 $result = $d->sysFuncPrivileges->firstWhere('id', $privilege_id); if ($result) { return $next($request); } } //从符合条件的角色中筛选出符号当前操作的角色 } return response()->json(['msg' => '无此权限', 'code' => 422]); } } ================================================ FILE: src/Middleware/ResetPassword.php ================================================ user(); if($request->pwd != $request->pwdConfirm){ return response()->json(ajax_arr('两次输入的新密码不一致', 500)); } $oldPwd = Hash::make($request->oldPwd); if(!Auth::guard()->attempt( ['username' => $request->user()->username , 'email' => $request->user()->username, 'password' => $request->oldPwd] )){ return response()->json(ajax_arr('原密码错误', 500)); } $request->offsetSet('password', $request->pwd); return $next($request); } } ================================================ FILE: src/Models/MerAlbum.php ================================================ * @version 2.0 , 2017-09-26 */ use Illuminate\Database\Eloquent\Model; class MerAlbum extends Model { public $table = 'mer_album'; public $primaryKey = 'id'; public $timestamps = FALSE; use \Smart\Traits\Service\Scope; protected $fillable = ['mer_id','sort','uri','size','mimes','img_size','desc','status']; public function scopeKeyword( $query , $param){ if($param) return $query->where('name' , 'like' , "%{$param}%"); } public function tag(){ return $this->belongsToMany( MerAlbumCatalog::class , 'mer_album_tag' , 'album_id' , 'catalog_id' ); } } ================================================ FILE: src/Models/MerAlbumCatalog.php ================================================ where('name' , 'like' , "%{$param}%"); } public function scopeMerId( $query , $param){ if($param === ''){ return $query->whereNull('mer_id'); }else{ return $query->where('mer_id' , $param); } } public function album(){ return $this->belongsToMany( MerAlbum::class , 'mer_album_tag' , 'catalog_id' , 'album_id' ); } // } ================================================ FILE: src/Models/MerAlbumTag.php ================================================ * @version 2.0 , 2017-09-26 */ use Illuminate\Database\Eloquent\Model; class MerAlbumTag extends Model { public $table = 'mer_album_tag'; public $primaryKey = 'id'; public $timestamps = FALSE; use \Smart\Traits\Service\Scope; public function scopeKeyword( $query , $param){ if($param) return $query->where('name' , 'like' , "%{$param}%"); } } ================================================ FILE: src/Models/MerGoodsCatalog.php ================================================ where('text' , 'like' , "%{$param}%"); } // } ================================================ FILE: src/Models/MerSysUser.php ================================================ where('name' , 'like', "%{$param}%"); } } ================================================ FILE: src/Models/MerUser.php ================================================ hasOne('Smart\Models\MerUserDevice'); }*/ public function scopeKeyword($query , $param){ if($param) return $query->where(function($query) use ($param){ $query->orWhere('username' , 'like' , "%{$param}%")->orWhere('nickname' , 'like' , "%{$param}%")->orWhere( 'phone' , 'like' , "%{$param}%"); }); } public function scopeMerId($query , $param){ if($param) return $query->where('mer_id' , $param); } public function scopePhone($query , $param){ if($param) return $query->where('phone' , $param); } public function scopeUsername($query , $param){ if($param) return $query->where( 'username' , $param); } public function scopeNickname($query , $param){ if($param) return $query->where( 'nickname' , $param); } public function scopeEmail($query , $param){ if($param) return $query->where('email' , $param ); } public function scopeStatus($query , $param){ if($param !== '') return $query->where('status' , $param); } public function scopeExcludeId($query , $param){ if($param) return $query->where('id' , '<>' , $param); } public function scopeGetAll($query , $params = ['getAll'=>false]){ if(!$params['getAll']) return $query->skip(($params['page']-1) * $params['pageSize'] )->take($params['pageSize'] ); } } ================================================ FILE: src/Models/MerUserDevice.php ================================================ belongsTo('Smart\Models\MerUser'); } // } ================================================ FILE: src/Models/SysApiLog.php ================================================ * @version 2.0 , 2017-09-25 */ use Illuminate\Database\Eloquent\Model; class SysApiLog extends Model { public $table = 'sys_api_log'; public $primaryKey = 'id'; public $timestamps = FALSE; use \Smart\Traits\Service\Scope; } ================================================ FILE: src/Models/SysAppVersion.php ================================================ where('description' , 'like' , "%{$param}%"); } // } ================================================ FILE: src/Models/SysArea.php ================================================ where('pid',$param); } } ================================================ FILE: src/Models/SysFunc.php ================================================ where('is_menu', $param); } } public function scopeModule($query, $param = '') { if ($param) { return $query->whereIn('module', (array)$param); } } public function sysRolePermissions() { return $this->belongsToMany(\Smart\Models\SysRolePermission::class, 'sys_func_privilege', 'id', 'func_id'); } public function privilege() { return $this->hasMany(\Smart\Models\SysFuncPrivilege::class, 'func_id'); } public function children(){ return $this->hasMany( SysFunc::class , 'pid'); } } ================================================ FILE: src/Models/SysFuncPrivilege.php ================================================ belongsTo(\Smart\Models\SysFunc::class, 'func_id'); } } ================================================ FILE: src/Models/SysMail.php ================================================ where('keyword' , 'like' , "%{$param}%"); } // } ================================================ FILE: src/Models/SysMerchant.php ================================================ where('name' , 'like' , "%{$param}%"); } public function sysUsers(){ return $this->belongsToMany('Smart\Models\SysUser' , 'mer_sys_user' , 'mer_id' , 'sys_user_id'); } } ================================================ FILE: src/Models/SysModule.php ================================================ where('name' , 'like' , "%{$param}%"); } // } ================================================ FILE: src/Models/SysRole.php ================================================ belongsToMany(SysFuncPrivilege::class, 'sys_role_permission', 'role_id', 'privilege_id'); } } ================================================ FILE: src/Models/SysRolePermission.php ================================================ belongsToMany(Smart\Models\SysFunc::class, 'sys_func_privilege', 'func_id', 'id'); } } ================================================ FILE: src/Models/SysSettings.php ================================================ * @version 2.0 , 2018-06-25 */ use Illuminate\Database\Eloquent\Model; class SysSettings extends Model { public $table = 'sys_settings'; public $primaryKey = 'id'; public $timestamps = True; use \Smart\Traits\Service\Scope; } ================================================ FILE: src/Models/SysSms.php ================================================ where( 'name' , 'like' , "%{$param}%"); } } ================================================ FILE: src/Models/SysStatistics.php ================================================ * @version 2.0 , 2017-09-25 */ use Illuminate\Database\Eloquent\Model; class SysStatistics extends Model { public $table = 'sys_statistics'; public $primaryKey = 'id'; public $timestamps = FALSE; use \Smart\Traits\Service\Scope; } ================================================ FILE: src/Models/SysUser.php ================================================ belongsToMany('Smart\Models\SysMerchant', 'mer_sys_user', 'sys_user_id', 'mer_id'); } public function scopeModule($query , $param = ''){ if($param) return $query->where('module' , $param); } public function sysRole() { return $this->belongsToMany(SysRole::class, 'sys_user_role', 'user_id', 'role_id'); } public function UserDevice() { return $this->hasOne(\Smart\Models\SysUserDevice::class, 'user_id'); } public function scopeKeyword($query, $param) { if ($param) { return $query->where(function ($query) use ($param) { $query->orWhere('username', 'like', "%{$param}%")->orWhere('phone', 'like', "%{$param}%"); }); } } public function username() { return 'username'; } } ================================================ FILE: src/Models/SysUserDevice.php ================================================ * @version 2.0 , 2018-06-18 */ use Illuminate\Database\Eloquent\Model; class SysUserDevice extends Model { public $table = 'sys_user_device'; public $primaryKey = 'id'; public $timestamps = FALSE; protected $fillable = ['user_id','for_test', 'token', 'device', 'api_version']; use \Smart\Traits\Service\Scope; public function user() { return $this->belongsTo(\Smart\Models\SysUser::class, 'user_id'); } } ================================================ FILE: src/Models/SysUserRole.php ================================================ where('name' , 'like' , "%{$param}%"); } } ================================================ FILE: src/Models/User.php ================================================ * Date: 2017/9/25 * Time: 14:46 */ namespace Smart\Service; use Facades\Smart\Service\ServiceManager; use Illuminate\Support\Facades\DB; use Smart\Service\SysModuleService; use Illuminate\Support\Str; define('SYSTEM_TEMP_BASE_PATH', __DIR__ . '/../../templates/generate/system/'); define('API_TEMP_BASE_PATH', __DIR__ . '/../../templates/generate/api'); define('APP_PATH', app_path()); define('BASE_PATH', base_path()); class GenerateService { public $type = [ 'system' => '管理模块', 'api' => 'API 接口', ]; //模块 public $module = []; public $apiVer = [ 'v1' => 'v1', 'v2' => 'v2', ]; var $apiParams = [ 'api_token' => 'api_token (用户Token)', 'phone' => 'phone (手机号)', 'status' => 'status (状态)', 'merId' => 'mer_id (机构ID)', 'orderId' => 'orderId (订单ID)', 'goodsId' => 'goodsId (商品ID)', 'page' => 'page (页码)', 'pageSize' => 'pageSize (每面行数)', ]; var $apiAuthUser = [ 0 => '否', 1 => '是', ]; //表类型 var $tableType = [ 'grid' => 'Grid', 'treeGrid' => 'Tree Grid', ]; //视图类型 var $viewType = [ 'portlet' => '层 (Portlet)', 'modal' => '弹窗 (Modal)', ]; //文件存储路径 ucfirst() protected $filePath = [ // 'model' => base_path('common/model/{func}.php'), 'model' => APP_PATH . '/{module}/Models/{func}.php', 'service' => APP_PATH . '/{module}/Service/{func}Service.php', 'controller' => APP_PATH . '/{moduleLower}/controllers/{func}.php', 'js' => 'static/js/{moduleLower}/{func}.js', // 'view' => BASE_PATH . '/resources/views/{module}/{funcLower}/index.html', 'view' => APP_PATH . '/{moduleLower}/views/{funcLower}/index.blade.php', 'api' => APP_PATH . '/Api/Service/', ]; //字段识别 var $fieldIdentify = [ //上传字段 'upload' => ['icon', 'icon_2x', 'icon_3x', 'img', 'image', 'pic'], //editor 'editor' => ['content'], 'tableType' => ['pid', 'level'], //radio 'radio' => ['status', 'type', 'catalog'], //select 'select' => ['pid'], //form 排除字段 'formExclusion' => ['id', 'mer_id', 'created_at', 'level', 'updated_at'], //th 排除字段 'thExclusion' => ['mer_id', 'desc', 'content', 'level'], //th 格式化方法 'thFormatter' => [ 'catalog' => 'data-formatter="formatCatalog"', 'icon' => 'data-formatter="formatIcon"', 'status' => 'data-formatter="formatStatus"', 'type' => 'data-formatter="formatType"', 'created_at' => 'data-formatter="formatDatetime"', ], //th 宽度 'thWidth' => [ 'id' => '40', 'sort' => '40', 'text' => '200', 'name' => '200', 'title' => '200', 'created_at' => '180', ], ]; //模板 var $systemTemps = [ 'model' => 'model.txt', 'service' => 'service.txt', 'controller' => 'controller.txt', 'view' => 'view.txt', 'js' => 'js.txt', ]; var $systemComponents = [ 'traits' => [ 'instanceTrait' => 'component/traits/instance_trait.txt', ], 'editor' => [ 'controller' => [ 'editorDecode' => 'component/editor/controller/editor_decode.txt', 'editorJs' => 'component/editor/controller/editor_js.txt', 'editorUri' => 'component/editor/controller/editor_uri.txt', ], 'js' => [ 'editorClear' => 'component/editor/js/editor_clear.txt', 'editorInit' => 'component/editor/js/editor_init.txt', 'editorReload' => 'component/editor/js/editor_reload.txt', 'editorUploadUri' => 'component/editor/js/editor_upload_uri.txt', ], ], 'field' => [ 'view' => [ 'editor' => 'component/field/view/editor.txt', 'input' => 'component/field/view/input.txt', 'radio' => 'component/field/view/radio.txt', 'select' => 'component/field/view/select.txt', 'select2' => 'component/field/view/select2.txt', 'upload' => 'component/field/view/upload.txt', ], ], 'select2' => [ 'controller' => [ 'select2Css' => 'component/select2/controller/select2_css.txt', 'select2Js' => 'component/select2/controller/select2_js.txt', 'select2Uri' => 'component/select2/controller/select2_uri.txt', ], 'js' => [ 'select2Clear' => 'component/select2/js/select2_clear.txt', 'select2Init' => 'component/select2/js/select2_init.txt', 'select2Set' => 'component/select2/js/select2_set.txt', ], ], 'tableType' => [ 'controller' => [ 'grid' => [ 'gridJs' => 'component/table_type/controller/grid_js.txt', 'gridRead' => 'component/table_type/controller/grid_read.txt', ], 'treeGrid' => [ 'treeGridJs' => 'component/table_type/controller/tree_grid_js.txt', 'treeGridRead' => 'component/table_type/controller/tree_grid_read.txt', ], ], 'js' => [ 'grid' => [ 'gridInit' => 'component/table_type/js/grid_init.txt', 'gridPlugin' => 'component/table_type/js/grid_plugin.txt', 'gridId' => 'component/table_type/js/grid_id.txt', ], 'treeGrid' => [ 'treeGridInit' => 'component/table_type/js/tree_grid_init.txt', 'treeGridPlugin' => 'component/table_type/js/tree_grid_plugin.txt', 'treeGridId' => 'component/table_type/js/tree_grid_id.txt', ], ], 'service' => [ 'grid' => [ 'grid' => 'component/table_type/service/grid.txt', 'gridTrait' => 'component/table_type/service/grid_trait.txt', ], 'treeGrid' => [ 'treeGrid' => 'component/table_type/service/tree_grid.txt', 'treeGridTrait' => 'component/table_type/service/tree_grid_trait.txt', ], ], 'view' => [ 'grid' => 'component/table_type/view/grid.txt', 'treeGrid' => 'component/table_type/view/tree_grid.txt', ], ], 'upload' => [ 'controller' => [ 'uploadJs' => 'component/upload/controller/upload_js.txt', 'uploadUri' => 'component/upload/controller/upload_uri.txt', 'uploadParam' => 'component/upload/controller/upload_param.txt', ], 'js' => [ 'uploadButton' => 'component/upload/js/upload_button.txt', 'uploadPreviewClear' => 'component/upload/js/upload_preview_clear.txt', 'uploadPreviewSet' => 'component/upload/js/upload_preview_set.txt', ], ], 'viewType' => [ 'js' => [ 'modal' => 'component/view_type/js/modal.txt', 'portlet' => 'component/view_type/js/portlet.txt', ], 'view' => [ 'modal' => 'component/view_type/view/modal.txt', 'portlet' => 'component/view_type/view/portlet.txt', ], ], ]; var $apiTemp = [ 'tmp' => API_TEMP_BASE_PATH . '/api.txt', 'authUser' => API_TEMP_BASE_PATH . '/auth_user.txt', ]; private static $instance; public static function instance() { if (self::$instance == NULL) { self::$instance = new GenerateService(); } self::$instance->_init(); return self::$instance; } private function _init() { //初始化Module $sysModuleService = ServiceManager::make(SysModuleService::class); // $modules = $sysModuleService->getByCond(['status' => 1]); /* foreach ($modules as $m) { $this->module = array_merge($this->module, [ucfirst($m['symbol']) => $m['symbol']]); }*/ $modules = explode(',',config('backend.module_ext')); $modules = array_combine($modules, $modules); $this->module = $modules; //初始化api版本号 $apiVersion = config('backend.api.apiVersion'); // $this->apiVer = [$apiVersion => $apiVersion]; } /** * 取所有表 * @return \Collection */ public function getTables() { $connection_name = config('database.default'); $connections = config('database.connections'); $data = DB::table('information_schema.tables') ->where('TABLE_SCHEMA', $connections[$connection_name]['database']) ->get(['table_name as tableName'])->toArray(); return $data ? $data : []; } private function getSystemComponents() { $component = []; foreach ($this->systemComponents as $key => $item) { $component[] = $key; } return $component; } private function getTableField($tableName) { $db = DB::table('information_schema.columns') ->where('TABLE_NAME', $tableName) ->where('TABLE_SCHEMA', config('database.connections.mysql.database')); return $db->get([ 'COLUMN_NAME AS fieldName', 'DATA_TYPE AS fieldType', 'COLUMN_DEFAULT AS fieldDefault', 'COLUMN_COMMENT AS fieldComment', ])->toArray(); } //取单个表信息 public function getSystemInfo($tableName, $module, $returnFieldInfo = FALSE) { $module = ucfirst($module); $fieldInfo = $this->getTableField($tableName); if (!$fieldInfo || empty($fieldInfo)) { return ajax_arr('表不存在', 500); } $components = $this->getSystemComponents(); $identify = []; foreach ($components as $component) { if (isset($this->fieldIdentify[$component])) { foreach ($fieldInfo as $item) { if (in_array($item->fieldName, $this->fieldIdentify[$component])) { $identify[$component] = $item->fieldName; } } if (!isset($identify[$component])) { $identify[$component] = ''; } } else { $identify[$component] = ''; } } if (!empty($identify['tableType'])) { $identify['tableType'] = 'treeGrid'; } else { $identify['tableType'] = 'grid'; } $identify['viewType'] = 'portlet'; unset($identify['field']); $func = $this->getFuncName($tableName); $replaceData = [ 'tableName' => $tableName, 'func' => $func, 'funcLower' => strtolower($func), 'funcUcfirst' => ucfirst(strtolower($func)), 'module' => $this->module[$module], 'moduleLower' => strtolower($this->module[$module]), ]; $filePath = [ 'model' => $this->replaceTmp($this->filePath['model'], $replaceData), 'service' => $this->replaceTmp($this->filePath['service'], $replaceData), 'controller' => $this->replaceTmp($this->filePath['controller'], $replaceData), 'view' => $this->replaceTmp($this->filePath['view'], $replaceData), 'js' => $this->replaceTmp($this->filePath['js'], $replaceData), ]; $fileExists = []; //检查是否存在 foreach ($filePath as $key => $row) { $fileExists[$key] = file_exists($row); } $data = [ 'tableName' => $tableName, 'module' => $module, 'func' => $func, 'funcName' => $func, 'filePath' => $filePath, 'fileExists' => $fileExists, 'components' => $identify, //'field_info' => $field_info, ]; if ($returnFieldInfo) { $data['fieldInfo'] = $fieldInfo; } return ajax_arr('查询成功', 0, $data); } //表名转功能名 private function getFuncName($tableName) { $tmp = explode('_', $tableName); $name = ''; foreach ($tmp as $s) { $name .= ucfirst($s); } $name = Str::singular($name); return $name; } //模板替换 function replaceTmp($tmpContent, $data) { foreach ($data as $key => $value) { $tmpContent = str_replace('{' . $key . '}', $value, $tmpContent); } return $tmpContent; } //生成全部 public function createSystem($data) { $temp = $data['temp']; $systemInfo = $this->getSystemInfo($data['tableName'], $data['module'], TRUE)['data']; $data['filePath'] = $systemInfo['filePath']; $data['func'] = $systemInfo['func']; $data['funcName'] = $systemInfo['funcName']; $data['fieldInfo'] = $systemInfo['fieldInfo']; $data['date'] = date('Y-m-d'); foreach ($systemInfo['components'] as $c => $v) { if (!isset($data['components'][$c])) { $data['components'][$c] = ''; } } //$data['components'] = extend( $system_info['components'], $data['components'] ); $ret = ajax_arr('正在创建', 500); if ($temp == 'all') { $files = 0; foreach ($systemInfo['fileExists'] as $key => $value) { //文件不存在就创建 if (!$value) { $files++; $method = "create" . ucfirst($key); $data['temp'] = $key; $ret = $this->$method($data); if ($ret['code'] != 0) { return ajax_arr($ret['msg'], 500); } } } if ($files == 0) { return ajax_arr("文件都存在了", 0); } return ajax_arr("创建成功", 0); } else { $method = "create" . ucfirst($temp); $ret = $this->$method($data); return $ret; } } private function createComponentTraits($temp, $tempContent, $value){ $component = 'traits'; if (!isset($this->systemComponents[$component])) { return $tempContent; } $replaceData = []; foreach($this->systemComponents[$component] as $keyword => $filePaths){ if ($keyword == $value) { $replaceData[$keyword] = file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePaths); } else { $replaceData[$keyword] = ''; } } return $this->replaceTmp($tempContent , $replaceData); } //table_type 组件 private function createComponentTableType($temp, $tempContent, $value) { $component = 'tableType'; if (!isset($this->systemComponents[$component][$temp])) { return $tempContent; } $replaceData = []; foreach ($this->systemComponents[$component][$temp] as $keyword => $filePaths) { // echo $filePaths . '----'; if (is_array($filePaths)) { foreach ($filePaths as $key => $filePath) { if ($keyword == $value) { $replaceData[$key] = file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePath); } else { $replaceData[$key] = ''; } } } else { if ($keyword == $value) { $replaceData[$keyword] = file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePaths); } else { $replaceData[$keyword] = ''; } } } return $this->replaceTmp($tempContent, $replaceData); } private function createComponentViewType($temp, $tempContent, $value) { $component = 'viewType'; if (!isset($this->systemComponents[$component][$temp])) { return $tempContent; } $replaceData = []; foreach ($this->systemComponents[$component][$temp] as $keyword => $filePaths) { if ($value == $keyword) { $replaceData[$keyword] = file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePaths); } else { $replaceData[$keyword] = ''; } } //print_r($replaceData); return $this->replaceTmp($tempContent, $replaceData); } //upload 组件 private function createComponentUpload($temp, $tempContent, $value, $data) { $component = 'upload'; if (!isset($this->systemComponents[$component][$temp])) { return $tempContent; } $replaceData = []; foreach ($this->systemComponents[$component][$temp] as $keyword => $filePaths) { if (!empty($data['components'][$component])) { $content = ''; $multi = ['uploadButton', 'uploadPreviewClear', 'uploadPreviewSet']; if (in_array($keyword, $multi)) { if (!is_array($value)) { $values[] = $value; } else { $values = $value; } foreach ($values as $v) { $field['field'] = $v; $content .= $this->replaceTmp(file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePaths), $field) . "\r"; } } else { $content = file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePaths); } $replaceData[$keyword] = $content; } else { $replaceData[$keyword] = ''; } } //print_r($replaceData); return $this->replaceTmp($tempContent, $replaceData); } private function createComponentEditor($temp, $tempContent, $value, $data) { $component = 'editor'; if (!isset($this->systemComponents[$component][$temp])) { return $tempContent; } $replaceData = []; foreach ($this->systemComponents[$component][$temp] as $keyword => $filePaths) { if (!empty($data['components'][$component])) { $content = ''; $multi = ['editorDecode', 'editorInit', 'editorClear', 'editorReload']; if (in_array($keyword, $multi)) { if (!is_array($value)) { $value = [$value]; } foreach ($value as $v) { $field['field'] = $v; $content .= $this->replaceTmp(file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePaths), $field) . "\r"; } } else { $content = file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePaths); } $replaceData[$keyword] = $content; } else { $replaceData[$keyword] = ''; } } return $this->replaceTmp($tempContent, $replaceData); } private function createComponentSelect2($temp, $tempContent, $value, $data) { $component = 'select2'; if (!isset($this->systemComponents[$component][$temp])) { return $tempContent; } $replaceData = []; foreach ($this->systemComponents[$component][$temp] as $keyword => $filePaths) { if (!empty($data['components'][$component])) { $replaceData[$keyword] = file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePaths); } else { $replaceData[$keyword] = ''; } } return $this->replaceTmp($tempContent, $replaceData); } private function createComponentFormField($temp, $components, $field, $comment) { $form_content = ''; if (in_array($field, $this->fieldIdentify['formExclusion'])) { return $form_content; } $field_type = ''; foreach ($components as $component => $fields) { if (empty($fields)) { continue; } if (!is_array($fields)) { $fields = [$fields]; } if (in_array($field, $fields)) { $field_type = $component; } } if (empty($field_type) && in_array($field, $this->fieldIdentify['radio'])) { $field_type = 'radio'; } if (empty($field_type) && in_array($field, $this->fieldIdentify['select'])) { $field_type = 'select'; } if (empty($field_type)) { $field_type = 'input'; } $field_replace = [ 'field' => $field, 'comment' => $comment, ]; $content = file_get_contents(SYSTEM_TEMP_BASE_PATH . $this->systemComponents['field'][$temp][$field_type]); return $this->replaceTmp($content, $field_replace); } private function saveFile($temp, $filePath, $fileContent) { $dir = dirname($filePath); if (!file_exists($dir)) { mkdir($dir, 0777, true); chmod($dir, 0777); } $ret = file_put_contents($filePath, $fileContent); if ($ret === FALSE) { return ajax_arr($temp . ' 创建失败', 500); } chmod($filePath, 0777); return ajax_arr($temp . ' 创建成功', 0); } //创建 model private function createModel($data) { $temp = $data['temp']; //文件路径 $filePath = $data['filePath'][$temp]; if (file_exists($filePath)) { return ajax_arr($temp . ' 已经存在', 500); } //替换的数据 $replaceData = [ 'module' => $data['module'], 'func' => $data['func'], 'date' => $data['date'], 'funcName' => $data['funcName'], 'tableName' => $data['tableName'], ]; //文件模板 $tempContent = file_get_contents(SYSTEM_TEMP_BASE_PATH . $this->systemTemps[$temp]); $fileContent = $this->replaceTmp($tempContent, $replaceData); //保存文件 return $this->saveFile($temp, $filePath, $fileContent); } //创建 service private function createService($data) { $data['components']['traits'] = 'instanceTrait'; $temp = $data['temp']; //文件模板 $tempContent = file_get_contents(SYSTEM_TEMP_BASE_PATH . $this->systemTemps[$temp]); //文件路径 $filePath = $data['filePath'][$temp]; if (file_exists($filePath)) { return ajax_arr($temp . '已经存在', 500); } //替换的数据 $replaceData = [ 'module' => $data['module'], 'func' => $data['func'], 'date' => $data['date'], 'funcName' => $data['funcName'], 'tableName' => $data['tableName'], ]; //字段默认值 $fieldDefault = []; foreach ($data['fieldInfo'] as $item) { $val = ($item->fieldDefault == 'CURRENT_TIMESTAMP') ? "date('Y-m-d H:i:s')" : "'{$item->fieldDefault}'"; $fieldDefault[] = "'{$item->fieldName}' => $val , "; } $replaceData['fieldDefault'] = implode("\r", $fieldDefault); //加载组件 foreach ($data['components'] as $component => $value) { $componentMethod = "createComponent" . ucfirst($component); $tempContent = $this->$componentMethod($temp, $tempContent, $value, $data); } $fileContent = $this->replaceTmp($tempContent, $replaceData); //保存文件 return $this->saveFile($temp, $filePath, $fileContent); } //创建 controller private function createController($data) { $temp = $data['temp']; //文件模板 $tempContent = file_get_contents(SYSTEM_TEMP_BASE_PATH . $this->systemTemps[$temp]); //文件路径 $filePath = $data['filePath'][$temp]; if (file_exists($filePath)) { return ajax_arr($temp . '已经存在', 500); } //替换的数据 $replaceData = [ 'module' => $data['module'], 'moduleLower' => strtolower($data['module']), 'func' => $data['func'], 'funcLower' => strtolower($data['func']), 'date' => $data['date'], 'funcName' => $data['funcName'], 'tableName' => $data['tableName'], 'funcNameLower' => strtolower($data['funcName']), ]; //加载组件 foreach ($data['components'] as $component => $value) { $componentMethod = "createComponent" . ucfirst($component); $tempContent = $this->$componentMethod($temp, $tempContent, $value, $data); } $fileContent = $this->replaceTmp($tempContent, $replaceData); //print_r( $fileContent ); //保存文件 return $this->saveFile($temp, $filePath, $fileContent); } //创建 view private function createView($data) { $temp = $data['temp']; //文件模板 $tempContent = file_get_contents(SYSTEM_TEMP_BASE_PATH . $this->systemTemps[$temp]); //文件路径 $filePath = $data['filePath'][$temp]; if (file_exists($filePath)) { return ajax_arr($temp . '已经存在', 500); } //替换的数据 $replaceData = [ 'module' => $data['module'], 'moduleLower' => strtolower($data['module']), 'func' => $data['func'], 'funcLower' => strtolower($data['func']), 'date' => $data['date'], 'funcName' => $data['funcName'], 'tableName' => $data['tableName'], ]; //加载组件 foreach ($data['components'] as $component => $value) { $componentMethod = "createComponent" . ucfirst($component); $tempContent = $this->$componentMethod($temp, $tempContent, $value, $data); } $fileContent = $this->replaceTmp($tempContent, $replaceData); $replaceField = [ 'tableTh' => '', 'formItems' => '', ]; foreach ($data['fieldInfo'] as $item) { $field = $item->fieldName; $comment = $item->fieldComment; //th 排除字段 if (!in_array($field, $this->fieldIdentify['thExclusion'])) { $formatter = ''; if (isset($this->fieldIdentify['thFormatter'][$field])) { $formatter = $this->fieldIdentify['thFormatter'][$field]; } $width = '80'; if (isset($this->fieldIdentify['thWidth'][$field])) { $width = $this->fieldIdentify['thWidth'][$field]; } $replaceField['tableTh'] .= '' . $comment . '' . "\r"; } if (!in_array($field, $this->fieldIdentify['formExclusion'])) { $replaceField['formItems'] .= $this->createComponentFormField($temp, $data['components'], $field, $comment) . "\r"; } } $fileContent = $this->replaceTmp($fileContent, $replaceField); //保存文件 return $this->saveFile($temp, $filePath, $fileContent); } //创建 js private function createJs($data) { $temp = $data['temp']; //文件模板 $tempContent = file_get_contents(SYSTEM_TEMP_BASE_PATH . $this->systemTemps[$temp]); //文件路径 $filePath = $data['filePath'][$temp]; if (file_exists($filePath)) { return ajax_arr($temp . '已经存在', 500); } //替换的数据 $replaceData = [ 'module' => $data['module'], 'moduleLower' => strtolower($data['module']), 'func' => $data['func'], 'date' => $data['date'], 'funcName' => $data['funcName'], 'tableName' => $data['tableName'], ]; //加载组件 foreach ($data['components'] as $component => $value) { $componentMethod = "createComponent" . ucfirst($component); $tempContent = $this->$componentMethod($temp, $tempContent, $value, $data); } $fileContent = $this->replaceTmp($tempContent, $replaceData); //保存文件 return $this->saveFile($temp, $filePath, $fileContent); } //创建Api public function createApi($data) { $data['directory'] = strtolower($data['directory']); $data['name'] = ucfirst(strtolower($data['name'])); $data['date'] = date('Y-m-d'); $filePath = $this->filePath['api'] . "{$data['apiVersion']}/{$data['directory']}"; $filename = $filePath . "/{$data['name']}Service.php"; if (file_exists($filename)) { return ajax_arr("$filename 已经存在", 505); } if (!file_exists($filePath)) { mkdir($filePath, 0777, true) or die('创建失败'); chmod($filePath, 0777); } //是否有参数 $params = ''; if (isset($data['params'])) { foreach ($data['params'] as $param) { $params .= file_get_contents(API_TEMP_BASE_PATH . "/params/{$param}.txt") . "\r"; } } $data['params'] = $params; //是否验证用户 if ($data['authUser'] == 1) { $data['authUser'] = file_get_contents($this->apiTemp['authUser']); } else { $data['authUser'] = ''; } $fileContent = file_get_contents($this->apiTemp['tmp']); $fileContent = $this->replaceTmp($fileContent, $data); $ret = file_put_contents($filename, $fileContent); if ($ret === FALSE) { return ajax_arr("创建Api[ $filename ]失败", 500); } else { chmod($filename, 0777); return ajax_arr("创建Api[ $filename ]成功", 0); } } public function deleteSystemFile($module, $tableName, $temp) { $replaceData = [ 'module' => $module, 'moduleLower' => strtolower($module), 'func' => $this->getFuncName($tableName), 'funcLower' => strtolower($this->getFuncName($tableName)), 'funcUcfirst' => ucfirst(strtolower($this->getFuncName($tableName))), 'tableName' => $tableName, ]; $filePath = $this->replaceTmp($this->filePath[$temp], $replaceData); if (file_exists($filePath)) { unlink($filePath); return ajax_arr("删除[$temp]文件成功", 0); } return ajax_arr("[$temp] 文件不存在", 500); } } ================================================ FILE: src/Service/MerAlbumCatalogService.php ================================================ * Date: 2017/9/26 * Time: 16:56 */ namespace Smart\Service; use Smart\Models\MerAlbumCatalog; use think\image\Exception; class MerAlbumCatalogService extends BaseService { //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; protected $model_class = MerAlbumCatalog::class; //状态 var $status = [ 0 => '禁用', 1 => '启用', ]; //取默认值 function getDefaultRow() { return [ 'id' => '', 'mer_id' => '', 'sort' => '999', 'text' => '', 'icon' => '', 'is_default' => 0, ]; } //根据条件查询 function getByCond( $param ) { $default = [ 'field' => ['*'], 'merId' => 0, 'keyword' => '', 'status' => '', 'page' => 1, 'pageSize' => 10, 'sort' => 'id', 'order' => 'DESC', 'count' => FALSE, 'getAll' => FALSE, ]; $param = extend( $default, $param ); $model = $this->getModel()->keyword($param['keyword'])->merId($param['merId']); if ( $param['count'] ) { return $model->count(); } else { $data = $model->getAll($param)->orderBy($param['sort'], $param['order'])->get( $param['field'])->toArray(); } return $data ? $data : []; } function getByTag( $mer_id, $tag, $icon = '', $create_when_not_found = FALSE ) { $where['tag'] = $tag; if ( empty( $mer_id ) ) { $where['mer_id'] = [ 'exp', 'is null' ]; } $data = $this->getModel()->where( $where )->first(); if ( empty( $data ) ) { if ( $create_when_not_found ) { $new_data = [ 'mer_id' => $mer_id, 'tag' => $tag, 'icon' => $icon ]; if ( empty( $mer_id ) ) { unset( $new_data['mer_id'] ); } $ret_create = $this->insert( $new_data ); if ( $ret_create['code'] == 0 ) { $new_data['id'] = $ret_create['data']['id']; return $new_data; } } return FALSE; } return $data; } //根据根据多个tag 取分类 function saveByTags( $mer_id, $tags, $album_id, $icon ) { if ( ! is_array( $tags ) ) { $tags = explode( ',', trim( $tags ) ); } $new_tag = []; foreach ( $tags as $tag ) { $tag_data = $this->getByTag( $mer_id, $tag, $icon, TRUE ); if ( ! $tag_data ) { return ajax_arr( '系统繁忙, 请稍后再试', 500 ); } $new_tag[] = [ 'album_id' => $album_id, 'catalog_id' => $tag_data['id'] ]; } if ( empty( $new_tag ) ) { return ajax_arr( '没有要添加的数据', 500 ); } $MerAlbumTag = db( 'MerAlbumTag' ); $ret = $MerAlbumTag->insertAll( $new_tag ); if ( $ret === FALSE ) { return ajax_arr( '系统繁忙, 请稍后再试', 500 ); } else { return ajax_arr( '保存成功', 0 ); } } function destroyOne( $id ) { $MerAlbum = MerAlbumService::instance(); $albumData = $MerAlbum->getByCond( [ 'catalogId' => $id ] ); try { if ( ! empty( $albumData ) ) { throw new Exception( '目录下还有图片, 不能删除' ); } $this->getModel()->delete( $id ); return ajax_arr( '删除成功', 0 ); } catch ( Exception $e ) { return ajax_arr( '删除失败', 500 ); } } } ================================================ FILE: src/Service/MerAlbumService.php ================================================ * @version 2.0 2017-09-26 */ use Facades\Smart\Service\ServiceManager; use Smart\Models\MerAlbum; use Smart\Models\MerAlbumCatalog; class MerAlbumService extends BaseService { //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; protected $model_class = MerAlbum::class; public $albumCatalog; public $albumTag; //状态 public $status = [ 0 => '禁用', 1 => '启用', ]; public function __construct() { $this->albumCatalog = ServiceManager::make( MerAlbumCatalogService::class ); $this->albumTag = ServiceManager::make( MerAlbumTagService::class ); } //取默认值 function getDefaultRow() { return [ 'id' => '' , 'mer_id' => '' , 'sort' => '999' , 'uri' => '' , 'size' => '' , 'mimes' => '' , 'img_size' => '' , 'desc' => '' , 'status' => '1' , 'created_at' => date('Y-m-d H:i:s') , ]; } /** * 根据条件查询 * * @param $param * * @return array|number */ public function getByCond( $param ) { $default = [ 'field' => [ '*'], 'keyword' => '', 'status' => '', 'page' => 1, 'pageSize' => 10, 'sort' => 'id', 'order' => 'DESC', 'count' => FALSE, 'getAll' => FALSE ]; $param = extend( $default, $param ); $model = $this->getModel()->keyword($param['keyword'])->status($param['status']); if ( $param['count'] ) { return $model->count(); } $data = $model->getAll($param)->orderBy($param['sort'], $param['order'])->get($param['field'])->toArray(); return $data ? $data : [ ]; } public function insert( $data, $tags = '' ){ $mer_id = isset( $data['mer_id'] ) ? $data['mer_id'] : ''; if ( empty( $mer_id ) ) { unset( $data['mer_id'] ); } $merAlbum = $this->getmodel()->create( $data ); $tags = empty( $tags ) ? '默认相册' : $tags; if ( ! is_array( $tags ) ) { $tags = explode( ',', trim( $tags ) ); } $data_tag = []; foreach( $tags as $tag){ array_push( $data_tag , new MerAlbumCatalog([ 'tag' => $tag , 'mer_id' => 0, 'sort' => 1, 'icon' => '', 'totals' => 1, ])); } $ret_save = $merAlbum->tag()->saveMany($data_tag); //saveByTags( $mer_id, $tags, $id, $data['uri'] ); if ( !$ret_save ) { throw new \Exception( $ret_save['msg'] ); } return ajax_arr( '添加成功', 0, [ 'id' => $merAlbum->id ] ); } } ================================================ FILE: src/Service/MerAlbumTagService.php ================================================ * @version 2.0 2017-09-26 */ use Smart\Models\MerAlbumTag; class MerAlbumTagService extends BaseService { //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; protected $model_class = MerAlbumTag::class; //状态 public $status = [ 0 => '禁用', 1 => '启用', ]; //取默认值 function getDefaultRow() { return [ 'id' => '' , 'catalog_id' => '' , 'album_id' => '' , ]; } /** * 根据条件查询 * * @param $param * * @return array|number */ public function getByCond( $param ) { $default = [ 'field' => [ '*'], 'keyword' => '', 'status' => '', 'page' => 1, 'pageSize' => 10, 'sort' => 'id', 'order' => 'DESC', 'count' => FALSE, 'getAll' => FALSE ]; $param = extend( $default, $param ); $model = $this->getModel()->keyword($param['keyword'])->status($param['status']); if ( $param['count'] ) { return $model->count(); } $data = $model->getAll($param)->orderBy($param['sort'], $param['order'])->get($param['field'])->toArray(); return $data ? $data : [ ]; } } ================================================ FILE: src/Service/MerGoodsCatalogService.php ================================================ * Date: 2017/9/21 * Time: 09:35 */ namespace Smart\Service; use Smart\Models\MerGoodsCatalog; class MerGoodsCatalogService extends BaseService { //引入 TreeTable trait use \Smart\Traits\Service\TreeTable,\Smart\Traits\Service\Instance; protected $model_class = MerGoodsCatalog::class; public $type = [ 'goods' => '商品' , 'virtual' => '虚拟道具' , 'service' => '服务' ]; //状态 public $status = [ 0 => '禁用' , 1 => '启用' , ]; //取默认值 function getDefaultRow() { return [ 'id' => '' , 'mer_id' => '' , 'sort' => '99' , 'type' => 'goods' , 'pid' => '0' , 'text' => '' , 'icon' => '' , 'desc' => '' , 'level' => '1' , 'status' => '1' , ]; } //根据条件查询 public function getByCond( $param ) { $default = [ 'field' => [ '*'] , 'keyword' => '', 'pid' => 0 , 'merId' => '' , 'status' => '' , 'withTypeText' => FALSE , 'key' => 'children' ]; $param = extend( $default , $param ); $model = $this->getModel()->merId($param['merId'])->status($param['status'])->keyword($param['keyword']); $data = $model ->orderBy( 'level','ASC' ) ->orderBy( 'sort','ASC') ->get($param['field'])->toArray(); if ( $param['withTypeText'] ) { foreach ( $data as &$item ) { $item['type_text'] = $this->type[ $item['type'] ]; } } $result = []; $index = []; foreach ( $data as $row ) { if ( $row['pid'] == $param['pid'] ) { $result[ $row['id'] ] = $row; $index[ $row['id'] ] = &$result[ $row['id'] ]; } else { $index[ $row['pid'] ][ $param['key'] ][ $row['id'] ] = $row; $index[ $row['id'] ] = &$index[ $row['pid'] ][ $param['key'] ][ $row['id'] ]; } } return $this->treeToArray( $result , $param['key'] ); } } ================================================ FILE: src/Service/MerSysUserService.php ================================================ * Date: 2017/9/21 * Time: 11:22 */ namespace Smart\Service; use Smart\Models\MerSysUser; class MerSysUserService extends BaseService { //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; protected $model_class = MerSysUser::class; //状态 public $status = [ 0 => '禁用' , 1 => '启用' , ]; //取默认值 function getDefaultRow() { return [ 'id' => '' , 'mer_id' => '' , 'sys_user_id' => '' , ]; } /** * 根据条件查询 * * @param $param * * @return array|number */ public function getByCond( $param ) { $default = [ 'field' => [] , 'keyword' => '' , 'status' => '' , 'page' => 1 , 'pageSize' => 10 , 'sort' => 'id' , 'order' => 'DESC' , 'count' => FALSE , 'getAll' => FALSE ]; $param = extend( $default , $param ); $model = $this->getModel()->keyword($param['keyword'])->status(); if ( $param['count'] ) { return $model->count(); } $data = $model->getAll($param)->get($param['field'])->orderBy($param['sort'] , $param['order'])->get($param['field'])->toArray(); return $data ? $data : []; } /** * 新增机构管理员 * * @param $merId * @param $data * * @return array */ function insert( $merId , $data ) { try { $SysUser = SysUserService::instance(); $result = $SysUser->insert( $data ); if ( $result['code'] != 0 ) { throw new \Exception( $result['msg'] ); } $newData = [ 'mer_id' => $merId , 'sys_user_id' => $result['data']['id'] ]; $this->getModel()->insert( $newData ); return ajax_arr( '创建系统管理用户成功' , 0 ); } catch ( \Exception $e ) { return ajax_arr( $e->getMessage() , 500 ); } } /** * 根据ID 更新数据 * * @param $id * @param $data * * @return array */ public function update( $id , $data ) { try { $SysUser = SysUserService::instance(); $result = $SysUser->update( $id , $data ); if ( $result['code'] != 0 ) { throw new \Exception( $result['msg'] ); } return $result; } catch ( \Exception $e ) { return ajax_arr( $e->getMessage() , 500 ); } } /** * 删除机构管理用户 * * @param $merId * @param $sys_user_id * * @return array */ public function destroy( $merId , $sys_user_id ) { try { $this->getModel() ->where( 'mer_id' , $merId ) ->where( 'sys_user_id' , $sys_user_id ) ->delete(); $SysUser = SysUserService::instance(); $result = $SysUser->destroy( $sys_user_id ); if ( $result['code'] != 0 ) { throw new \Exception( $result['msg'] ); } return $result; } catch ( \Exception $e ) { return ajax_arr( $e->getMessage() , 500 ); } } } ================================================ FILE: src/Service/MerUserService.php ================================================ * Date: 2017/9/16 * Time: 13:34 */ namespace Smart\Service; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Traits\Macroable; use Smart\Models\SysUser; use Smart\Models\SysUserRole; use Smart\Models\SysUserDevice; class MerUserService extends BaseService { //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; use Macroable; protected $model_class = SysUser::class; //状态 public $status = [ 0 => '禁用', 1 => '启用', ]; public $user = null; /** * 取默认值 * * @return array */ function getDefaultRow() { return [ 'id' => '', 'module' => 'backend', 'username' => '', 'password' => '', 'icon' => '', 'email' => '', 'phone' => '', 'status' => '1', 'token' => '', 'created_at' => date('Y-m-d H:i:s'), ]; } /** * 根据条件查询 * * @param $params * * @return array|number */ public function getByCond($params) { $default = [ 'field' => ['*'], 'module' => '', 'keyword' => '', 'status' => '', 'merId' => '', 'page' => 1, 'pageSize' => 10, 'sort' => 'id', 'order' => 'DESC', 'getAll' => FALSE, 'count' => FALSE, 'withPwd' => FALSE, 'withRoles' => FALSE, 'withTest' => FALSE, 'merchant' => FALSE, ]; $params = extend($default, $params); if ($params['merchant']) { return $this->getMerSysUserByCond($params); } $model = self::instance()->getModel(); if ($params['withTest']) { $model = $model->with('UserDevice'); } $model = $model->status($params['status'])->module($params['module'])->keyword($params['keyword']); if ($params['count']) { return $model->count(); } else { $data = $model ->orderBy($params['sort'], $params['order'])->get()->toArray(); } if (!$params['withPwd']) { foreach ($data as &$item) { unset($item['password']); } } if ($params['withRoles']) { $data = $this->getRoles($data); } return $data ? $data : []; } /** * todo 需要优化 * * @param $data * * @return mixed */ private function getRoles($data) { $SysUserRole = SysUserRoleService::instance(); foreach ($data as &$item) { $item['roles'] = $SysUserRole->getByUser($item['id']); } return $data; } /** * 获取 MP 平台用户 * * @param $params * * @return array */ private function getMerSysUserByCond($params) { $sysMerchant = SysMerchantService::instance(); $model = $sysMerchant->getModel()->find($params['merId'])->sysUsers()->status($params['status']); if ($params['count']) { return $model->count(); } else { // $model->field( 'u.*' ); $data = $model->getAll($params)->orderBy($params['sort'], $params['order'])->get()->toArray(); } if (!$params['withPwd']) { foreach ($data as &$item) { unset($item['password']); } } if ($params['withRoles']) { $data = $this->getRoles($data); } return $data ? $data : []; } /** * 更新密码 * * @param $id * @param $data * * @return array */ function uploadPwd($id, $data) { try { self::instance()->getModel()->where('id', $id)->update($data); return ajax_arr('更新成功', 0); } catch (\Exception $e) { return ajax_arr($e->getMessage(), 500); } } /** * 添加数据 * * @param $data * * @return array */ public function insert($data) { DB::beginTransaction(); try { if (empty($data)) { throw new \Exception('数据不能为空'); } if (isset($data['for_test'])) { $for_test = $data['for_test']; unset($data['for_test']); } $roles = isset($data['roles']) ? $data['roles'] : []; unset($data['roles']); $data['password'] = str2pwd(config('defaultPwd')); $id = self::instance()->getModel()->insertGetId($data); SysUserDevice::firstOrCreate(['user_id'=>$id]); if ($id <= 0) { throw new \Exception('创建用户失败'); } if($for_test){ $token = md5(http_build_query($data) . json_encode(['created_at' => time()])); self::instance()->getModel()->api_token = $token; self::instance()->getModel()->save(); } //更新用户角色 if (!empty($roles)) { $SysUserRole = SysUserRoleService::instance(); $RoleResult = $SysUserRole->updateByUser($id, $roles); if ($RoleResult['code'] > 0) { throw new \Exception($RoleResult['msg']); } } DB::commit(); return ajax_arr('创建用户成功', 0, ['id' => $id]); } catch (\Exception $e) { DB::rollback(); return ajax_arr($e->getMessage(), 500); } } //更新 function update($id, $data) { DB::beginTransaction(); try { $roles = []; if (isset($data['roles'])) { $roles = $data['roles']; unset($data['roles']); } if (isset($data['for_test'])) { $for_test = $data['for_test']; unset($data['for_test']); } $ret = self::instance()->getModel()->where('id', $id)->update($data); $sysUserDevice = SysUserDevice::firstOrCreate(['user_id'=>$id]); $sysUserDevice->for_test = $for_test; $sysUserDevice->save(); //更新用户角色 $SysUserRole = SysUserRoleService::instance(); $RoleResult = $SysUserRole->updateByUser($id, $roles); if ($RoleResult['code'] > 0) { throw new \Exception($RoleResult['msg']); } if($for_test){ $token = md5(http_build_query($data) . json_encode(['created_at' => time()])); $sysUser = SysUser::find($id); $sysUser->api_token = $token; $sysUser->save(); } DB::commit(); return ajax_arr('更新成功', 0); } catch (\Exception $e) { DB::rollback(); return ajax_arr($e->getMessage(), 500); } } /** * 删除系统用户 * * @param $id * * @return array */ public function destroy($id) { $model = self::instance()->getModel(); try { if ($id <= 2) { throw new \Exception('系统用户不能删除'); } $model_user_role = new SysUserRole(); //删除用户角色 $model_user_role->destroy($id); //删除用户 $model->destroy($id); return ajax_arr('删除成功', 0); } catch (\Exception $e) { return ajax_arr($e->getMessage(), 500); } } /** * 重置密码 * * @param $id * @param $pwd * * @return array */ public function resetPwd($id, $pwd) { try { // $data['password'] = str2pwd( $pwd ); $data['password'] = Hash::make($pwd); $row = self::instance()->getModel()->where('id', $id)->update($data); if ($row <= 0) { return ajax_arr('未修改任何记录', 500); } return ajax_arr('重置密码成功', 0); } catch (\Exception $e) { return ajax_arr($e->getMessage(), 500); } } public function setUser($id) { self::instance()->user = self::instance()->getModel()->find($id); } /** * 查询测试用户 * * @return mixed */ public function getForTest() { $data = DB::table('sys_user as su')->leftJoin('sys_user_device as sud', 'su.id', '=', 'sud.user_id')->where('sud.for_test', 1)->get()->toArray(); return $data; } } ================================================ FILE: src/Service/ServiceManager.php ================================================ * Date: 2017/11/4 * Time: 14:51 */ namespace Smart\Service; class ServiceManager { public function __construct() { } /** * 注册Service * @param $classPath * */ public function register($classPath) { } /** * 实例化service * */ public function make($serviceName) { return $serviceName::instance(); } /** * 销毁service实例 * @param $serviceName */ public function destroy($serviceName) { } } ================================================ FILE: src/Service/SimulatorService.php ================================================ * Date: 2017/9/18 * Time: 17:06 */ namespace Smart\Service; use Smart\Lib\Discover; /** * 接口模拟器 Service * * @author Zix * @version 2.0 2016-09-13 */ use Illuminate\Filesystem\Filesystem; use ReflectionClass; class SimulatorService extends BaseService { use \Smart\Traits\Service\Instance; private $apiVer = [ 'v1' => 'v1', 'v2' => 'v2', ]; function readApi( $apiVersion ) { $discover = new Discover; $services = $discover->service($apiVersion); return $services; } public function readVersion(){ return $this->apiVer; } } ================================================ FILE: src/Service/SysApiLogService.php ================================================ * @version 2.0 2017-09-25 */ use Smart\Models\SysApiLog; class SysApiLogService extends BaseService { //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; protected $model_class = SysApiLog::class; //状态 public $status = [ 0 => '禁用', 1 => '启用', ]; //取默认值 function getDefaultRow() { return [ 'id' => '' , 'device' => '' , 'device_os_version' => '' , 'app_version' => '' , 'api_version' => '' , 'uri' => '' , 'ip' => '' , 'created_at' => date('Y-m-d H:i:s') , ]; } /** * 根据条件查询 * * @param $param * * @return array|number */ public function getByCond( $param ) { $default = [ 'field' => [ '*'], 'keyword' => '', 'status' => '', 'page' => 1, 'pageSize' => 10, 'sort' => 'id', 'order' => 'DESC', 'count' => FALSE, 'getAll' => FALSE ]; $param = extend( $default, $param ); $model = $this->getModel()->keyword($param['keyword'])->status($param['status']); if ( $param['count'] ) { return $model->count(); } $data = $model->getAll($param)->orderBy($param['sort'], $param['order'])->get($param['field'])->toArray(); return $data ? $data : [ ]; } } ================================================ FILE: src/Service/SysAppVersionService.php ================================================ * Date: 2017/9/22 * Time: 16:59 */ namespace Smart\Service; use Smart\Models\SysAppVersion; class SysAppVersionService extends BaseService { //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; protected $model_class = SysAppVersion::class; public $device = [ 'ios' => 'iOS' , 'android' => '安卓' ]; //状态 public $status = [ 0 => '禁用' , 1 => '启用' , ]; //取默认值 function getDefaultRow() { return [ 'id' => '' , 'device' => 'android' , 'version' => '' , 'uri' => '' , 'description' => '' , 'is_force_update' => '0' , 'environment' => 'production' , 'status' => '1' , 'created_at' => date( 'Y-m-d H:i:s' ) , ]; } /** * 根据条件查询 * * @param $param * * @return array|number */ public function getByCond( $param ) { $default = [ 'field' => [ '*'] , 'keyword' => '' , 'status' => '' , 'page' => 1 , 'pageSize' => 10 , 'sort' => 'id' , 'order' => 'DESC' , 'count' => FALSE , 'getAll' => FALSE ]; $param = extend( $default , $param ); $model = $this->getModel()->keyword($param['keyword'])->status($param['status']); if ( $param['count'] ) { return $model->count(); } $data = $model->getAll($param)->orderBy($param['sort'] , $param['order'] )->get($param['field'])->toArray(); return $data ? $data : []; } } ================================================ FILE: src/Service/SysAreaService.php ================================================ * Date: 2017/9/18 * Time: 15:34 */ namespace Smart\Service; use Smart\Models\SysArea; class SysAreaService extends BaseService { //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; protected $model_class = SysArea::class; //状态 public $status = [ 0 => '禁用', 1 => '启用', ]; //取默认值 function getDefaultRow() { return [ 'id' => '', 'pid' => '', 'text' => '', 'tip' => '', 'status' => '0', 'level' => '0', ]; } /** * 根据条件查询 * * @param $param * * @return array|number */ function getByCond( $param ) { $default = [ 'field' => [], 'keyword' => '', 'pid' => '', 'status' => '', 'page' => 1, 'pageSize' => 10, 'sort' => 'id', 'order' => 'ASC', 'count' => FALSE, 'getAll' => FALSE ]; $param = extend( $default, $param ); $model = $this->getModel()->keyword( $param['keyword'])->status($param['status'])->pid($param['pid'])->getAll($param); if ( $param['count'] ) { return $model->count(); } $data = $model->orderBy( $param['sort'] , $param['order'])->get()->toArray(); return $data ? $data : []; } } ================================================ FILE: src/Service/SysFuncPrivilegeService.php ================================================ '查看' , 'create' => '创建' , 'update' => '更新' , 'delete' => '删除' ]; //默认操作 public $default = [ [ 'sort' => '10' , 'name' => 'read' ] , [ 'sort' => '20' , 'name' => 'create' ] , [ 'sort' => '30' , 'name' => 'update' ] , [ 'sort' => '40' , 'name' => 'delete' ] , ]; //操作别名 public $alias = [ 'read' => [ 'index' , 'read' , 'get' , 'search' , 'load' , 'download' , 'export' , 'preview' ] , 'create' => [ 'insert' , 'create' , 'add' , 'upload' , 'post' , 'import' , 'copy' ] , 'update' => [ 'update' , 'set' , 'reset' , 'save' , 'send' , 'change' , 'send' ] , 'delete' => [ 'destroy' , 'delete' , 'remove' ] , ]; public function getDefaultRow(){ } public function getByCond($param){ $default = [ 'field' => [ '*' ], 'module'=> 'backend', 'isMenu'=> '', 'pid' => 0 , 'status'=> '', 'withPrivilege' => FALSE , 'key' => self::DEFAULT_KEY , ]; $param = extend( $default , $param); $data = $this->getModel() ->where(function ($query) use ($param) { if( $param['status'] !== '') { $query->where('status',$param['status']); } }) ->where(function ($query) use ($param) { if( $param['module'] !== ''){ $query->where('module',$param['module']); } }) ->where(function ($query) use ($param) { if($param['isMenu'] !== ''){ $query->where('is_menu',$param['isMenu']); } }) ->orderBy( 'level', 'ASC') ->orderBy( 'sort', 'ASC') ->get() ->toArray(); if( $param['withPrivilege']){ $data = $this->withPrivilege($data); } $result = []; $index = []; foreach( $data as $row){ if( $row['pid'] == $param['pid']){ $result[ $row['id']] = $row; $index[ $row['id']] = & $result[ $row['id']]; }else{ $index[ $row['pid']][ $param['key'] ][ $row['id'] ] = $row; $index[ $row['id'] ] = &$index[ $row['pid'] ][ $param['key'] ][ $row['id'] ]; } } $tree_data = $this->treeToArray( $result , $param['key'] ); return $tree_data; } /** * 更新 * * @param $funcId * @param $data * * @return array */ public function updateByFunc( $funcId , $data = [] ) { $oldData = $this->getByFunc( $funcId ); $p = []; foreach ( $oldData as $item ) { $p[] = $item['name']; } $data['name'] = isset($data['name']) ? $data['name'] : []; $needAdd = array_diff( $data['name'] , $p ); $needDelete = array_diff( $p , $data['name'] ); DB::beginTransaction(); try { //如果有要添加的 if ( ! empty( $needAdd ) ) { $addData = []; foreach ( $needAdd as $name ) { $addData[] = [ 'func_id' => $funcId , 'name' => $name ]; } DB::table('sys_func_privilege')->insert($addData); } //如果有要删除的 if ( ! empty( $needDelete ) ) { DB::table('sys_func_privilege') ->where( 'func_id' , $funcId ) ->whereIn( 'name' , $needDelete ) ->delete(); } DB::commit(); return ajax_arr( '成功' , 0 ); } catch ( \Exception $e ) { DB::rollback(); return ajax_arr( $e->getMessage() , 500 ); } } /** * 根据功能取权限 * * @param $funcId * * @return array */ public function getByFunc( $funcId ) { $data = $this->getModel()->where( 'func_id' , $funcId )->get()->toArray(); return $data ? $data : []; } public function getByFuncs( $funcIds){ $data = $this->getModel()->whereIn('func_id' , $funcIds)->get()->toArray(); $newData = []; foreach ( $data as $item ) { $newData[ $item['func_id'] ][] = $item; } return $newData; } } ================================================ FILE: src/Service/SysFuncService.php ================================================ '否', 1 => '是', ]; public $isMenu = [ 0 => '否', 1 => '是', ]; //状态 public $status = [ 0 => '禁用', 1 => '启用', ]; public $privilege = null; //默认行 public function getDefaultRow() { return [ 'sort' => '99', 'module' => 'backend', 'isMenu' => '1', 'isFunc' => '0', 'color' => 'default', 'name' => '', 'icon' => '', 'uri' => '', 'desc' => '', 'level' => '1', 'status' => '1', ]; } /** * 根据角色取菜单 取名错误,等废弃 * * @param $roleIds * @param $module * * @return array */ public function getMenuByRoles($roleIds, $module) { $roleIds = explode(',', $roleIds); if ($roleIds == config('backend.superAdminId') || in_array(config('backend.superAdminId'), $roleIds)) { $result = $this->getByCond(['isMenu' => 1, 'status' => 1, 'module' => $module]); //如果是系统管理员 return $result; } else { //如果是普通用户 return $this->_getMenuByRoles($roleIds, $module); } } public function getMenuByRole($roleIds, $module){ return $this->_getMenuByRoles($roleIds, $module); } public function getByUri($uri) { return $this->getModel()->where('uri', $uri)->first(); } public function getByCond($param) { $default = [ 'field' => ['*'], // 'module' => 'backend', 'isMenu' => '', 'pid' => 0, 'status' => '', 'page' => 1 , 'pageSize' => 10 , 'withPrivilege' => FALSE, 'key' => self::DEFAULT_KEY, 'getAll' => FALSE, ]; $func = function (&$arr) use (&$func){ foreach($arr as &$val){ if(isset($val['children'])){ if( empty($val['children'])){ unset($val['children']); }else{ $func($val['children']); } } } return $arr; }; $param = extend( $default , $param ); $model = $this->getModel()->where('pid',0); if($param['module']){ $model = $model->whereIn('module',(array)$param['module']); } // echo $model->find(1)->level; if ( isset($param['count']) && $param['count'] ) { return $model->count(); } if($param['getAll'] === FALSE){ $model = $model->with('children.privilege','privilege')->get()->forPage($param['page'] , $param['pageSize'])->values(); }else{ $model = $model->with('children.privilege','privilege')->get()->values(); } $data = $model->toArray(); $data = $func($data); return $data ? $data : []; } /** * 查找除非超级管理员的菜单 * * @param $roleIds * @param $module * * @return array */ private function _getMenuByRoles($roleIds, $module) { $key = self::DEFAULT_KEY; $data = DB::table('sys_func AS f') ->where('f.is_menu', 1) ->where('f.status', 1) ->where('f.module', "$module") ->whereIn('rp.role_id', $roleIds) ->where('fp.name', "read") ->leftJoin('sys_func_privilege AS fp', 'fp.func_id', '=', 'f.id') ->leftJoin('sys_role_permission AS rp', 'rp.privilege_id', '=', 'fp.id') ->orderBy('f.level', 'ASC')->orderBy('f.sort', 'ASC')->get(['f.id', 'f.sort', 'f.pid', 'f.name', 'f.icon', 'f.uri', 'f.level'])->toArray(); $result = []; $index = []; $func_ids = []; foreach ($data as $row) { if (in_array($row->id, $func_ids)) { continue; } if ($row->pid == 0) { $result[$row->id] = get_object_vars($row); $index[$row->id] = &$result[$row->id]; } else { $index[$row->pid][$key][$row->id] = get_object_vars($row); $index[$row->id] = &$index[$row->pid][$key][$row->id]; } $func_ids[] = $row->id; } return $this->treeToArray($result, self::DEFAULT_KEY); } public function withPrivilege($data) { $allId = []; foreach ($data as $item) { $allId[] = $item['id']; } $SysFuncPrivilege = SysFuncPrivilegeService::instance(); $allPrivileges = $SysFuncPrivilege->getByFuncs($allId); foreach ($data as &$item) { if (isset($allPrivileges[$item['id']])) { $item['privilege'] = $allPrivileges[$item['id']]; } else { $item['privilege'] = []; } } return $data; } public function getPrivilege($uri) { $func = SysFunc::where('uri', $uri)->first(); if (empty($func)) { return false; } $this->privilege = $func; return true; } public function accept(SysUserService $sysUserService) { $klass = get_called_class(); preg_match('#([^\\\\]+)$#', $klass, $extract); $method = 'visit' . $extract[1]; SysUserService::macro($method, function (SysFuncService $sysFuncService) { if ($this->user->id == config('backend.superAdminId')) { return true; } $roles = $this->user->sysRole; foreach ($roles as $k => $role) { foreach ($role->rolePermission as $key => $privilege) { if ($privilege->uri == $sysFuncService->privilege->uri) { return true; } } } return false; }); return $sysUserService->$method($this); } } ================================================ FILE: src/Service/SysMailService.php ================================================ * Date: 2017/9/25 * Time: 14:11 */ namespace Smart\Service; use Illuminate\Support\Facades\Mail; use Smart\Models\SysMail; use App\Mail\Captcha; class SysMailService extends BaseService { //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; protected $model_class = SysMail::class; private $timeCap = 600; public $type = [ 'captcha' => '验证码' , ]; public $type2mail = [ 'captcha' => 'member' , ]; //状态 public $status = [ 0 => '未发送' , 1 => '已发送' , ]; public $error = ''; public function setError( $error ) { $this->error = $error; } public function getError() { return $this->error; } //取默认值 function getDefaultRow() { return [ 'id' => '' , 'type' => 'captcha' , 'name' => '' , 'address' => '' , 'subject' => '' , 'content' => '' , 'captcha' => '' , 'status' => '0' , 'created_at' => date( 'Y-m-d H:i:s' ) , 'sent_at' => '' , ]; } /** * 根据条件查询 * * @param $param * * @return array|number */ public function getByCond( $param ) { $default = [ 'field' => [ '*'] , 'keyword' => '' , 'status' => '' , 'page' => 1 , 'pageSize' => 10 , 'sort' => 'id' , 'order' => 'DESC' , 'count' => FALSE , 'getAll' => FALSE ]; $param = extend( $default , $param ); $model = $this->getModel()->keyword($param['keyword'])->status($param['status']); if ( $param['count'] ) { return $model->count(); } $data = $model->getAll($param)->orderBy( $param['sort'] , $param['order'])->get($param['field'])->toArray(); return $data ? $data : []; } public function sendById( $id ) { $data = $this->getById( $id ); if ( ! $data || empty( $data ) ) { return ajax_arr( '邮件未找到' , 0 ); } switch ( $data['type'] ) { case 'captcha' : return $this->sendCaptcha( '' , $data ); case 'notification': case 'ad': return ajax_arr( '暂未开通' , 500 ); default: return ajax_arr( '位置类型' , 500 ); } } /** * 创建新邮件对象 * * @param string $type * * @return PHPMailer */ /*private function makeMail( $type = 'captcha' ) { //$mail->SMTPDebug = 3; // Enable verbose debug output $from = $this->type2mail[ $type ]; $mailConfig = config( 'mail' ); $memberConfig = $mailConfig[ $from ]; /*$mail->isSMTP(); // Set mailer to use SMTP $mail->Host = $mailConfig['smtp']; // Specify main and backup SMTP servers $mail->SMTPAuth = TRUE; // Enable SMTP authentication $mail->Username = $memberConfig['username']; // SMTP username $mail->Password = $memberConfig['password']; // SMTP password $mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted $mail->Port = $mailConfig['port']; // TCP port to connect to $mail->CharSet = 'utf-8'; $mail->setFrom( $memberConfig['username'] , $memberConfig['desc'] ); $mail->isHTML( TRUE ); // Set email format to HTML return $mail; }*/ /** * 发送验证码 * * @param $address * @param $data * * @return array */ public function sendCaptcha( $address = '' , $data = [] ) { if ( empty( $data ) ) { if ( ! filter_var( $address , FILTER_VALIDATE_EMAIL ) ) { return ajax_arr( '请填写正确的email' . $address , 500 ); } $data = [ 'address' => $address , 'subject' => '来自' . config( 'backend.projectName' ) . '的验证码' , 'captcha' => $this->getCaptcha() , ]; //保存邮件到数据库 $result = $this->insert( $data ); if ( $result['code'] != 0 ) { return $result; } $id = $result['data']['id']; } else { $address = $data['address']; $id = $data['id']; } /* $mail = $this->makeMail( 'captcha' ); $mail->addAddress( $address ); // Add a recipient $mail->Subject = $data['subject'];*/ $captcha = new Captcha($data['subject']); $captcha->captcha = $data['captcha'] ; Mail::send($captcha); //保存验证码到 数据库 /*if ( ! $mail->send() ) { $this->setError( $mail->ErrorInfo ); return ajax_arr( '发送失败'.$data['captcha'] , 500 ); }*/ //修改状态 $this->setMailSent( $id ); return ajax_arr( '发送成功' , 0 ); } /** * 设置邮件已发送 * * @param $id * * @return array */ private function setMailSent( $id ) { return $this->update( $id , [ 'status' => 1 , 'sent_at' => date( 'Y-m-d H:i:s' ) ] ); } /** * 生成验证码 * * @param int $len * * @return int */ private function getCaptcha( $len = 4 ) { if ( $len == 6 ) { return mt_rand( 100000 , 999999 ); } return mt_rand( 1000 , 9999 ); } public function validCaptcha( $address , $captcha ) { $this->error = ''; $data = $this->getModel() ->where( 'address' , $address ) ->where( 'captcha' , $captcha ) ->order( 'id DESC' ) ->limit( 1 ) ->find(); // echo $this->model->getLastSql(); //验证数据是否找到 if ( ! $data ) { $this->setError( '验证码未找到' ); return FALSE; } //验证是否超时 /*if ( time() - strtotime( $data['sent_at'] ) > $this->timeCap ) { $this->setError( '验证码超时' ); return FALSE; } */ return TRUE; } // public function sendResetPwd( $address ) { // $data = [ // 'address' => $address , // 'subject' => '重置 ' . config( 'custom.projectName' ) . '的用户密码' , // 'content' => $this->getCaptcha() , // ]; // // //保存邮件到数据库 // $result = $this->insert( $data ); // if ( $result['code'] != 0 ) { // return $result; // } // // $mail = $this->newMail( 'captcha' ); // $mail->addAddress( $address ); // Add a recipient // $mail->Subject = $data['subject']; // $mail->Body = '

        您请访问

        '; // $mail->Body = "验证码为 " . $data['captcha'] . " 请于10分钟内验证"; // // //保存验证码到 数据库 // if ( ! $mail->send() ) { // $this->setError( $mail->ErrorInfo ); // // return ajax_arr( '发送失败' , 500 ); // } // //修改状态 // $this->setMailSent( $result['data']['id'] ); // // return ajax_arr( '发送成功' , 500 ); // } } ================================================ FILE: src/Service/SysMerchantService.php ================================================ * Date: 2017/9/18 * Time: 17:43 */ namespace Smart\Service; use Smart\Models\SysMerchant; class SysMerchantService extends BaseService { //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; protected $model_class = SysMerchant::class; public $forTest = [ 0 => '否' , 1 => '是' ]; //状态 public $status = [ 0 => '禁用', 1 => '启用', ]; //取默认值 function getDefaultRow() { return [ 'id' => '', 'sort' => '999', 'name' => '', 'icon' => '', 'phone' => '', 'contact' => '', 'email' => '', 'id_card' => '', 'status' => '0', 'area' => '', 'address' => '', 'settled_amount' => '0.00', 'balance' => '0.00', 'withdraw_amount' => '0.00', 'create_time' => date( 'Y-m-d H:i:s' ), 'apply_user_id' => '', 'for_test' => '0', ]; } /** * 根据条件查询 * * @param $param * * @return array|number */ function getByCond( $param ) { $default = [ 'field' => [], 'keyword' => '', 'status' => '', 'page' => 1, 'pageSize' => 10, 'sort' => 'id', 'order' => 'DESC', 'count' => FALSE, 'getAll' => FALSE, 'withSysUser' => FALSE ]; $param = extend( $default, $param ); $model = $this->getModel()->keyword($param['keyword'])->status(); if ( $param['count'] ) { return $model->count(); } $param['field'] = ['*' ]; $data = $model->getAll($param)->orderBy( $param['sort'] , $param['order'])->get($param['field'])->toArray(); if ( $param['withSysUser'] ) { $data = $this->withSysUser( $data ); } return $data ? $data : []; } /** * 查询 商户的管理用户 * @param $data * * @return mixed */ private function withSysUser( $data ) { if ( empty( $data ) ) { return $data ; } $merIds = []; foreach ( $data as $item ) { $merIds[] = $item['id']; } $SysMerchant = SysMerchantService::instance(); $sysMerchantData = $SysMerchant->getModel()->whereIn('id' ,$merIds); $newUserData = []; foreach($sysMerchantData as $sm){ $tmp_user = $sm->sysUsers()->toArray(); foreach($tmp_user as $u){ $newUserData[$sm->mer_id][] = $u; } } /* foreach ( $userData as $item ) { $newUserData[$item['mer_id']][] = $item ; }*/ foreach ( $data as &$row ) { if( isset( $newUserData[$row['id']] ) ) { $row['sys_user'] = $newUserData[$row['id']] ; } else { $row['sys_user'] = ''; } } return $data ; } /** * 查询测试商户 * @return mixed */ public function getForTest() { return $this->getModel()->where( 'for_test', 1 )->select(); } /** * 根据管理员查询 商户 * * @param $userId * * @return array */ public function getBySysUser( $userId ) { $data = DB::table( 'MerSysUser as su' ) ->where( 'su.sys_user_id', $userId ) ->leftJoin( 'sys_merchant as m', 'm.id = su.mer_id' ) ->first(); return $data ? $data : []; } } ================================================ FILE: src/Service/SysModulesService.php ================================================ * @version 2.0 2018-06-13 */ use Smart\Models\SysModule; use Smart\Service\BaseService; class SysModuleService extends BaseService { //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; protected $model_class = SysModule::class; //状态 public $status = [ 0 => '禁用', 1 => '启用', ]; //取默认值 function getDefaultRow() { return [ 'created_at' => '', 'desc' => '', 'displayorder' => '', 'id' => '', 'name' => '', 'status' => '', 'symbol' => '', 'thumb' => '', 'updated_at' => '', 'version' => '1.0', '作者' => '', ]; } /** * 根据条件查询 * * @param $param * * @return array|number */ public function getByCond($param) { $default = [ 'field' => ['*'], 'keyword' => '', 'status' => '', 'page' => 1, 'pageSize' => 10, 'sort' => 'id', 'order' => 'DESC', 'count' => FALSE, 'getAll' => FALSE, ]; $param = extend($default, $param); $model = $this->getModel()->keyword($param['keyword'])->status($param['status']); if ($param['count']) { return $model->count(); } $data = $model->getAll($param)->orderBy($param['sort'], $param['order'])->get($param['field'])->toArray(); return $data ? $data : []; } public function getById($id) { return $this->getModel()->find($id); } } ================================================ FILE: src/Service/SysPushService.php ================================================ * Date: 2017/9/22 * Time: 17:24 */ namespace Smart\Service; use Smart\Models\SysPush; use JPush; class SysPushService extends BaseService { //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; protected $model_class = SysPush::class; public $catalog = [ 'alert' => '通知', 'order' => '订单', 'event' => '活动' ]; public $platform = [ 'all' => '全部', 'ios' => 'iOS', 'android' => '安卓', ]; //状态 public $status = [ 0 => '未发送', 1 => '已发送', ]; private $jpush; //类实例 /** * 初始化 jpush 接口 * * @param string $appKey * @param string $secret */ public function initJPush( $appKey = '', $secret = '' ) { $appKey = empty( $appKey ) ? config( 'backend.JPush.appKey' ) : ''; $secret = empty( $secret ) ? config( 'backend.JPush.secret' ) : ''; // $this->jpush = new JPush( $appKey, $secret ); } //取默认值 public function getDefaultRow() { return [ 'id' => '', 'mer_id' => '', 'catalog' => 'alert', 'platform' => 'all', 'registration_id' => '', 'alias' => '', 'tags' => '', 'title' => '', 'content' => '', 'param' => '', 'status' => '0', 'sent_at' => '', 'created_at' => date( 'Y-m-d H:i:s' ), ]; } /** * 根据条件查询 * * @param $param * * @return array|number */ function getByCond( $param ) { $default = [ 'field' => ['*'], 'keyword' => '', 'status' => '', 'page' => 1, 'pageSize' => 10, 'sort' => 'id', 'order' => 'DESC', 'count' => FALSE, 'getAll' => FALSE ]; $param = extend( $default, $param ); $model = $this->getModel()->keyword($param['keyword'])->status($param['status']); if ( $param['count'] ) { return $model->count(); } $data = $model->getAll($param)->orderBy($param['sort'] , $param['order'])->get()->toArray($param['field']); return $data ? $data : []; } /** * 绑定用户ID * * @param $registrationId * @param $userId * * @return array */ public function bindByUserId( $registrationId, $userId ) { try { $result = $this->jpush->device()->updateDevice( $registrationId, (string) $userId ); return ajax_arr( '成功', 0, json_decode( json_encode( $result ), TRUE ) ); } catch ( \Exception $e ) { return ajax_arr( $e->getMessage(), 500 ); } } public function sendById( $id ) { $data = $this->getById( $id ); if ( empty( $data ) ) { return ajax_arr( '推送消息未找到', 500 ); } if ( ! empty( $data['alias'] ) ) { $data['alias'] = explode( ',', $data['alias'] ); } if ( ! empty( $data['tags'] ) ) { $data['tags'] = explode( ',', $data['tags'] ); } if ( ! empty( $data['registrationId'] ) ) { $data['registrationId'] = explode( ',', $data['registrationId'] ); } if ( ! empty( $data['extras'] ) ) { $data['extras'] = json_decode( $data['extras'], TRUE ); } $result = $this->sendByCond( $data ); if ( $result['code'] != 0 ) { return $result; } //更新数据 try { $this->getModel()->where( 'id', $id )->update( [ 'status' => 1, 'sent_at' => date( 'Y-m-d H:i:s' ) ] ); return ajax_arr( '推送成功', 0 ); } catch ( \Exception $e ) { return ajax_arr( '发送失败 ,' . $e->getMessage(), 500 ); } } /** * 根据条件发送 * * @param $params * * @return array */ public function sendByCond( $params ) { $default = [ 'alias' => [], 'tags' => [], 'registrationId' => [], 'title' => '', 'alert' => '', 'platform' => 'all', 'extras' => [], ]; $params = extend( $default, $params ); try { $push = $this->jpush->push(); $push->setPlatform( $params['platform'] ); if ( ! empty( $params['alias'] ) ) { $push->addAlias( $params['alias'] ); } if ( ! empty( $params['tags'] ) ) { $push->addTag( $params['tags'] ); } if ( ! empty( $params['registrationId'] ) ) { $push->addRegistrationId( $params['registrationId'] ); } if ( $params['platform'] == 'all' ) { //发送到所有平台 if ( empty( $params['extras'] ) ) { $push->setNotificationAlert( $params['alert'] ); } else { $push->addIosNotification( $params['alert'], 'sound', '+1', NULL, NULL, $params['extras'] ) ->addAndroidNotification( $params['alert'], $params['title'], NULL, $params['extras'] ); } } else if ( $params['platform'] == 'ios' ) { //仅发 ios if ( empty( $params['extras'] ) ) { $push->addIosNotification( $params['alert'] ); } else { $push->addIosNotification( $params['alert'], 'sound', '+1' ); } } else if ( $params['platform'] == 'android' ) { //仅发 android if ( empty( $params['extras'] ) ) { $push->androidNotification( $params['alert'], $params['title'] ); } else { $push->androidNotification( $params['alert'], $params['title'], NULL, $params['extras'] ); } } $response = $push->send(); return ajax_arr( '发送成功', 0, $response ); } catch ( \APIConnectionException $e ) { // try something here return ajax_arr( $e->getMessage(), 500 ); } catch ( \APIRequestException $e ) { // try something here return ajax_arr( $e->getMessage(), 500 ); } } public function insert( $data, $sendImmediately = TRUE ) { } } ================================================ FILE: src/Service/SysRolePermissionService.php ================================================ '禁用', 1 => '启用', ]; //根据条件查询 function getByCond( $param ) { $default = [ 'field' => '', 'keyword' => '', 'status' => '', 'page' => 1, 'pageSize' => 10, 'sort' => 'id', 'order' => 'DESC', 'count' => FALSE, 'getAll' => FALSE ]; $param = extend( $default, $param ); $model = $this->getModel()->keyword($param['keyword'])->status($param['status']); if ( $param['count'] ) { return $model->count(); } // $this->getModel()->field( $param['field'] ); if ( ! $param['getAll'] ) { $model = $model->getAll($param); } $data = $model->orderBy($param['sort'] , $param['order'])->get()->toArray(); return $data ? $data : []; } /** * 根据角色获取 权限 * * @param $roleId * * @return array */ public function getPrivilegeByRole( $roleId ) { $data = $this->getModel()->where( 'role_id', $roleId )->get()->toArray(); if ( empty( $data ) ) { return $data; } $newData = []; foreach ( $data as $row ) { $newData[] = $row['privilege_id']; } return $newData; } /** * 根据角色获取 授权 * * @param $roleId * * @return mixed */ function getByRole( $roleId ) { return $this->getModel()->where( 'role_id', $roleId )->get()->toArray(); } /** * 检查角色权限 * * @param $roleId * @param $module * @param $func * @param $privilege * * @return array|bool */ function checkRoleFuncPrivilege( $roleId, $module, $func, $privilege ) { if ( $roleId == config( 'superAdminId' ) ) { return TRUE; } if ( empty( $privilege ) ) { return FALSE; } $funcUri = "$module/$func/index"; $data = $this->getModel() ->field( 'DISTINCT fp.name' ) ->alias( 'rp' ) ->where( 'rp.role_id', 'in', $roleId ) ->where( 'f.uri', $funcUri ) ->join( 'sys_func_privilege fp', 'fp.id = rp.privilege_id' ) ->join( 'sys_func f', 'f.id = fp.func_id' ) ->select(); if ( empty( $data ) ) { return FALSE; } $fixData = []; foreach ( $data as $row ) { $fixData [] = $row ['name']; } //echo $privilege_name; if ( ! in_array( $privilege, $fixData ) ) { return FALSE; } return $fixData; } /** * 根据功能删除 * * @param $funcId * * @return array */ function destroyByFunc( $funcId ) { try { $sql = db( 'sys_func_privilege' )->where( 'func_id', $funcId )->buildSql(); $this->getModel()->where( 'privilege_id', 'in', $sql ); $this->getModel()->delete(); return ajax_arr( '删除成功', 0 ); } catch ( \Exception $e ) { return ajax_arr( $e->getMessage(), 500 ); } } /** * 更新角色授权 * * @param $roleId * @param $privilegeArr * * @return array */ function updateRolePermission( $roleId, $privilegeArr ) { DB::beginTransaction(); try { $oldPrivilegeData = $this->getPrivilegeByRole( $roleId ); $needAdd = array_diff( $privilegeArr, $oldPrivilegeData ); $needDelete = array_diff( $oldPrivilegeData, $privilegeArr ); if ( ! empty( $needDelete ) ) { $this->getModel() ->where( 'role_id', $roleId ) ->whereIn( 'privilege_id', $needDelete ) ->delete(); // echo $this->getModel()->toSql(); } if ( ! empty( $needAdd ) ) { $addData = []; foreach ( $needAdd as $privilegeId ) { $addData[] = [ 'role_id' => $roleId, 'privilege_id' => $privilegeId ]; } $this->getModel()->insert( $addData ); } DB::commit(); return ajax_arr( '修改权限成功了', 0 ); } catch ( \Exception $e ) { DB::rollback(); return ajax_arr( $e->getMessage() . '--- here', 500 ); } } } ================================================ FILE: src/Service/SysRoleService.php ================================================ > * @version 2.0 2017-09-15 */ namespace Smart\Service; use Smart\Models\SysRole; class SysRoleService extends BaseService { //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; protected $model_class = SysRole::class; //状态 var $status = [ 0 => '禁用', 1 => '启用', ]; var $rank = [ 1 => '1级', 2 => '2级', 3 => '3级', 4 => '4级', 5 => '5级', 6 => '6级', 7 => '7级', 8 => '8级', 9 => '9级', 10 => '10级', ]; var $mp_rank = [ 1 => '1级', 2 => '2级', 3 => '3级', 4 => '4级', 5 => '5级', ]; //生成类单例 //取默认值 function getDefaultRow() { return [ 'id' => '', 'sort' => '99', 'type' => 'backend', 'mer_id' => '0', 'name' => '', 'status' => '1', 'desc' => '', 'expand' => '', 'rank' => '1', ]; } //根据条件查询 function getByCond($param) { $default = [ 'field' => '', 'keyword' => '', 'status' => '', 'module' => 'backend', 'page' => 1, 'pageSize' => 10, 'sort' => 'id', 'order' => 'DESC', 'count' => FALSE, 'getAll' => FALSE, ]; $param = extend($default, $param); $model = $this->getModel()->keyword($param['keyword'])->module($param['module'])->status($param['status']) ->where('rank', '<', 10); if ($param['count']) { return $model->count(); } else { // $this->getModel() = $this->getModel()->select( $param['field'] ); $data = $model->getAll($param) ->orderBy($param['order'], $param['sort'])->get()->toArray(); return $data; } } /** * 根据角色id获取角色信息 * * */ function getById($id) { return $this->getModel()->find($id); } /** * 根据模块获取角色 * * @param $module * * @return mixed */ function getByModule($module) { $data = $this->getModel() ->where('id', '<>', config('backend.superAdminId')) ->module($module) ->orderBy('rank', 'desc') ->get()->toArray(); return $data; } } ================================================ FILE: src/Service/SysSettingsService.php ================================================ * @version 2.0 2018-06-25 */ use Smart\Models\SysSettings; use Smart\Service\BaseService; class SysSettingsService extends BaseService { //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; protected $model_class = SysSettings::class; //状态 public $status = [ 0 => '禁用', 1 => '启用', ]; //取默认值 function getDefaultRow() { return [ 'created_at' => '', 'desc' => '99', 'group' => 'default', 'id' => '', 'key' => '', 'type' => 'text', 'updated_at' => '', 'value' => '', ]; } /** * 根据条件查询 * * @param $param * * @return array|number */ public function getByCond($param) { $default = [ 'field' => ['*'], 'keyword' => '', 'status' => '', 'page' => 1, 'pageSize' => 10, 'sort' => 'id', 'order' => 'DESC', 'count' => FALSE, 'getAll' => FALSE, ]; $param = extend($default, $param); $model = $this->getModel()->keyword($param['keyword'])->status($param['status']); if ($param['count']) { return $model->count(); } $data = $model->getAll($param)->orderBy($param['sort'], $param['order'])->get($param['field'])->toArray(); return $data ? $data : []; } } ================================================ FILE: src/Service/SysSmsService.php ================================================ * Date: 2017/9/25 * Time: 10:23 */ namespace Smart\Service; use Smart\Models\SysSms; use Toplan\PhpSms\Sms; class SysSmsService extends BaseService { public $error = ''; const CaptchaVerifyPeriod = 15; //验证码 验证有效期 单位:分钟 //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; protected $model_class = SysSms::class; public $type = [ 'captcha' => '验证码' ]; //状态 public $status = [ -1 => '未发送', 0 => '未验证', 1 => '已验证', ]; //取默认值 function getDefaultRow() { return [ 'id' => '', 'type' => 'captcha', 'phone' => '', 'content' => '', 'temp_id' => '', 'create_time' => date( 'Y-m-d H:i:s' ), 'valid_time' => '', 'send_time' => '', 'message_id' => '', 'status' => '0', ]; } /** * 根据条件查询 * * @param $param * * @return array|number */ function getByCond( $param ) { $default = [ 'field' => ['*'], 'keyword' => '', 'status' => '', 'page' => 1, 'pageSize' => 10, 'sort' => 'id', 'order' => 'DESC', 'count' => FALSE, 'getAll' => FALSE ]; $param = extend( $default, $param ); $model = $this->getModel()->keyword($param['keyword'])->status($param['status']); if ( $param['count'] ) { return $model->count(); } $data = $model->getAll($param)->orderBy($param['sort'] , $param['order'])->get($param['field'])->toArray(); return $data ? $data : []; } /** * 创建验证码 * * @param $phone * @param bool $sendImmediately * * @return array */ public function createByCaptcha( $phone, $sendImmediately = FALSE ) { $oldData = $this->getByPhoneInOneMin( $phone ); if ( ! empty( $oldData ) ) { return ajax_arr( '请1分钟后再试试', 500 ); } $data = [ 'phone' => $phone, 'content' => $this->makeCaptcha(), 'temp_id' => config( 'custom.sms' )['captchaTempId'] ]; try { $id = $this->getModel()->insertGetId( $data ); if ( $sendImmediately ) { if ( ! $this->sendCaptcha( $phone, $data['content'], $data['temp_id'] ) ) { throw new \Exception( $this->error ); } $this->getModel()->where( 'id', $id )->update( [ 'sent_at' => date( 'Y-m-d H:i:s' ), 'status' => 0 ] ); } return ajax_arr( '创建成功', 0 ); } catch ( \Exception $e ) { return ajax_arr( $e->getMessage(), 500 ); } } /** * 生成验证码 * * @return int */ private function makeCaptcha() { return mt_rand( 100000, 999999 ); } /** * 发送验证码 * * @param $phone * @param $captcha * @param $tempId * * @return bool */ public function sendCaptcha( $phone, $captcha, $tempId ) { $this->error = ''; $templates = [ // 'YunTongXun' => 'your_temp_id', // 'SubMail' => 'your_temp_id' 'MySms' => $tempId, ]; // 模版数据 $tempData = [ 'code' => $captcha, 'minutes' => '5' ]; $result = Sms::make()->to( $phone)->template($templates)->data($tempData)->send(); if ( $result == NULL ) { $this->error = '返回错误'; return FALSE; } if ( $result->statusCode != 0 ) { $this->error = (string) $result->statusMsg; return FALSE; } return TRUE; } /** * 取1分钟内发送的验证码 * * @param $phone * * @return mixed */ public function getByPhoneInOneMin( $phone ) { $data = $this->getModel() ->where( 'phone', $phone ) ->whereTime( 'created_at', '>', time() - 60 ) ->find(); return $data; } /** * 校验验证码 * * @param $phone * @param $captcha * * @return bool */ public function validCaptcha( $phone, $captcha ) { //获取验证码 $data = $this->getModel() ->where( 'phone', $phone ) ->where( 'status', 0 ) ->whereTime( 'sent_at', '>', time() - self::CaptchaVerifyPeriod * 60 ) ->order('sent_at DESC') ->find(); // echo $this->model->getLastSql(); if ( ! $data ) { $this->error = '验证码未找到'; return FALSE; } if ( $data['content'] != $captcha ) { $this->error = '验证码不正确'; return FALSE; } $this->getModel()->where('id' , $data['id'])->update([ 'verified_at' => date( 'Y-m-d H:i:s' ), 'status' => 1, ]); //验证成功 return TRUE; } } ================================================ FILE: src/Service/SysUserDeviceService.php ================================================ * @version 2.0 2018-06-18 */ use Smart\Models\SysUserDevice; use Smart\Service\BaseService; class SysUserDeviceService extends BaseService { //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; protected $model_class = SysUserDevice::class; //状态 public $status = [ 0 => '禁用', 1 => '启用', ]; public $for_test = [ 0 => '否', 1 => '是', ]; //取默认值 function getDefaultRow() { return [ 'api_version' => '', 'app_version' => '', 'created_at' => '', 'device' => '', 'device_os_version' => '', 'for_test' => '0', 'id' => '', 'registration_id' => '', 'token' => '', 'updated_at' => '', 'user_id' => '', ]; } /** * 根据条件查询 * * @param $param * * @return array|number */ public function getByCond($param) { $default = [ 'field' => ['*'], 'keyword' => '', 'status' => '', 'page' => 1, 'pageSize' => 10, 'sort' => 'id', 'order' => 'DESC', 'count' => FALSE, 'getAll' => FALSE, ]; $param = extend($default, $param); $model = $this->getModel()->keyword($param['keyword'])->status($param['status']); if ($param['count']) { return $model->count(); } $data = $model->getAll($param)->orderBy($param['sort'], $param['order'])->get($param['field'])->toArray(); return $data ? $data : []; } //生成token public function generateToken(){ } } ================================================ FILE: src/Service/SysUserRoleService.php ================================================ * Date: 2017/9/16 * Time: 14:05 */ namespace Smart\Service; use Smart\Models\SysUserRole; use Illuminate\Support\Facades\DB; class SysUserRoleService extends BaseService { //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; protected $model_class = SysUserRole::class; //状态 public $status = [ 0 => '禁用' , 1 => '启用' , ]; /** * 取默认值 * * @return array */ public function getDefaultRow() { return [ 'id' => '' , 'user_id' => '' , 'role_id' => '' , ]; } /** * 根据条件查询 * * @param $param * * @return array */ public function getByCond( $param ) { $default = [ 'field' => '' , 'keyword' => '' , 'status' => '' , 'page' => 1 , 'pageSize' => 10 , 'sort' => 'id' , 'order' => 'DESC' , 'count' => FALSE , 'getAll' => FALSE , ]; $param = extend( $default , $param ); $model = $this->name($param['keyword'])->status($param['status']); if ( $param['count'] ) { return $this->getModel()->count(); } else { //$this->getModel()->field( $param['field'] ); $data = $model->getAll($param)->orderBy( $param['sort'] , $param['order'])->get()->toArray(); } return $data ? $data : []; } /** * 根据用户取角色 * * @param $userId * @param bool $concatRole * * @return array */ public function getByUser( $userId , $concatRole = FALSE ) { $model = DB::table('sys_user_role') ->join('sys_role', 'sys_role.id' , '=' , 'sys_user_role.role_id' ) ->where( 'sys_user_role.user_id' , $userId ); if ( $concatRole ) { $data = $model->first([ 'GROUP_CONCAT( sys_role.role_id ) AS role_id' , 'GROUP_CONCAT( sys_role.name ) AS role_name' , 'MAX(sys_role.rank) AS role_rank' ]); } else { $data = $model->get( [ 'sys_user_role.*' , 'sys_role.name as role_name' , 'sys_role.rank as role_rank' ] )->toArray(); } return $data ? $data : []; } /** * 删除用户角色 * * @param $userId * * @return array */ public function destroyByUser( $userId ) { try { $this->getModel()->where( 'user_id' , $userId )->delete(); return ajax_arr( '删除成功' , 0 ); } catch ( \Exception $e ) { return ajax_arr( $e->getMessage() , 500 ); } } /** * 更新用户角色 * * @param $userId * @param array $roles * * @return array */ public function updateByUser( $userId , $roles = [] ) { if ( $userId == config( 'superAdminId' ) ) { return ajax_arr( '修改成功' , 0 ); } //查询老数据 $oldData = $this->getByUser( $userId ); $oldRoles = []; foreach ( $oldData as $row ) { $oldRoles[] = $row->role_id; } //查询差值 $needDelete = array_diff( $oldRoles , $roles ); $needAdd = array_diff( $roles , $oldRoles ); if ( ! empty( $needDelete ) ) { //删除取消的角色 $this->getModel()->where( 'user_id' , $userId )->whereIn( 'role_id' , $needDelete )->delete(); } if ( ! empty( $needAdd ) ) { //添加新加的角色 $data = []; foreach ( $needAdd as $role ) { $data[] = [ 'user_id' => $userId , 'role_id' => $role ]; } $this->getModel()->insert( $data ); } return ajax_arr( '更新成功' , 0 ); } } ================================================ FILE: src/Service/SysUserService.php ================================================ * Date: 2017/9/16 * Time: 13:34 */ namespace Smart\Service; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Traits\Macroable; use Smart\Models\SysUser; use Smart\Models\SysUserRole; use Smart\Models\SysUserDevice; class SysUserService extends BaseService { //引入 GridTable trait use \Smart\Traits\Service\GridTable,\Smart\Traits\Service\Instance; use Macroable; protected $model_class = SysUser::class; //状态 public $status = [ 0 => '禁用', 1 => '启用', ]; public $user = null; /** * 取默认值 * * @return array */ function getDefaultRow() { return [ 'id' => '', 'module' => 'backend', 'username' => '', 'password' => '', 'icon' => '', 'email' => '', 'phone' => '', 'status' => '1', 'token' => '', 'created_at' => date('Y-m-d H:i:s'), ]; } /** * 根据条件查询 * * @param $params * * @return array|number */ public function getByCond($params) { $default = [ 'field' => ['*'], 'module' => 'backend', 'keyword' => '', 'status' => '', 'merId' => '', 'page' => 1, 'pageSize' => 10, 'sort' => 'id', 'order' => 'DESC', 'getAll' => FALSE, 'count' => FALSE, 'withPwd' => FALSE, 'withRoles' => FALSE, 'withTest' => FALSE, 'merchant' => FALSE, ]; $params = extend($default, $params); if ($params['merchant']) { return $this->getMerSysUserByCond($params); } $model = self::instance()->getModel(); if ($params['withTest']) { $model = $model->with('UserDevice'); } $model = $model->status($params['status'])->module($params['module'])->keyword($params['keyword']); if ($params['count']) { return $model->count(); } else { $data = $model ->orderBy($params['sort'], $params['order'])->get()->toArray(); } if (!$params['withPwd']) { foreach ($data as &$item) { unset($item['password']); } } if ($params['withRoles']) { $data = $this->getRoles($data); } return $data ? $data : []; } /** * todo 需要优化 * * @param $data * * @return mixed */ private function getRoles($data) { $SysUserRole = SysUserRoleService::instance(); foreach ($data as &$item) { $item['roles'] = $SysUserRole->getByUser($item['id']); } return $data; } /** * 获取 MP 平台用户 * * @param $params * * @return array */ private function getMerSysUserByCond($params) { $sysMerchant = SysMerchantService::instance(); $model = $sysMerchant->getModel()->find($params['merId'])->sysUsers()->status($params['status']); if ($params['count']) { return $model->count(); } else { // $model->field( 'u.*' ); $data = $model->getAll($params)->orderBy($params['sort'], $params['order'])->get()->toArray(); } if (!$params['withPwd']) { foreach ($data as &$item) { unset($item['password']); } } if ($params['withRoles']) { $data = $this->getRoles($data); } return $data ? $data : []; } /** * 更新密码 * * @param $id * @param $data * * @return array */ function uploadPwd($id, $data) { try { self::instance()->getModel()->where('id', $id)->update($data); return ajax_arr('更新成功', 0); } catch (\Exception $e) { return ajax_arr($e->getMessage(), 500); } } /** * 添加数据 * * @param $data * * @return array */ public function insert($data) { DB::beginTransaction(); try { if (empty($data)) { throw new \Exception('数据不能为空'); } if (isset($data['for_test'])) { $for_test = $data['for_test']; unset($data['for_test']); } $roles = isset($data['roles']) ? $data['roles'] : []; unset($data['roles']); $data['password'] = str2pwd(config('defaultPwd')); $id = self::instance()->getModel()->insertGetId($data); SysUserDevice::firstOrCreate(['user_id'=>$id]); if ($id <= 0) { throw new \Exception('创建用户失败'); } if($for_test){ $token = md5(http_build_query($data) . json_encode(['created_at' => time()])); self::instance()->getModel()->api_token = $token; self::instance()->getModel()->save(); } //更新用户角色 if (!empty($roles)) { $SysUserRole = SysUserRoleService::instance(); $RoleResult = $SysUserRole->updateByUser($id, $roles); if ($RoleResult['code'] > 0) { throw new \Exception($RoleResult['msg']); } } DB::commit(); return ajax_arr('创建用户成功', 0, ['id' => $id]); } catch (\Exception $e) { DB::rollback(); return ajax_arr($e->getMessage(), 500); } } //更新 function update($id, $data) { DB::beginTransaction(); try { $roles = []; if (isset($data['roles'])) { $roles = $data['roles']; unset($data['roles']); } if (isset($data['for_test'])) { $for_test = $data['for_test']; unset($data['for_test']); } $ret = self::instance()->getModel()->where('id', $id)->update($data); $sysUserDevice = SysUserDevice::firstOrCreate(['user_id'=>$id]); $sysUserDevice->for_test = $for_test; $sysUserDevice->save(); //更新用户角色 $SysUserRole = SysUserRoleService::instance(); $RoleResult = $SysUserRole->updateByUser($id, $roles); if ($RoleResult['code'] > 0) { throw new \Exception($RoleResult['msg']); } if($for_test){ $token = md5(http_build_query($data) . json_encode(['created_at' => time()])); $sysUser = SysUser::find($id); $sysUser->api_token = $token; $sysUser->save(); } DB::commit(); return ajax_arr('更新成功', 0); } catch (\Exception $e) { DB::rollback(); return ajax_arr($e->getMessage(), 500); } } /** * 删除系统用户 * * @param $id * * @return array */ public function destroy($id) { $model = self::instance()->getModel(); try { if ($id <= 2) { throw new \Exception('系统用户不能删除'); } $model_user_role = new SysUserRole(); //删除用户角色 $model_user_role->destroy($id); //删除用户 $model->destroy($id); return ajax_arr('删除成功', 0); } catch (\Exception $e) { return ajax_arr($e->getMessage(), 500); } } /** * 重置密码 * * @param $id * @param $pwd * * @return array */ public function resetPwd($id, $pwd) { try { // $data['password'] = str2pwd( $pwd ); $data['password'] = Hash::make($pwd); $row = self::instance()->getModel()->where('id', $id)->update($data); if ($row <= 0) { return ajax_arr('未修改任何记录', 500); } return ajax_arr('重置密码成功', 0); } catch (\Exception $e) { return ajax_arr($e->getMessage(), 500); } } public function setUser($id) { self::instance()->user = self::instance()->getModel()->find($id); } /** * 查询测试用户 * * @return mixed */ public function getForTest() { $data = DB::table('sys_user as su')->leftJoin('sys_user_device as sud', 'su.id', '=', 'sud.user_id')->where('sud.for_test', 1)->get()->toArray(); return $data; } } ================================================ FILE: src/Service/UploadManager.php ================================================ disk = Storage::disk(config('blog.uploads.storage')); $this->mimeDetect = $mimeDetect; } /** * Return files and directories within a folder * * @param string $folder * @return array of [ * 'folder' => 'path to current folder', * 'folderName' => 'name of just current folder', * 'breadCrumbs' => breadcrumb array of [ $path => $foldername ] * 'folders' => array of [ $path => $foldername] of each subfolder * 'files' => array of file details on each file in folder * ] */ public function folderInfo($folder) { $folder = $this->cleanFolder($folder); $breadcrumbs = $this->breadcrumbs($folder); $slice = array_slice($breadcrumbs, -1); $folderName = current($slice); $breadcrumbs = array_slice($breadcrumbs, 0, -1); $subfolders = []; foreach (array_unique($this->disk->directories($folder)) as $subfolder) { $subfolders["/$subfolder"] = basename($subfolder); } $files = []; foreach ($this->disk->files($folder) as $path) { $files[] = $this->fileDetails($path); } return compact( 'folder', 'folderName', 'breadcrumbs', 'subfolders', 'files' ); } /** * Sanitize the folder name */ protected function cleanFolder($folder) { return '/' . trim(str_replace('..', '', $folder), '/'); } /** * 返回当前目录路径 */ protected function breadcrumbs($folder) { $folder = trim($folder, '/'); $crumbs = ['/' => 'root']; if (empty($folder)) { return $crumbs; } $folders = explode('/', $folder); $build = ''; foreach ($folders as $folder) { $build .= '/' . $folder; $crumbs[$build] = $folder; } return $crumbs; } /** * 返回文件详细信息数组 */ protected function fileDetails($path) { $path = '/' . ltrim($path, '/'); return [ 'name' => basename($path), 'fullPath' => $path, 'webPath' => $this->fileWebpath($path), 'mimeType' => $this->fileMimeType($path), 'size' => $this->fileSize($path), 'modified' => $this->fileModified($path), ]; } /** * 返回文件完整的web路径 */ public function fileWebpath($path) { $path = rtrim(config('blog.uploads.webpath'), '/') . '/' . ltrim($path, '/'); return url($path); } /** * 返回文件MIME类型 */ public function fileMimeType($path) { return $this->mimeDetect->findType( pathinfo($path, PATHINFO_EXTENSION) ); } /** * 返回文件大小 */ public function fileSize($path) { return $this->disk->size($path); } /** * 返回最后修改时间 */ public function fileModified($path) { return Carbon::createFromTimestamp( $this->disk->lastModified($path) ); } } ================================================ FILE: src/Service/UploadService.php ================================================ 'img', //上传类型 img , file , all 'path' => 'icon', //上传路径 icon merchant tmp app file 'maxSize' => 3145728, //上传尺寸 'merId' => '', //商户ID 'isKE' => 0, //是否kindeditor 'crop' => [], //是否裁剪 数组 [ x , y , w , h ], 'ratio' => 1, //缩放比 'width' => 0, //宽度 'height' => 0, //高度 'thumb' => [], //缩略图 [50 , 100 , 300] 或 [ 50|50 , 100|100 , 300|300 ] 'saveAsAlbum' => FALSE, //是否保存到相册 'albumTag' => '', //相册目录 ]; public $param = []; //上传的配置文件 private $fileInfo = NULL; //上传成功后的 file info private $result = []; //返回结果 private $uploadFtpList = []; //需要ftp上传的文件 private $relativePath = ''; private static $instance; public static function instance( $inputName = 'imgFile') { if ( self::$instance == NULL ) { self::$instance = new UploadService(); self::$instance->inputName = $inputName ; } return self::$instance; } public function setError( $error ) { $this->error = $error; } public function getError() { return $this->error; } public function setInputName( $inputName ) { $this->inputName = $inputName; } private function initUpload( $param ) { $this->uploadFtpList = []; $this->fileInfo = NULL; $this->result = []; $this->relativePath = ''; $this->param = extend( $this->defaultParam, $param ); } /** * 上传 * * 图片 先裁剪 再按宽高缩放 * * @param $param * * @return array */ public function doUpload( $param = [] ) { //初始化各种变量 $this->initUpload( $param ); //检查上传类型 if ( ! in_array( $this->param['type'], $this->type ) ) { $this->setError( '未知的上传类型' ); return $this->returnError(); } //检查存储路径 if ( ! in_array( $this->param['path'], $this->path ) ) { $this->setError( '未知的上传路径' ); return $this->returnError(); } //检查尺寸 $file = request()->file( $this->inputName ); if ( $file->getSize() > $this->param['maxSize'] ) { $size = file_size( $this->param['maxSize'] ); $this->setError( "文件超过{$size}" ); return $this->returnError(); } //绝对路径 // $absolutePath = base_path() . 'public' . DIRECTORY_SEPARATOR . 'upload' . DIRECTORY_SEPARATOR . $this->param['path'] . DIRECTORY_SEPARATOR; //相对路径 $relativePath = "public". DIRECTORY_SEPARATOR .'upload' . DIRECTORY_SEPARATOR . $this->param['path'] . DIRECTORY_SEPARATOR; //文件路径 if ( ! empty( $this->param['merId'] ) ) { // $absolutePath = base_path() . "/public/upload/merchant/{$this->param['merId']}/{$this->param['path']}/"; $relativePath = "public". DIRECTORY_SEPARATOR ."upload". DIRECTORY_SEPARATOR ."merchant". DIRECTORY_SEPARATOR .$this->param['merId'] . DIRECTORY_SEPARATOR . $this->param['path'] . DIRECTORY_SEPARATOR; } //加入日期 // $absolutePath .= date( 'ymd' ); $relativePath .= date( 'ymd' ); //移动到目标文件夹 $info = $file->store($relativePath); //上传失败 if ( ! $info ) { $this->setError( $file->getError() ); return $this->returnError(); } $this->fileInfo = $info; $this->relativePath = $relativePath; //上传成功的后续处理 return $this->afterUploadSuccess(); } /** * 上传成功的后续处理 * * @return array */ private function afterUploadSuccess() { //文件相对路径 $this->relativePath = $this->fileInfo ; //修改文件权限 //chmod( $this->relativePath, 0777 ); $mimes = Storage::mimeType($this->fileInfo); $size = Storage::size($this->fileInfo); $name = $this->fileInfo; //生成返回信息 $this->result = [ 'uri' => Storage::url($this->fileInfo), 'savePath' => $this->relativePath, 'mimes' => $mimes, 'size' => $size, 'name' => $name ]; //添加到上传列表 $this->addUploadFtpList( $this->fileInfo ); //如果是图片 if ( $this->param['type'] == 'img' ) { $checkRet = $this->checkCropThumb(); if ( ! $checkRet ) { Storage::delete($this->relativePath); return $this->returnError(); } //保存到相册 if ( ! $this->saveAsAlbum() ) { return $this->returnError(); } } //上传到ftp if ( ! $this->uploadToFtp() ) { return $this->returnError(); } return $this->returnSuccess(); } /** * 添加到上传列表 * * @param $filePath */ private function addUploadFtpList( $filePath ) { $this->uploadFtpList[] = $filePath; } /** * 返回成功 * * @return array */ private function returnSuccess() { //如果是kind editor if ( $this->param['isKE'] ) { return [ 'error' => 0, 'url' => $this->result['uri'] ]; } else { return ajax_arr( '上传成功', 0, $this->result ); } } /** * 返回错误 * * @return array */ private function returnError() { //如果是kind editor if ( $this->param['isKE'] ) { return [ 'error' => 1, 'message' => $this->error ]; } else { return ajax_arr( $this->error, 500 ); } } /** * 检查图片 * * @return bool */ private function checkCropThumb() { //打开图片 $image = Image::make(Storage::path($this->fileInfo) ); $this->result['width'] = $image->width(); $this->result['height'] = $image->height(); //检查是否要裁剪 if ( $this->param['crop'] && ! empty( $this->param['crop'] ) ) { $pathInfo = pathinfo( $this->fileInfo ); $cropPath = dirname(Storage::path($this->fileInfo))."crop_{$pathInfo['basename']}"; //裁剪图片 $crop = explode( ',', $this->param['crop'] ); $image->crop( $crop[2], $crop[3], $crop[0], $crop[1])->save($cropPath ); Image::make($cropPath)->resize($this->param['width'] , $this->param['height'])->save( Storage::path($this->fileInfo)); $this->result['width'] = $this->param['width']; $this->result['height'] = $this->param['height']; Storage::delete($cropPath); } else { //检查图片尺寸 if ( $this->param['width'] > 0 && $this->result['width'] != $this->param['width'] ) { $this->setError( '图片宽度需为' . $this->param['width'] ); return FALSE; } if ( $this->param['height'] > 0 && $this->result['height'] != $this->param['height'] ) { $this->setError( '图片高度需为' . $this->param['height'] ); return FALSE; } } //检查是否要生成 缩略图 if ( ! empty( $this->param['thumb'] ) ) { $pathInfo = pathinfo( $this->fileInfo ); $thumb = explode( ',', $this->param['thumb'] ); foreach ( $thumb as $size ) { $image = Image::make( $this->fileInfo ); $sizeArr = explode( '|', $size ); //计算尺寸 兼容 50 和 50|20 这2种模式 $w = $sizeArr[0]; $h = isset( $sizeArr[1] ) ? $sizeArr[1] : $sizeArr[0]; $thumbPath = "{$pathInfo['dirname']}/{$pathInfo['filename']}.{$sizeArr[0]}.{$pathInfo['extension']}"; $image->resize( $w, $h )->save( $thumbPath ); $this->addUploadFtpList( $thumbPath ); chmod( $thumbPath, 0777 ); } } return TRUE; } /** * 上传到ftp * * @return bool */ private function uploadToFtp() { if ( config( 'backend.image.uploadType' ) == 'ftp' ) { foreach ( $this->uploadFtpList as $file ) { if ( Storage::store( $file, 'ftp' ) ) { Storage::delete($file); } } } return TRUE; } /** * 保存到相册 * * @return bool */ private function saveAsAlbum() { if ( $this->param['saveAsAlbum'] !== FALSE ) { $data = [ 'uri' => $this->result['uri'], 'size' => $this->result['size'], 'img_size' => "{$this->result['width']}*{$this->result['height']}", 'mimes' => $this->result['mimes'], ]; if ( ! empty( $this->param['merId'] ) ) { $data['mer_id'] = $this->param['merId']; } $MerAlbum = MerAlbumService::instance(); $ret = $MerAlbum->insert( $data, $this->param['albumTag'] ); if ( $ret['code'] != 0 ) { $this->setError( $ret['msg'] ); return FALSE; } } return TRUE; } } ================================================ FILE: src/Service/WidgetService.php ================================================ type = ucfirst($param['type']); $WidgetService = '\Smart\Service\Widget\\' . $this->type . 'Widget'; $this->builder = new $WidgetService; $this->builder->make($param); return $this; } public function render() { return $this->builder->render(); } public function __toString() { return $this->render()->render(); } } ================================================ FILE: src/Service/widget/RadioWidget.php ================================================ $this->defaultValue, 'title' => $this->title, 'data' => $this->data, 'name' => $this->name, ]; return view($this->template, $data); } public function make($param) { $this->template = $param['template'] ?? $this->template; $this->defaultValue = $param['value']; $this->title = $param['title']; $this->data = $param['data']; $this->name = $param['name']; return $this; } } ================================================ FILE: src/Service/widget/TextWidget.php ================================================ template); } } ================================================ FILE: src/SmartServiceProvider.php ================================================ * Date: 2017/9/28 * Time: 13:25 */ namespace Smart; use Illuminate\Support\Facades\Route; use Illuminate\Support\ServiceProvider; use Smart\Models\SysModule; use Smart\Extentions\EloquentUserProvider; use Illuminate\Support\Facades\Auth; use File; use App; class SmartServiceProvider extends ServiceProvider { protected $commands = [ \Smart\Console\Commands\InstallCommand::class, \Smart\Console\Commands\UninstallCommand::class, ]; protected $routeMiddleware = [ 'auth.token' => \Smart\Middleware\CheckToken::class, 'auth.permission' => \Smart\Middleware\Permission::class, 'auth.cors' =>\Smart\Middleware\Cors::class, 'auth.resetPassword' => \Smart\Middleware\ResetPassword::class, ]; public function boot() { $this->loadViewsFrom(__DIR__ . '/../resources/views', 'backend'); if (config('backend.https')) { \URL::forceScheme('https'); $this->app['request']->server->set('HTTPS', true); } $this->loadRoutesFrom(__DIR__ . '/../router/routes.php'); $modules = explode(',', config('backend.module_ext')); //列出状态正常的模块 不可直接调用数据库 foreach ($modules as $module) { //加载模块路由 if (file_exists(app_path() . '/' . ucfirst($module) . '/routes.php')) { $this->loadRoutesFrom(app_path() . '/' . ucfirst($module) . '/routes.php'); } //加载模块视图 if (file_exists(app_path() . '/' . ucfirst($module) . '/views')) { $this->loadViewsFrom(app_path() . '/' . ucfirst($module) . '/views', ucfirst($module)); } //加载模块迁移文件 if(file_exists(app_path().'/'.ucfirst($module).'/migrations')){ $this->loadMigrationsFrom(app_path().'/'.ucfirst($module).'/migrations'); } } $this->publishes([__DIR__ . '/../config/' => config_path()], 'backend'); //service $this->publishes([__DIR__ . '/../resources/Service' => app_path('Service')], 'backend'); //Models $this->publishes([__DIR__ . '/../resources/Models' => app_path('Models')], 'backend'); //发布Api包 $this->publishes([__DIR__ . '/../resources/Api' => app_path('Api')], 'backend'); if (file_exists(app_path('Api') . '/routes.php')) { $this->loadRoutesFrom(app_path('Api') . '/routes.php'); } $this->publishes([__DIR__ . '/../resources/assets/static/' => public_path('static')], 'backend'); // $this->publishes([__DIR__ . '/../database/migrations/' => database_path('migrations')], 'backend-migrations'); $this->loadMigrationsFrom(__DIR__ . '/../database/migrations'); $this->publishes([__DIR__ . '/../resources/npm/' => public_path()], 'backend'); // $this->registerRoute(); } public function register() { $this->mergeConfigFrom(__DIR__ . '/../config/backend.php', 'backend'); $this->registerRouteMiddleware(); $this->registerModuleRouteMiddleware(); $this->registerProvider(); $this->registerModuleProvider(); $this->commands($this->commands); } /** * Register the route middleware. * * @return void */ protected function registerRouteMiddleware() { // register route middleware. foreach ($this->routeMiddleware as $key => $middleware) { app('router')->aliasMiddleware($key, $middleware); } } protected function registerModuleRouteMiddleware(){ $modules = explode(',', config('backend.module_ext')); foreach($modules as $module){ if (file_exists(app_path() . '/' . ucfirst($module) . '/config.php')) { $module_lower = strtolower($module); $this->mergeConfigFrom(app_path() . '/' . ucfirst($module) . '/config.php',$module_lower); $middlewares = config($module_lower.'.middlewares'); foreach($middlewares as $key => $middleware){ app('router')->aliasMiddleware($module_lower.'.'.$key, $middleware); } } } } protected function registerProvider(){ //注册认证服务 Auth::provider('authenEloquent', function ($app, $config) { return new EloquentUserProvider($app->make('hash'), $config['model']); }); //注册短信服务 $this->app->singleton('sms' , function($app){ return new \Overtrue\EasySms\EasySms($app['config']['sms']['sms']); }); } protected function registerModuleProvider(){ $modules = explode(',', config('backend.module_ext')); foreach($modules as $module){ $dir = app_path() . '/' . ucfirst($module) . '/Providers'; $this->loadProviders($dir); } } private function loadProviders($directory) { //$mainServiceProviderNameStartWith = 'Main'; if (File::isDirectory($directory)) { $files = File::allFiles($directory); foreach ($files as $file) { if (File::isFile($file)) { $path = File::dirname($file); $startClass = substr($path,strrpos($path, 'app')); $name = File::name($file); $serviceProviderClass = str_replace('/','\\',ucfirst($startClass).'\\'.$name); $this->loadProvider($serviceProviderClass); } } } } /** * @param $providerFullName */ private function loadProvider($providerFullName) { App::register($providerFullName); } } ================================================ FILE: src/Traits/api/Service.php ================================================ userId = ''; $this->error = 500; if ( empty( $token ) ) { //参数错误 $this->error = '请填写token'; return FALSE; } else { $MerUserDevice = MerUserDeviceService::instance(); $deviceData = $MerUserDevice->getByToken( $token, $device ); if ( empty( $deviceData ) ) { //数据未找到 $this->error = '认证失败'; $this->errCode = 403; return FALSE; } $this->userId = $deviceData['user_id']; return TRUE; } } public function validParam( $param, $rule = 'required' ) { $this->error = ''; $this->errCode = 500; switch ( $rule ) { case 'required' : if ( empty( trim( $param ) ) ) { $this->error = "$param 不能为空"; return FALSE; } } return TRUE; } } ================================================ FILE: src/Traits/service/GridTable.php ================================================ getModel()->find( $id ); } /** * 添加数据 * * @param $data * * @return array */ public function insert( $data ) { try { if ( empty( $data ) ) { throw new \Exception( '数据不能为空' ); } $id = $this->getModel()->insertGetId( $data ); return ajax_arr( '创建成功' , 0 , [ 'id' => $id ] ); } catch ( \Exception $e ) { return ajax_arr( $e->getMessage() , 500 ); } } /** * 根据ID 更新数据 * * @param $id * @param $data * * @return array */ public function update( $id , $data ) { try { $rows = $this->getModel()->where( 'id' , $id )->update( $data ); if ( $rows == 0 ) { return ajax_arr( "未更新任何数据" , 0 ); } return ajax_arr( "更新成功" , 0 ); } catch ( \Exception $e ) { return ajax_arr( $e->getMessage() , 500 ); } } /** * 根据ID 删除数据 * * @param $ids //string | array * * @return array */ public function destroy( $ids ) { try { $rows = $this->getModel()->destroy( $ids ); if ( $rows == 0 ) { return ajax_arr( "未删除任何数据" , 0 ); } return ajax_arr( "成功删除{$rows}行数据" , 0 ); } catch ( \Exception $e ) { return ajax_arr( $e->getMessage() , 500 ); } } } ================================================ FILE: src/Traits/service/Instance.php ================================================ singleton($class_name, function ($app) use($class_name) { $service = new $class_name; if(isset($service->model_class) && class_exists($service->model_class)){ $service->model = new $service->model_class; } return $service; }); return resolve($class_name); } protected function getModel(){ return self::instance()->model; } protected function setModel(Model $model){ self::instance()->model = $model; } } ================================================ FILE: src/Traits/service/Scope.php ================================================ * Date: 2017/9/18 * Time: 18:06 */ trait Scope{ public function scopeModule($query , $param = '' ){ if( $param !== '') return $query->where('module',$param); } public function scopeStatus($query , $param = ''){ if($param !== '') return $query->where('status',$param); } public function scopeKeyword($query , $param = ''){ if($param) return $query->where('keyword' , 'like' , "%{$param}%"); } public function scopeGetAll($query , $params = ['getAll'=>false]){ if(!$params['getAll']) return $query->skip(($params['page']-1) * $params['pageSize'] )->take($params['pageSize'] ); } } ================================================ FILE: src/Traits/service/ScopeMer.php ================================================ * Date: 2017/9/21 * Time: 09:43 */ namespace Smart\Traits\Service; trait ScopeMer{ public function scopeMerId($query , $param = ''){ if($param) return $query->where('mer_id' , $param); } } ================================================ FILE: src/Traits/service/TreeTable.php ================================================ * @version 1.0 @ 2016-09-08 */ trait TreeTable { //取等级 public function getLevel( $pid ) { if ( empty( $pid ) ) { return 1; } $data = $this->getById( $pid ); if ( empty( $data ) ) { return 1; } return $data['level'] + 1; } /** * 根据id 查询 * * @param $id * * @return mixed */ public function getById( $id ) { return $this->getModel()->find( $id ); } /** * 根据pid 查询 * * @param $pid * * @return mixed */ public function getByPid( $pid ) { return $this->getModel()->where( 'pid', $pid )->get()->toArray(); } //转换树key private function treeToArray( $arr, $key ) { $ret = []; foreach ( $arr as $val ) { if ( isset( $val[$key] ) ) { $val[$key] = $this->treeToArray( $val[$key] , $key ); } $ret[] = $val; } return $ret; } /** * * 添加数据 * * @param $data * * @return array */ public function insert( $data ) { try { if ( empty( $data ) ) { throw new \Exception( '数据不能为空' ); } $data['level'] = $this->getLevel( $data['pid'] ); $id = $this->getModel()->insertGetId( $data ); return ajax_arr( '创建成功', 0, [ 'id' => $id ] ); } catch ( \Exception $e ) { return ajax_arr( $e->getMessage(), 500 ); } } /** * 根据ID 更新数据 * * @param $id * @param $data * * @return array */ public function update( $id, $data ) { try { if ( $data['pid'] == $id ) { throw new \Exception( '不能选自己做上级' ); } $data['level'] = $this->getLevel( $data['pid'] ); $rows = $this->getModel()->where( 'id', $id )->update( $data ); if ( $rows == 0 ) { return ajax_arr( "未更新任何数据", 0 ); } return ajax_arr( "更新成功", 0 ); } catch ( \Exception $e ) { return ajax_arr( $e->getMessage(), 500 ); } } /** * 根据ID 删除数据 * * @param $ids //string | array * * @return array */ public function destroy( $ids ) { try { //查看是否有下级数据 $childrenData = $this->getByPid( $ids ); if ( ! empty( $childrenData ) ) { throw new \Exception( '还有下级数据,不能删除' ); } //删除数据 $rows = $this->getModel()->destroy( $ids ); if ( $rows == 0 ) { return ajax_arr( '未删除任何数据', 0 ); } return ajax_arr( "成功删除{$rows}行数据", 0 ); } catch ( \Exception $e ) { return ajax_arr( $e->getMessage(), 500 ); } } public function getFamilyId( $param ) { $default = [ 'field' => [ '*' ], 'pid' => 0 , 'status' => 1, 'childrenKey' => 'children', 'withSelf' => TRUE, ]; $param = extend( $default, $param ); $this->getModel()->field( $param['field'] ); if ( $param['status'] !== '' ) { $this->getModel()->where( 'status', $param['status'] ); } $this->getModel()->order( 'level ASC , sort ASC ' ); $data = $this->getModel()->select(); //echo $this->getModel()->getLastSql(); $result = []; $index = []; foreach ( $data as $row ) { if ( $row['pid'] == $param['pid'] ) { $result[ $row['id'] ] = $row; $index[ $row['id'] ] = &$result[ $row['id'] ]; } else { $index[ $row['pid'] ][ $param['childrenKey'] ][ $row['id'] ] = $row; $index[ $row['id'] ] = &$index[ $row['pid'] ][ $param['childrenKey'] ][ $row['id'] ]; } } $idsArr = $this->_getFamilyId( $result, $param['childrenKey'] ); if ( $param['withSelf'] ) { $idsArr[] = $param['pid']; } return $idsArr; } function _getFamilyId( $result, $childrenKey = 'children' ) { $arr = []; foreach ( $result as $id => $item ) { $arr[] = $id; if ( isset( $item[ $childrenKey ] ) ) { $arr = array_merge( $arr, $this->_getFamilyId( $item[ $childrenKey ], $childrenKey ) ); } } return $arr; } } ================================================ FILE: templates/generate/api/api.txt ================================================ * @version 2.0 , {date} */ use App\Api\Service\v1\ApiService; class {name}Service extends ApiService { use \Smart\Traits\Service\Instance; //允许的请求方式 public $allowRequestMethod = [ 'get' => 'GET - 取{desc}', 'post' => 'POST - 设置{desc}', 'put' => 'PUT - 设置{desc}', 'delete' => 'DELETE - 设置{desc}' ]; /** * 传参 如: * 'title' => ['标题' , '默认值' , '验证方式'] //验证方式可选 * 'status' => ['状态' , 1 , ["0" => '禁用' , 1 => '启用'] ] */ public $defaultParams = [ 'get' => [ {params} ], 'post' => [ {params} ], 'put' => [ {params} ], 'delete' => [ {params} ] ]; /** * 返回结果示例 如: * * 'user_id' => '用户ID', * 'icon' => ['头像' , 'formatIcon'] , //第二个值为格式化方法 */ public $defaultResponse = [ 'get' => [], 'post' => [], 'put' => [], 'delete' => [] ]; /** * 接口响应方法 * * @return array */ public function response() { {authUser} if ( ! $this->validParams() ) { return api_result( $this->error, 500 ); } //处理业务 switch ( request()->method() ) { case 'GET' : $data = $this->get(); $data = $this->formatData( $data ); return api_result( '查询成功' , 0 , [ 'rows' => $data ] ); case 'POST' : return $this->post(); case 'PUT' : return $this->put(); case 'DELETE' : return $this->delete(); default : return api_result( '未知请求类型' , 500 ); } } /** * get 的响应方法 * * @return array|number */ public function get() { return [ ['id' => 1 , 'text' => '测试数据'] ]; } /** * post 的响应方法 * * @return array */ public function post() { $data = []; return api_result( 'post 成功', 0 , $data ); } /** * post 的响应方法 * * @return array */ public function put() { $data = []; return api_result( 'put 成功', 0 , $data ); } /** * post 的响应方法 * * @return array */ public function delete() { $data = []; return api_result( 'delete 成功', 0 , $data ); } } ================================================ FILE: templates/generate/api/auth_user.txt ================================================ //验证用户 if ( ! $this->validToken() ) { return api_result( $this->error, $this->errCode ); } ================================================ FILE: templates/generate/api/params/api_token.txt ================================================ 'api_token' => ['用户Token' , '' , PARAM_REQUIRED ] , ================================================ FILE: templates/generate/api/params/goodsId.txt ================================================ 'goodsId' => ['商品ID' , '' , PARAM_REQUIRED ] , ================================================ FILE: templates/generate/api/params/merId.txt ================================================ 'merId' => ['商户ID' , '' , PARAM_REQUIRED] , ================================================ FILE: templates/generate/api/params/orderId.txt ================================================ 'orderId' => ['订单ID' , '' , PARAM_REQUIRED] , ================================================ FILE: templates/generate/api/params/page.txt ================================================ 'page' => ['页码' , '1' , PARAM_POSITIVE] , ================================================ FILE: templates/generate/api/params/pageSize.txt ================================================ 'pageSize' => ['每页行数' , '6' , PARAM_POSITIVE] , ================================================ FILE: templates/generate/api/params/phone.txt ================================================ 'phone' => ['手机号' , '' , PARAM_REQUIRED] , ================================================ FILE: templates/generate/api/params/status.txt ================================================ 'status' => ['状态' , '' , [ "0" => "禁用" , "1" => "启用"] ] , ================================================ FILE: templates/generate/system/component/editor/controller/editor_decode.txt ================================================ $data['{field}'] = htmlspecialchars_decode( $data['{field}'] ); ================================================ FILE: templates/generate/system/component/editor/controller/editor_js.txt ================================================ $this->_addJsLib( 'node_modules/kindeditor/kindeditor-all-min.js' ); $this->_addJsLib( 'node_modules/kindeditor/lang/zh-CN.js' ); ================================================ FILE: templates/generate/system/component/editor/controller/editor_uri.txt ================================================ 'upload_ke' => full_uri( '{moduleLower}/{func}/upload' , ['is_ke' => 1 ] ), ================================================ FILE: templates/generate/system/component/editor/js/editor_clear.txt ================================================ self.config['{field}'].html(''); ================================================ FILE: templates/generate/system/component/editor/js/editor_init.txt ================================================ this.config['{field}'] = KindEditor.create('textarea[name="{field}"]' , KE_OPTIONS ); ================================================ FILE: templates/generate/system/component/editor/js/editor_reload.txt ================================================ self.config['{field}'].html( row.{field} ); ================================================ FILE: templates/generate/system/component/editor/js/editor_upload_uri.txt ================================================ KE_OPTIONS.uploadJson = Param.uri.uploadKE ; ================================================ FILE: templates/generate/system/component/field/view/editor.txt ================================================
        ================================================ FILE: templates/generate/system/component/field/view/input.txt ================================================
        ================================================ FILE: templates/generate/system/component/field/view/radio.txt ================================================
        ================================================ FILE: templates/generate/system/component/field/view/select.txt ================================================
        ================================================ FILE: templates/generate/system/component/field/view/select2.txt ================================================
        ================================================ FILE: templates/generate/system/component/field/view/upload.txt ================================================
        ================================================ FILE: templates/generate/system/component/select2/controller/select2_css.txt ================================================ $this->_addCssLib( 'node_modules/select2/dist/css/select2.min.css' ); ================================================ FILE: templates/generate/system/component/select2/controller/select2_js.txt ================================================ $this->_addJsLib( 'node_modules/select2/dist/js/select2.min.js' ); $this->_addJsLib( 'node_modules/select2/dist/js/i18n/zh-CN.js' ); ================================================ FILE: templates/generate/system/component/select2/controller/select2_uri.txt ================================================ 'searchUser' => full_uri( '{module}/MerUser/search' ), //自行修改 ================================================ FILE: templates/generate/system/component/select2/js/select2_clear.txt ================================================ $('.select2me').val(null).trigger('change'); ================================================ FILE: templates/generate/system/component/select2/js/select2_init.txt ================================================ $('.select2me').select2({ allowClear: true , ajax: { url: Param.uri.searchUser , //修改为对应的uri dataType: 'json', delay: 250, data: function (params) { return { keyword: params.term, // 搜索的关键字 page: params.page , pageSize : 10 }; }, processResults: function (data, params) { params.page = params.page || 1; //重组数据为 [{id:'' , text:''}] 格式 data.rows.map(function (row) { row['text'] = row.nickname + ' ('+ row.phone +')'; }); return { results: data.rows, pagination: { //翻页的处理 more: (params.page * params.pageSize) < data.total } }; }, cache: true }, minimumInputLength: 2 //最少输入字数 }); ================================================ FILE: templates/generate/system/component/select2/js/select2_set.txt ================================================ //select2 reload数据 请自行修改 var userData = [{ id : row.id , text : row.nickname + '('+ row.phone +')' }]; var userOptions = form_options_rows( userData , { field : 'text'} ) ; $('.select2me').html(userOptions).val(row.user_id).trigger('change'); ================================================ FILE: templates/generate/system/component/table_type/controller/grid_js.txt ================================================ $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' ); ================================================ FILE: templates/generate/system/component/table_type/controller/grid_read.txt ================================================ /** * 读取 * @return response->Json */ public function read(Request $request) { $config = [ 'status' => $request->input( 'status', '' ), 'keyword' => $request->input( 'keyword', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ]; $data['rows'] = $this->service->getByCond( $config ); $config['count'] = TRUE; $data['total'] = $this->service->getByCond( $config ); return json(ajax_arr( '查询成功', 0, $data ) ); } ================================================ FILE: templates/generate/system/component/table_type/controller/tree_grid_js.txt ================================================ $this->_addJsLib( 'static/plugins/dmg-ui/TreeGrid.js' ); ================================================ FILE: templates/generate/system/component/table_type/controller/tree_grid_read.txt ================================================ /** * 读取 * @return response->Json */ public function read(Request $request) { $config = [ 'status' => $request->input( 'status', '' ), 'keyword' => $request->input( 'keyword', '' ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ]; $data['rows'] = $this->service->getByCond( $config ); return json( ajax_arr( '查询成功', 0, $data ) ); } ================================================ FILE: templates/generate/system/component/table_type/js/grid_id.txt ================================================ dataGrid ================================================ FILE: templates/generate/system/component/table_type/js/grid_init.txt ================================================ //初始化grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query , '' , uri); $('#dataGrid').TableGrid({ uri : Param.uri.read , selectAll : true , param : Param.query , rowStyle : function (row) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function ( rows , settings ) { var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if ( oldUri == uri) { return false ; } var params = $.getUrlParams(window.location.href); history.pushState(params , '' , oldUri); history.replaceState(settings.param , '' , uri); } }); } ================================================ FILE: templates/generate/system/component/table_type/js/grid_plugin.txt ================================================ TableGrid ================================================ FILE: templates/generate/system/component/table_type/js/tree_grid_id.txt ================================================ treeGrid ================================================ FILE: templates/generate/system/component/table_type/js/tree_grid_init.txt ================================================ //初始化tree grid initGrid : function () { var self = this; var uri = Param.uri.this + '?' + $.param(Param.query); history.replaceState(Param.query , '' , uri); $('#treeGrid').TreeGrid({ uri : Param.uri.read , field : 'text', //显示箭头的字段 param : Param.query , //查询参数 rowStyle : function (row) { if ( row.status == 0 ) { return 'warning'; } } , loadSuccess : function ( rows , settings ) { var options = ''; options += form_options_rows( rows , settings ); $('select[name="pid"]').html(options); var oldUri = window.location.href; var uri = Param.uri.this + '?' + $.param(settings.param); if ( oldUri == uri) { return false ; } var params = $.getUrlParams(window.location.href); history.pushState(params , '' , oldUri); history.replaceState(settings.param , '' , uri); } }); } ================================================ FILE: templates/generate/system/component/table_type/js/tree_grid_plugin.txt ================================================ TreeGrid ================================================ FILE: templates/generate/system/component/table_type/service/grid.txt ================================================ /** * 根据条件查询 * * @param $param * * @return array|number */ public function getByCond( $param ) { $default = [ 'field' => [ '*'], 'keyword' => '', 'status' => '', 'page' => 1, 'pageSize' => 10, 'sort' => 'id', 'order' => 'DESC', 'count' => FALSE, 'getAll' => FALSE ]; $param = extend( $default, $param ); $model = $this->getModel()->keyword($param['keyword'])->status($param['status']); if ( $param['count'] ) { return $model->count(); } if($param['getAll'] === FALSE){ $model = $model->get()->forPage($param['page'] , $param['pageSize'])->values(); }else{ $model = $model->get(); } $data = $model->toArray(); return $data ? $data : [ ]; } ================================================ FILE: templates/generate/system/component/table_type/service/grid_trait.txt ================================================ //引入 GridTable trait use \Smart\Traits\Service\GridTable; ================================================ FILE: templates/generate/system/component/table_type/service/tree_grid.txt ================================================ //根据条件查询 public function getByCond( $param ) { $default = [ 'field' => ['*' ], 'pid' => 0, 'status' => '', 'key' => 'children' ]; $param = extend( $default , $param ); $data = $this->getModel()->status($param['status'])->orderBy('level' , 'ASC')->orderBy('sort' , 'ASC')->get($param['field'])->toArray(); $result = [ ]; $index = [ ]; foreach ( $data as $row ) { if ( $row['pid'] == $param['pid'] ) { $result[ $row['id'] ] = $row; $index[ $row['id'] ] = &$result[ $row['id'] ]; } else { $index[ $row['pid'] ][ $param['key'] ][ $row['id'] ] = $row; $index[ $row['id'] ] = &$index[ $row['pid'] ][ $param['key'] ][ $row['id'] ]; } } return $this->treeToArray( $result, $param['key'] ); } ================================================ FILE: templates/generate/system/component/table_type/service/tree_grid_trait.txt ================================================ //引入 TreeTable trait use \Smart\Traits\Service\TreeTable; ================================================ FILE: templates/generate/system/component/table_type/view/grid.txt ================================================
        {tableTh}
         
        ================================================ FILE: templates/generate/system/component/table_type/view/tree_grid.txt ================================================
        {tableTh}
         
        ================================================ FILE: templates/generate/system/component/traits/instance_trait.txt ================================================ //引入 Instance use \Smart\Traits\Service\Instance; ================================================ FILE: templates/generate/system/component/upload/controller/upload_js.txt ================================================ $this->_addCssLib('node_modules/jcrop-0.9.12/css/jquery.Jcrop.min.css'); $this->_addJsLib('node_modules/jcrop-0.9.12/js/jquery.Jcrop.min.js'); $this->_addJsLib( 'static/plugins/dmg-ui/Uploader.js' ); ================================================ FILE: templates/generate/system/component/upload/controller/upload_param.txt ================================================ //上传参数 $this->_addParam('uploadParam' , [ 'width' => 300 , 'height' => 300 , 'saveAsAlbum' => TRUE, 'albumTag' => '默认相册', ]); //相册参数 $this->_addParam( 'albumParam', [ 'defaultTag' => '默认相册', 'pageSize' => 12, ] ); ================================================ FILE: templates/generate/system/component/upload/controller/upload_uri.txt ================================================ 'upload' => full_uri( '{moduleLower}/{funcLower}/upload' ), 'albumCatalog' => full_uri( '{moduleLower}/{funcLower}/read_album_catalog' ), 'album' => full_uri( '{moduleLower}/{funcLower}/read_album' ), ================================================ FILE: templates/generate/system/component/upload/js/upload_button.txt ================================================ //上传按钮 $('#{field}UploadBtn').Uploader({ uri : Param.uri.upload , //上传文件 param : Param.uploadParam , album : true , albumUri : Param.uri.album , albumCatalogUri : Param.uri.albumCatalog , albumParam : Param.albumParam , onSuccess : function ( ret ) { tips.success(ret.msg); if ( ret.code == 0 ) { setImgPreview.set('{field}' , ret.data.savePath); } }, onChooseAlbum : function( uri ){ setImgPreview.set('{field}' , uri ); } }); ================================================ FILE: templates/generate/system/component/upload/js/upload_preview_clear.txt ================================================ setImgPreview.clear('{field}'); ================================================ FILE: templates/generate/system/component/upload/js/upload_preview_set.txt ================================================ setImgPreview.set('{field}' , row.{field}); ================================================ FILE: templates/generate/system/component/view_type/js/modal.txt ================================================ //显示 modal setPortletShow : function ( type ) { var $addEditModal = $('#addEditModal') ; $addEditModal.modal('show'); if ( type == 'add' ) { $addEditModal.find('.caption-subject').html('新增 ' + Param.pageTitle ); } else if ( type == 'edit' ) { $addEditModal.find('.caption-subject').html('编辑 ' + Param.pageTitle ); } }, //关闭 modal setPortletHide : function () { $('#addEditModal').modal('hide') ; }, ================================================ FILE: templates/generate/system/component/view_type/js/portlet.txt ================================================ //显示 portlet setPortletShow : function ( type ) { var $tablePortlet = $('#tablePortlet') ; var $addEditPortlet = $('#addEditPortlet'); $tablePortlet.slideUp('fast'); if ( type == 'add' ) { if ( !$addEditPortlet.hasClass('blue') ) { $addEditPortlet.removeClass('green-meadow').addClass('blue'); } $addEditPortlet.find('.caption-subject').html('新增 ' + Param.pageTitle ); } else if ( type == 'edit' ) { if ( !$addEditPortlet.hasClass('green-meadow') ) { $addEditPortlet.removeClass('blue').addClass('green-meadow'); } $addEditPortlet.find('.caption-subject').html('编辑 ' + Param.pageTitle ); } //$('#data-table-portlet').slideUp('fast'); $addEditPortlet.show(); }, //关闭 portlet setPortletHide : function () { $('#tablePortlet').slideDown('fast') ; $('#addEditPortlet').slideUp('fast'); }, ================================================ FILE: templates/generate/system/component/view_type/view/modal.txt ================================================ ================================================ FILE: templates/generate/system/component/view_type/view/portlet.txt ================================================ ================================================ FILE: templates/generate/system/controller.txt ================================================ * @version 2.0 , {date} */ use Facades\Smart\Service\ServiceManager; use Illuminate\Http\Request; use App\{module}\Service\{func}Service; use App\{module}\Controllers\{module}; class {func} extends {module} { //页面入口 public function index(Request $request) { $this->_init( '{funcName}' ); //uri $this->_addParam( 'uri', [ {uploadUri} {editorUri} {select2Uri} ] ); //查询参数 $this->_addParam( 'query', [ 'keyword' => $request->input( 'keyword', '' ), 'status' => $request->input( 'status', '' ), 'page' => $request->input( 'page', 1 ), 'pageSize' => $request->input( 'pageSize', 10 ), 'sort' => $request->input( 'sort', 'id' ), 'order' => $request->input( 'order', 'DESC' ), ] ); {uploadParam} //其他参数 $this->_addParam( [ 'defaultRow' => $this->service->getDefaultRow() , 'status' => $this->service->status , ] ); //需要引入的 css 和 js {select2Css} {select2Js} {uploadJs} {editorJs} {gridJs} {treeGridJs} return $this->_displayWithLayout('{module}::{funcNameLower}.index'); } {gridRead} {treeGridRead} } ================================================ FILE: templates/generate/system/js.txt ================================================ /** * {funcName} JS * * @author MR.Z * @version 2.0 , {date} */ var {funcName} = { token : $('input[name=_token]').val(), config : {} , init : function () { //重新设置菜单 if ( !empty( Param.uri.menu ) ) { Layout.setSidebarMenuActiveLink('set' , 'a[data-uri="'+ Param.uri.menu +'"]'); } //初始化ajax 提示框 loading.initAjax(); //初始化页面按钮 this.initBtn(); //初始化查询form this.initSearchForm(); //初始化数据表 this.initGrid(); {editorUploadUri} {editorInit} } , //初始化查询form initSearchForm : function () { var $searchForm = $('#searchForm'); $searchForm.reloadForm(Param.query); //查询按钮 $('#searchBtn').on('click' , function (e) { e.preventDefault(); var ${gridId}{treeGridId} = $('#{gridId}{treeGridId}'); var param = ${gridId}{treeGridId}.{gridPlugin}{treeGridPlugin}('getParam'); param = $.extend({} , param , $('#searchForm').serializeObject() ); param.page = 1; ${gridId}{treeGridId}.{gridPlugin}{treeGridPlugin}('setParam' , param); ${gridId}{treeGridId}.{gridPlugin}{treeGridPlugin}('reload'); }); } , {portlet} {modal} //初始化各种按钮 initBtn : function () { var self = this; //打开添加框 $('#addNewBtn').on('click' , function (e) { e.preventDefault(); self.setPortletShow('add'); var $form = $('#addEditForm'); $form.reloadForm( Param.defaultRow ); {uploadPreviewClear} {editorClear} {select2Clear} $form.attr('action' , Param.uri.insert ); }); //编辑按钮 $(document).on('click' , '.editBtn' , function (e) { e.preventDefault(); self.setPortletShow('edit'); var id = $(this).data('id'); var row = $('#{gridId}{treeGridId}').{gridPlugin}{treeGridPlugin}('getRow' , id); var $form = $('#addEditForm'); $form.reloadForm( row ); {uploadPreviewSet} {editorReload} {select2Set} $form.attr('action' , Param.uri.update + '/' +row.id ); }); //删除一行 $(document).on('click' , '.destroyBtn' , function (e) { e.preventDefault(); var id = $(this).data('id'); self.delData( id ); }); $('#destroySelectBtn').on('click' , function (e) { e.preventDefault(); var ids = $('.checker:checked').serializeJSON().selectChecker; if ( empty( ids ) ) { tips.error('请选择要删除的记录'); return ; } self.delData( ids ); }); //提交添加编辑窗 $('#submitFormBtn').on('click' , function (e) { e.preventDefault(); var $form = $('#addEditForm'); if( $form.validForm() ) { var data = $form.serializeObject(); $.post( $form.attr('action') , data ) .fail( function(res){ tips.error( res.responseText ); }) .done( function( res ){ if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if( res.code != 0 ){ tips.error( res.msg ); } else { tips.success( res.msg ); $('#{gridId}{treeGridId}').{gridPlugin}{treeGridPlugin}('reload'); self.setPortletHide(); } }); } }); //关闭添加编辑窗 $('#closePortletBtn').on('click' , function (e) { e.preventDefault(); self.setPortletHide(); }); {uploadButton} {select2Init} } , delData : function ( ids ) { var self = this ; var data = { ids : ids, _token : this.token }; sure.init('是否删除?' , function () { $.post( Param.uri.destroy , data ) .fail( function(res){ tips.error( res.responseText ); }) .done(function (res) { if ( res.code == 1001 ) { //需要登录 tips.error('请先登录'); } else if( res.code != 0 ){ tips.error( res.msg ); } else { tips.success( res.msg ); $('#{gridId}{treeGridId}').{gridPlugin}{treeGridPlugin}('reload'); } }); }); }, {gridInit} {treeGridInit} }; //pop state 事件 window.onpopstate = function (event) { if ( event && event.state ) { $('#searchForm').reloadForm( event.state ); var ${gridId}{treeGridId} = $('#{gridId}{treeGridId}'); ${gridId}{treeGridId}.{gridPlugin}{treeGridPlugin}('setParam' , event.state); ${gridId}{treeGridId}.{gridPlugin}{treeGridPlugin}('reload'); } }; ================================================ FILE: templates/generate/system/model.txt ================================================ * @version 2.0 , {date} */ use Illuminate\Database\Eloquent\Model; class {func} extends Model { public $table = '{tableName}'; public $primaryKey = 'id'; public $timestamps = FALSE; use \Smart\Traits\Service\Scope; } ================================================ FILE: templates/generate/system/service.txt ================================================ * @version 2.0 {date} */ use App\{module}\Models\{func}; use Smart\Service\BaseService; class {func}Service extends BaseService { {gridTrait} {treeGridTrait} {instanceTrait} protected $model_class = {func}::class; //状态 public $status = [ 0 => '禁用', 1 => '启用', ]; //取默认值 function getDefaultRow() { return [ {fieldDefault} ]; } {grid} {treeGrid} } ================================================ FILE: templates/generate/system/view.txt ================================================ @extends('{module}::public.layout') @section('content') {!! csrf_field() !!}
        {grid} {treeGrid}
        {portlet}
        {modal} @stop ================================================ FILE: templates/module/config.txt ================================================ [ ], ]; ================================================ FILE: templates/module/controllers/index.txt ================================================ middleware('auth'); } /** * Show the application dashboard. * * @return \Illuminate\Http\Response */ public function index() { return view('{module}::Index.index'); } } ================================================ FILE: templates/module/controllers/module.txt ================================================ middleware('auth'); } public function _init($pageTitle = '新页面'){ parent::_init($pageTitle); $SysFuncService = ServiceManager::make( SysFuncService::class ); // var_dump($SysFuncService->getMenuByRoles(1,'backend')); $this->user = Auth::user(); $this->_addData( 'menuData', //暂定超级管理员 $SysFuncService->getMenuByRoles( Auth::id(), $this->module ) ); $this->_addData( 'user', $this->user ); } public function _displayWithLayout( $view = 'index'){ return view($view)->with($this->data)->with('js' , $this->_makeJs())->with('css' , $this->_makeCss()); } } ================================================ FILE: templates/module/providers/mainproviders.txt ================================================ strtolower('{module}' ), 'namespace' => 'App\\{module}\\Controllers' , 'middleware'=> ['web'] ],function(Router $router ){ $router->get('index/index' , 'IndexController@index'); }); ================================================ FILE: templates/module/views/Index/index.txt ================================================ @extends('layouts.app') @section('content')
        Dashboard
        Wellcome to {module}!!!
        @endsection ================================================ FILE: tests/CreatesApplication.php ================================================ make(Kernel::class)->bootstrap(); return $app; } } ================================================ FILE: tests/IndexTest.php ================================================ * Date: 2017/11/10 * Time: 15:12 */ use Tests\TestCase; use Laravel\Dusk\Browser; class IndexCase extends TestCase{ public function setUp(){ parent::setUp(); $this->be( \Smart\Models\SysUser::first(),'admin'); } public function testIndex(){ $this->browse(function (Browser $browser) { $browser->loginAs(\Smart\Models\SysUser::first())->visit('/') ->assertSee('Laravel'); }); // $this->visit('backend/index/index')->assertResponseOk()->see("首页"); } } ================================================ FILE: tests/Simulator.php ================================================ assertTrue(true); } public function setUp() { parent::setUp(); $this->be( SysUser::first(),'admin'); } public function testIndex(){ //$this->user = factory(SysUser::class )->create(); $this->browse(function (Browser $browser){ $browser->loginAs(\Smart\Models\SysUser::first())->visit('backend/simulator/index')->assertSee('接口模拟器') ->press('#selectActionBtn') ->pause(1000) ->press('#submitBtn') ->pause(1000) ->assertSee('"msg":"查询成功"'); }); } } ================================================ FILE: tests/SysFuncTest.php ================================================ assertTrue(true); } public function setUp() { parent::setUp(); $this->be( \Smart\Models\SysUser::first(),'admin'); } public function testIndex(){ //$this->user = factory(SysUser::class )->create(); $this->browse(function (Browser $browser) { $browser->loginAs(\Smart\Models\SysUser::first())->visit('backend/sysfunc/index')->assertSee('系统功能'); // $browser->visit('backend/sysfunc/read?status=1')->seeJson(['code' => 0 , 'msg' => '查询成功' ]); }); } public function testCreate(){ $this->browse(function (Browser $browser) { $browser->loginAs(\Smart\Models\SysUser::first())->visit('backend/sysfunc/index')->press('#addNewBtn') ->pause(1000)->whenAvailable('.modal', function ($modal) { $modal->assertSee('新建系统功能'); }); $browser->with('.modal', function ($modal) { $modal->type('name','test1') ->type( 'uri' ,'backend/test1/index') ->select('pid' ,0) ->type('sort' ,1 ) ->radio('status' ,1 ) ->radio('is_menu' ,1 ) ->press('保存'); })->waitForText('创建成功')->assertSee('创建成功'); }); } public function testDelete(){ $this->browse(function( Browser $browser){ $browser->loginAs(\Smart\Models\SysUser::first())->visit('backend/sysfunc/index')->waitForText('test1') ->click('.destroyBtn')->whenAvailable('.fit-confirm' , function ($modal){ $modal->assertSee('是否删除'); }); $browser->with('.fit-confirm' , function($modal){ $modal->press('#fit-confirm-ok_btn'); })->waitForText('成功删除')->assertSee('成功删除'); }); } public function testPermission(){ $this->browse(function( Browser $browser){ $browser->loginAs(\Smart\Models\SysUser::first())->visit('backend/sysfunc/index')->assertSee('系统功能')->pause(1000) ->click(".privilegeBtn") ->whenAvailable( '#privilegeModal' , function( $modal){ $modal->assertSee('权限'); })->with( '.modal' , function ($modal){ $modal->check('name[]')->press('#submitPrivilegeFormBtn'); })->waitForText('成功')->assertSee('成功'); }); } } ================================================ FILE: tests/SysUserTest.php ================================================ assertTrue(true); } public function setUp() { parent::setUp(); $this->be( SysUser::first(),'admin'); } public function testIndex(){ //$this->user = factory(SysUser::class )->create(); $this->browse(function (Browser $browser){ $browser->loginAs(\Smart\Models\SysUser::first())->visit('backend/sysuser/index')->assertSee('系统用户'); }); } public function testRead(){ $count = SysUser::where('status','=' , 1)->count(); $this->browse(function (Browser $browser) use ($count) { // $browser->visit( 'backend/sysuser/read?status=1')->seeJson(['code'=>0,'msg'=>'查询成功' , 'total' => $count ]); }); } } ================================================ FILE: tests/TestCase.php ================================================ make(Kernel::class)->bootstrap(); return $app; } public function setUp(){ parent::setUp(); $adminConfig = require __DIR__ . '/config/backend.php'; $this->app['config']->set('database.default', 'mysql'); $this->app['config']->set('database.connections.mysql.host', env('MYSQL_HOST', '127.0.0.1')); $this->app['config']->set('database.connections.mysql.database', 'laraveltest'); $this->app['config']->set('database.connections.mysql.username', 'root'); $this->app['config']->set('database.connections.mysql.password', 'root'); $this->app['config']->set('app.key', 'AckfSECXIvnK5r28GVIWUAxmbBSjTsmF'); $this->app['config']->set('filesystems', require __DIR__.'/config/filesystems.php'); $this->app['config']->set('admin', $adminConfig); foreach (array_dot(array_get($adminConfig, 'auth'), 'auth.') as $key => $value) { $this->app['config']->set($key, $value); } $this->artisan('vendor:publish' , ['--provider' => 'Smart\SmartServiceProvider']); // Schema::defaultStringLength(191); $this->artisan('smart:install'); //数据库安装 //TODO //加载路由 require __DIR__ . '/router/routes.php'; require __DIR__ . '/factories/factory.php'; } } ================================================ FILE: tests/config/backend.php ================================================ '/', 'projectName' => 'laravel-smart', 'sessionName' => 'backend_session', 'directory' => ['Http/Controllers/Api' , 'Http/Controllers/backend' , 'Http/Controllers/mp' , 'Service' , 'Models'], 'superAdminId' => 1, 'defaultAdmin' => 'sys_admin', 'defaultPwd' => '123123', 'defaultEmail' => 'admin@admin.com', 'areaCachePrefix' => 'backend_area', 'secret' => 'laravel-smart-secret', 'timeGap' => 300, 'JPush' => [ 'appKey' => 'xxx' , 'secret' => 'xxx' , ] , 'image' => [ 'imgUri' => '', 'uploadType' => 'local', ], 'sms' => [ 'name' => 'alidayu', ], 'api' => [ 'apiVersion' => 'v1', ], //TESTS 'route' => [ 'prefix' => 'admin', ], 'auth' => [ 'guards' => [ 'admin' => [ 'driver' => 'session', 'provider' => 'admin', ], ], 'providers' => [ 'admin' => [ 'driver' => 'eloquent', 'model' => Smart\Models\SysUser::class, ], ] ] ]; ================================================ FILE: tests/config/filesystems.php ================================================ env('FILESYSTEM_DRIVER', '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' => env('FILESYSTEM_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. | | Supported Drivers: "local", "ftp", "s3", "rackspace" | */ 'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], 's3' => [ 'driver' => 's3', 'key' => env('AWS_KEY'), 'secret' => env('AWS_SECRET'), 'region' => env('AWS_REGION'), 'bucket' => env('AWS_BUCKET'), ], '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, ], ], ]; ================================================ FILE: tests/factories/factory.php ================================================ define(App\User::class, function (Faker $faker) { static $password; return [ 'name' => $faker->name, 'email' => $faker->unique()->safeEmail, 'password' => $password ?: $password = bcrypt('secret'), 'remember_token' => str_random(10), ]; }); ================================================ FILE: tests/router/routes.php ================================================ config('backend.route.prefix'), 'namespace' => 'Tests\Controllers', 'middleware' => ['web', 'admin'], ], function ($router) { });