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[] = ' ' . $val . ' ';
}else{
$html[] = ' ' . $val . ' ';
}
}
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[] = ' ' . $item[$val] . ' ';
}else{
$html[] = ' ' . $item[$val] . ' ';
}
}
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 .= "$val ";
}
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 .= ' ' .
$item[$val] . ' ';
}
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('%s ', $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 .= '' . $r[$textField] . ' ';
}
$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('' + field + ' (' + common + ')' + ' ');
}
$('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 = ' ' + value.name + ' ';
$('#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( '' + row.version + '/' + ' (' + row.text + ')' + ' ' );
}
}
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( '' +
row.directory + '/' + row.action + ' (' + row.text + ')' + ' ' );
}
}
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 = '';
$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 = '';
for ( var i = 0 ; i < Param.testToken.length ; i ++ ) {
var user = Param.testToken[ i ];
html += '' + user.api_token + ' (' + user.username + ' - ' + user.phone + ' )' + ' ';
}
html += ' ';
$token.after( html );
$token.remove();
}
if ( $merId.length > 0 ) {
html = '';
for ( var i = 0 ; i < Param.testMer.length ; i ++ ) {
var mer = Param.testMer[ i ];
html += '' + mer.id + ' (' + mer.name + ')' + ' ';
}
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 : '' ,
commentReplyBtnTemp : '回复
' ,
commentItemReplyTemp : '' ,
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}' +
'
' +
'
' +
'
'
} ,
//初始化页面
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 : '' ,
commentReplyBtnTemp : '回复 ' ,
commentItemReplyTemp : '' ,
commentReplyTemp : '' ,
curComment : '',
answerItemTemp : '' +
'{content}
' +
'' +
'{adoptBtn}' +
'{replyBtn}' +
'{reply}
' ,
answerAdoptBtnTemp : '采纳为最佳答案 ',
answerReplyBtnTemp :'回复 ' ,
answerItemReplyTemp : '' ,
} ,
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'+res.data[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 += ''+res.data[i].text+' ';
}
// options = form_options_rows(res);
$('#category').html(options);
// console.log(res);
});
},
initPrice : function(){
var options = '0 ';
for(var i=0 ; i < Param.prices.length ; i++){
options += ''+Param.prices[i]+' ';
}
$('#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() + '' );
//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( '' + item + ' ' );
}
var html_tmp = '' +
'' +
'
第 ' +
'' +
' ' +
'' +
' 页 , 共 页
' +
'
显示 ' +
'' +
' 行 , 共 行
';
//渲染到页面
$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('' + item + ' ');
}
var html_tmp = '' +
'' +
'
第 ' +
'' +
' ' +
'' +
' 页 , 共 页
' +
'
显示 ' +
'' +
' 行 , 共 行
';
//渲染到页面
$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 += '' + prefix + row[ settings.field ] + ' ';
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')
@endsection
================================================
FILE: resources/views/auth/passwords/email.blade.php
================================================
@extends('layouts.app')
@section('content')
Reset Password
@if (session('status'))
{{ session('status') }}
@endif
@endsection
================================================
FILE: resources/views/auth/passwords/reset.blade.php
================================================
@extends('layouts.app')
@section('content')
@endsection
================================================
FILE: resources/views/auth/register.blade.php
================================================
@extends('layouts.app')
@section('content')
@endsection
================================================
FILE: resources/views/generate/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
首页
= $param['pageTitle'] ?>
@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') }}
================================================
FILE: resources/views/meralbum/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
@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')
首页
= $param['pageTitle'] ?>
@stop
================================================
FILE: resources/views/mergoodscatalog/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
首页
= $param['pageTitle'] ?>
@stop
================================================
FILE: resources/views/merrole/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
首页
= $param['pageTitle'] ?>
@stop
================================================
FILE: resources/views/merrole/permission.blade.php
================================================
================================================
FILE: resources/views/mersysuser/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
@stop
================================================
FILE: resources/views/meruser/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
@stop
================================================
FILE: resources/views/modulefunc/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
首页
=$param['pageTitle']?>
{{ $param['pageTitle'] }}
@stop
================================================
FILE: resources/views/modulerole/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
首页
=$param['pageTitle']?>
@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')
@include('backend::public.footer')
{!! $js !!}
================================================
FILE: resources/views/public/layout1.blade.php
================================================
{{ $param['pageTitle'] }} - {{ config('moduleName') }}
@yield('css' , 'css样式')
@yield('header' , '头部')
@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')
首页
= $param['pageTitle'] ?>
@stop
================================================
FILE: resources/views/simulator/params.blade.php
================================================
================================================
FILE: resources/views/sysapilog/index.blade.php
================================================
@extend('backend::public.layout')
@section('content')
{!! csrf_field() !!}
首页
= $param['pageTitle'] ?>
@stop
================================================
FILE: resources/views/sysappversion/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
首页
= $param['pageTitle'] ?>
@stop
================================================
FILE: resources/views/sysarea/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
首页
= $param['pageTitle'] ?>
@stop
================================================
FILE: resources/views/sysfunc/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
首页
= $param['pageTitle'] ?>
@stop
================================================
FILE: resources/views/sysmail/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
首页
= $param['pageTitle'] ?>
@stop
================================================
FILE: resources/views/sysmerchant/detail.blade.php
================================================
@extends('backend::public.layout')
@section('content')
首页
= $param['pageTitle'] ?>
@stop
================================================
FILE: resources/views/sysmerchant/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
首页
= $param['pageTitle'] ?>
@stop
================================================
FILE: resources/views/sysmodules/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
{!! csrf_field() !!}
首页
=$param['pageTitle']?>
@stop
================================================
FILE: resources/views/sysmodules/role.blade.php
================================================
@extends('backend::public.layout')
@section('content')
首页
=$param['pageTitle']?>
@stop
================================================
FILE: resources/views/syspush/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
首页
= $param['pageTitle'] ?>
@stop
================================================
FILE: resources/views/sysrole/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
首页
=$param['pageTitle']?>
@stop
================================================
FILE: resources/views/sysrole/permission.blade.php
================================================
================================================
FILE: resources/views/syssettings/index.blade.php
================================================
@extends('Backend::public.layout')
@section('content')
{!! csrf_field() !!}
首页
=$param['pageTitle']?>
@stop
================================================
FILE: resources/views/syssettings/sms.blade.php
================================================
@extends('Backend::public.layout')
@section('content')
{!! csrf_field() !!}
首页
=$param['pageTitle']?>
@stop
================================================
FILE: resources/views/syssms/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
首页
= $param['pageTitle'] ?>
@stop
================================================
FILE: resources/views/sysuser/index.blade.php
================================================
@extends('backend::public.layout')
@section('content')
@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
================================================
================================================
FILE: resources/views/widget/Text.blade.php
================================================
================================================
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
================================================
================================================
FILE: templates/generate/system/component/table_type/view/tree_grid.txt
================================================
================================================
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() !!}
首页
= $param['pageTitle'] ?>
{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) {
});