After Width: | Height: | Size: 661 B |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 120 KiB |
After Width: | Height: | Size: 200 KiB |
After Width: | Height: | Size: 200 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 212 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 258 KiB |
@ -0,0 +1,52 @@
|
||||
server:
|
||||
port: 16666
|
||||
servlet:
|
||||
context-path: /
|
||||
|
||||
spring:
|
||||
application:
|
||||
name : demo
|
||||
mvc:
|
||||
favicon:
|
||||
enabled: true
|
||||
messages:
|
||||
basename: i18n.login
|
||||
|
||||
jackson:
|
||||
time-zone: GMT+8
|
||||
date-format: yyyy-MM-dd HH:mm:ss
|
||||
|
||||
## 环境配置文件 dev sqlite
|
||||
profiles:
|
||||
active: dev
|
||||
|
||||
## 静态页面配置
|
||||
thymeleaf:
|
||||
#热部署文件,页面不产生缓存,及时更新
|
||||
cache: false
|
||||
prefix: classpath:static/templates/
|
||||
suffix: .html
|
||||
encoding: UTF-8
|
||||
|
||||
## Mybatis config
|
||||
mybatis:
|
||||
mapperLocations: classpath:mapper/**/*.xml
|
||||
configLocation: classpath:mybatis.xml
|
||||
|
||||
## pagehelper
|
||||
pagehelper:
|
||||
helperDialect: sqlite #postgresql
|
||||
reasonable: true
|
||||
supportMethodsArguments: true
|
||||
params: countSql
|
||||
count: countSql
|
||||
returnPageInfo: check
|
||||
|
||||
## 记录日志
|
||||
logging:
|
||||
config: classpath:logback-spring.xml
|
||||
## Start logging
|
||||
level:
|
||||
root: INFO
|
||||
|
||||
|
@ -0,0 +1,7 @@
|
||||
██╗ ██╗██╗ ██╗██╗ ██╗██╗ ██╗███████╗
|
||||
╚██╗ ██╔╝██║ ██║╚██╗██╔╝██║ ██║██╔════╝
|
||||
╚████╔╝ ██║ ██║ ╚███╔╝ ██║ ██║█████╗
|
||||
╚██╔╝ ██║ ██║ ██╔██╗ ██║ ██║██╔══╝
|
||||
██║ ╚██████╔╝██╔╝ ██╗╚██████╔╝███████╗
|
||||
╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝
|
||||
:: YX Boot :: Power By SpringBoot (v2.1.0.RELEASE)
|
@ -0,0 +1,454 @@
|
||||
#include "easypr/core/chars_identify.h"
|
||||
#include "easypr/core/character.hpp"
|
||||
#include "easypr/core/core_func.h"
|
||||
#include "easypr/core/feature.h"
|
||||
#include "easypr/core/params.h"
|
||||
#include "easypr/config.h"
|
||||
|
||||
using namespace cv;
|
||||
|
||||
namespace easypr {
|
||||
|
||||
CharsIdentify* CharsIdentify::instance_ = nullptr;
|
||||
|
||||
CharsIdentify* CharsIdentify::instance() {
|
||||
if (!instance_) {
|
||||
instance_ = new CharsIdentify;
|
||||
}
|
||||
return instance_;
|
||||
}
|
||||
|
||||
CharsIdentify::CharsIdentify() {
|
||||
LOAD_ANN_MODEL(ann_, kDefaultAnnPath);
|
||||
LOAD_ANN_MODEL(annChinese_, kChineseAnnPath);
|
||||
LOAD_ANN_MODEL(annGray_, kGrayAnnPath);
|
||||
|
||||
kv_ = std::shared_ptr<Kv>(new Kv);
|
||||
kv_->load(kChineseMappingPath);
|
||||
|
||||
extractFeature = getGrayPlusProject;
|
||||
}
|
||||
|
||||
void CharsIdentify::LoadModel(std::string path) {
|
||||
if (path != std::string(kDefaultAnnPath)) {
|
||||
if (!ann_->empty())
|
||||
ann_->clear();
|
||||
LOAD_ANN_MODEL(ann_, path);
|
||||
}
|
||||
}
|
||||
|
||||
void CharsIdentify::LoadChineseModel(std::string path) {
|
||||
if (path != std::string(kChineseAnnPath)) {
|
||||
if (!annChinese_->empty())
|
||||
annChinese_->clear();
|
||||
LOAD_ANN_MODEL(annChinese_, path);
|
||||
}
|
||||
}
|
||||
|
||||
void CharsIdentify::LoadGrayChANN(std::string path) {
|
||||
if (path != std::string(kGrayAnnPath)) {
|
||||
if (!annGray_->empty())
|
||||
annGray_->clear();
|
||||
LOAD_ANN_MODEL(annGray_, path);
|
||||
}
|
||||
}
|
||||
|
||||
void CharsIdentify::LoadChineseMapping(std::string path) {
|
||||
kv_->clear();
|
||||
kv_->load(path);
|
||||
}
|
||||
|
||||
void CharsIdentify::classify(cv::Mat featureRows, std::vector<int>& out_maxIndexs,
|
||||
std::vector<float>& out_maxVals, std::vector<bool> isChineseVec){
|
||||
int rowNum = featureRows.rows;
|
||||
|
||||
cv::Mat output(rowNum, kCharsTotalNumber, CV_32FC1);
|
||||
ann_->predict(featureRows, output);
|
||||
|
||||
for (int output_index = 0; output_index < rowNum; output_index++) {
|
||||
Mat output_row = output.row(output_index);
|
||||
int result = 0;
|
||||
float maxVal = -2.f;
|
||||
bool isChinses = isChineseVec[output_index];
|
||||
if (!isChinses) {
|
||||
result = 0;
|
||||
for (int j = 0; j < kCharactersNumber; j++) {
|
||||
float val = output_row.at<float>(j);
|
||||
// std::cout << "j:" << j << "val:" << val << std::endl;
|
||||
if (val > maxVal) {
|
||||
maxVal = val;
|
||||
result = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
result = kCharactersNumber;
|
||||
for (int j = kCharactersNumber; j < kCharsTotalNumber; j++) {
|
||||
float val = output_row.at<float>(j);
|
||||
//std::cout << "j:" << j << "val:" << val << std::endl;
|
||||
if (val > maxVal) {
|
||||
maxVal = val;
|
||||
result = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
out_maxIndexs[output_index] = result;
|
||||
out_maxVals[output_index] = maxVal;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CharsIdentify::classify(std::vector<CCharacter>& charVec){
|
||||
size_t charVecSize = charVec.size();
|
||||
|
||||
if (charVecSize == 0)
|
||||
return;
|
||||
|
||||
Mat featureRows;
|
||||
for (size_t index = 0; index < charVecSize; index++) {
|
||||
Mat charInput = charVec[index].getCharacterMat();
|
||||
Mat feature = charFeatures(charInput, kPredictSize);
|
||||
featureRows.push_back(feature);
|
||||
}
|
||||
|
||||
cv::Mat output(charVecSize, kCharsTotalNumber, CV_32FC1);
|
||||
ann_->predict(featureRows, output);
|
||||
|
||||
for (size_t output_index = 0; output_index < charVecSize; output_index++) {
|
||||
CCharacter& character = charVec[output_index];
|
||||
Mat output_row = output.row(output_index);
|
||||
|
||||
int result = 0;
|
||||
float maxVal = -2.f;
|
||||
std::string label = "";
|
||||
|
||||
bool isChinses = character.getIsChinese();
|
||||
if (!isChinses) {
|
||||
result = 0;
|
||||
for (int j = 0; j < kCharactersNumber; j++) {
|
||||
float val = output_row.at<float>(j);
|
||||
//std::cout << "j:" << j << "val:" << val << std::endl;
|
||||
if (val > maxVal) {
|
||||
maxVal = val;
|
||||
result = j;
|
||||
}
|
||||
}
|
||||
label = std::make_pair(kChars[result], kChars[result]).second;
|
||||
}
|
||||
else {
|
||||
result = kCharactersNumber;
|
||||
for (int j = kCharactersNumber; j < kCharsTotalNumber; j++) {
|
||||
float val = output_row.at<float>(j);
|
||||
//std::cout << "j:" << j << "val:" << val << std::endl;
|
||||
if (val > maxVal) {
|
||||
maxVal = val;
|
||||
result = j;
|
||||
}
|
||||
}
|
||||
const char* key = kChars[result];
|
||||
std::string s = key;
|
||||
std::string province = kv_->get(s);
|
||||
label = std::make_pair(s, province).second;
|
||||
}
|
||||
/*std::cout << "result:" << result << std::endl;
|
||||
std::cout << "maxVal:" << maxVal << std::endl;*/
|
||||
character.setCharacterScore(maxVal);
|
||||
character.setCharacterStr(label);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CharsIdentify::classifyChineseGray(std::vector<CCharacter>& charVec){
|
||||
size_t charVecSize = charVec.size();
|
||||
if (charVecSize == 0)
|
||||
return;
|
||||
|
||||
Mat featureRows;
|
||||
for (size_t index = 0; index < charVecSize; index++) {
|
||||
Mat charInput = charVec[index].getCharacterMat();
|
||||
cv::Mat feature;
|
||||
extractFeature(charInput, feature);
|
||||
featureRows.push_back(feature);
|
||||
}
|
||||
|
||||
cv::Mat output(charVecSize, kChineseNumber, CV_32FC1);
|
||||
annGray_->predict(featureRows, output);
|
||||
|
||||
for (size_t output_index = 0; output_index < charVecSize; output_index++) {
|
||||
CCharacter& character = charVec[output_index];
|
||||
Mat output_row = output.row(output_index);
|
||||
bool isChinese = true;
|
||||
|
||||
float maxVal = -2;
|
||||
int result = 0;
|
||||
|
||||
for (int j = 0; j < kChineseNumber; j++) {
|
||||
float val = output_row.at<float>(j);
|
||||
//std::cout << "j:" << j << "val:" << val << std::endl;
|
||||
if (val > maxVal) {
|
||||
maxVal = val;
|
||||
result = j;
|
||||
}
|
||||
}
|
||||
|
||||
// no match
|
||||
if (-1 == result) {
|
||||
result = 0;
|
||||
maxVal = 0;
|
||||
isChinese = false;
|
||||
}
|
||||
|
||||
auto index = result + kCharsTotalNumber - kChineseNumber;
|
||||
const char* key = kChars[index];
|
||||
std::string s = key;
|
||||
std::string province = kv_->get(s);
|
||||
|
||||
/*std::cout << "result:" << result << std::endl;
|
||||
std::cout << "maxVal:" << maxVal << std::endl;*/
|
||||
|
||||
character.setCharacterScore(maxVal);
|
||||
character.setCharacterStr(province);
|
||||
character.setIsChinese(isChinese);
|
||||
}
|
||||
}
|
||||
|
||||
void CharsIdentify::classifyChinese(std::vector<CCharacter>& charVec){
|
||||
size_t charVecSize = charVec.size();
|
||||
|
||||
if (charVecSize == 0)
|
||||
return;
|
||||
|
||||
Mat featureRows;
|
||||
for (size_t index = 0; index < charVecSize; index++) {
|
||||
Mat charInput = charVec[index].getCharacterMat();
|
||||
Mat feature = charFeatures(charInput, kChineseSize);
|
||||
featureRows.push_back(feature);
|
||||
}
|
||||
|
||||
cv::Mat output(charVecSize, kChineseNumber, CV_32FC1);
|
||||
annChinese_->predict(featureRows, output);
|
||||
|
||||
for (size_t output_index = 0; output_index < charVecSize; output_index++) {
|
||||
CCharacter& character = charVec[output_index];
|
||||
Mat output_row = output.row(output_index);
|
||||
bool isChinese = true;
|
||||
|
||||
float maxVal = -2;
|
||||
int result = 0;
|
||||
|
||||
for (int j = 0; j < kChineseNumber; j++) {
|
||||
float val = output_row.at<float>(j);
|
||||
//std::cout << "j:" << j << "val:" << val << std::endl;
|
||||
if (val > maxVal) {
|
||||
maxVal = val;
|
||||
result = j;
|
||||
}
|
||||
}
|
||||
|
||||
// no match
|
||||
if (-1 == result) {
|
||||
result = 0;
|
||||
maxVal = 0;
|
||||
isChinese = false;
|
||||
}
|
||||
|
||||
auto index = result + kCharsTotalNumber - kChineseNumber;
|
||||
const char* key = kChars[index];
|
||||
std::string s = key;
|
||||
std::string province = kv_->get(s);
|
||||
|
||||
/*std::cout << "result:" << result << std::endl;
|
||||
std::cout << "maxVal:" << maxVal << std::endl;*/
|
||||
|
||||
character.setCharacterScore(maxVal);
|
||||
character.setCharacterStr(province);
|
||||
character.setIsChinese(isChinese);
|
||||
}
|
||||
}
|
||||
|
||||
int CharsIdentify::classify(cv::Mat f, float& maxVal, bool isChinses, bool isAlphabet){
|
||||
int result = 0;
|
||||
|
||||
cv::Mat output(1, kCharsTotalNumber, CV_32FC1);
|
||||
ann_->predict(f, output);
|
||||
|
||||
maxVal = -2.f;
|
||||
if (!isChinses) {
|
||||
if (!isAlphabet) {
|
||||
result = 0;
|
||||
for (int j = 0; j < kCharactersNumber; j++) {
|
||||
float val = output.at<float>(j);
|
||||
// std::cout << "j:" << j << "val:" << val << std::endl;
|
||||
if (val > maxVal) {
|
||||
maxVal = val;
|
||||
result = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
result = 0;
|
||||
// begin with 11th char, which is 'A'
|
||||
for (int j = 10; j < kCharactersNumber; j++) {
|
||||
float val = output.at<float>(j);
|
||||
// std::cout << "j:" << j << "val:" << val << std::endl;
|
||||
if (val > maxVal) {
|
||||
maxVal = val;
|
||||
result = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
result = kCharactersNumber;
|
||||
for (int j = kCharactersNumber; j < kCharsTotalNumber; j++) {
|
||||
float val = output.at<float>(j);
|
||||
//std::cout << "j:" << j << "val:" << val << std::endl;
|
||||
if (val > maxVal) {
|
||||
maxVal = val;
|
||||
result = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
//std::cout << "maxVal:" << maxVal << std::endl;
|
||||
return result;
|
||||
}
|
||||
|
||||
bool CharsIdentify::isCharacter(cv::Mat input, std::string& label, float& maxVal, bool isChinese) {
|
||||
cv::Mat feature = charFeatures(input, kPredictSize);
|
||||
auto index = static_cast<int>(classify(feature, maxVal, isChinese));
|
||||
|
||||
if (isChinese) {
|
||||
//std::cout << "maxVal:" << maxVal << std::endl;
|
||||
}
|
||||
|
||||
float chineseMaxThresh = 0.2f;
|
||||
|
||||
if (maxVal >= 0.9 || (isChinese && maxVal >= chineseMaxThresh)) {
|
||||
if (index < kCharactersNumber) {
|
||||
label = std::make_pair(kChars[index], kChars[index]).second;
|
||||
}
|
||||
else {
|
||||
const char* key = kChars[index];
|
||||
std::string s = key;
|
||||
std::string province = kv_->get(s);
|
||||
label = std::make_pair(s, province).second;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
std::pair<std::string, std::string> CharsIdentify::identifyChinese(cv::Mat input, float& out, bool& isChinese) {
|
||||
cv::Mat feature = charFeatures(input, kChineseSize);
|
||||
float maxVal = -2;
|
||||
int result = 0;
|
||||
|
||||
cv::Mat output(1, kChineseNumber, CV_32FC1);
|
||||
annChinese_->predict(feature, output);
|
||||
|
||||
for (int j = 0; j < kChineseNumber; j++) {
|
||||
float val = output.at<float>(j);
|
||||
//std::cout << "j:" << j << "val:" << val << std::endl;
|
||||
if (val > maxVal) {
|
||||
maxVal = val;
|
||||
result = j;
|
||||
}
|
||||
}
|
||||
|
||||
// no match
|
||||
if (-1 == result) {
|
||||
result = 0;
|
||||
maxVal = 0;
|
||||
isChinese = false;
|
||||
}
|
||||
else if (maxVal > 0.9){
|
||||
isChinese = true;
|
||||
}
|
||||
|
||||
auto index = result + kCharsTotalNumber - kChineseNumber;
|
||||
const char* key = kChars[index];
|
||||
std::string s = key;
|
||||
std::string province = kv_->get(s);
|
||||
out = maxVal;
|
||||
|
||||
return std::make_pair(s, province);
|
||||
}
|
||||
|
||||
std::pair<std::string, std::string> CharsIdentify::identifyChineseGray(cv::Mat input, float& out, bool& isChinese) {
|
||||
cv::Mat feature;
|
||||
extractFeature(input, feature);
|
||||
float maxVal = -2;
|
||||
int result = 0;
|
||||
cv::Mat output(1, kChineseNumber, CV_32FC1);
|
||||
annGray_->predict(feature, output);
|
||||
|
||||
for (int j = 0; j < kChineseNumber; j++) {
|
||||
float val = output.at<float>(j);
|
||||
//std::cout << "j:" << j << "val:" << val << std::endl;
|
||||
if (val > maxVal) {
|
||||
maxVal = val;
|
||||
result = j;
|
||||
}
|
||||
}
|
||||
// no match
|
||||
if (-1 == result) {
|
||||
result = 0;
|
||||
maxVal = 0;
|
||||
isChinese = false;
|
||||
} else if (maxVal > 0.9){
|
||||
isChinese = true;
|
||||
}
|
||||
auto index = result + kCharsTotalNumber - kChineseNumber;
|
||||
const char* key = kChars[index];
|
||||
std::string s = key;
|
||||
std::string province = kv_->get(s);
|
||||
out = maxVal;
|
||||
return std::make_pair(s, province);
|
||||
}
|
||||
|
||||
|
||||
std::pair<std::string, std::string> CharsIdentify::identify(cv::Mat input, bool isChinese, bool isAlphabet) {
|
||||
cv::Mat feature = charFeatures(input, kPredictSize);
|
||||
float maxVal = -2;
|
||||
auto index = static_cast<int>(classify(feature, maxVal, isChinese, isAlphabet));
|
||||
if (index < kCharactersNumber) {
|
||||
return std::make_pair(kChars[index], kChars[index]);
|
||||
}
|
||||
else {
|
||||
const char* key = kChars[index];
|
||||
std::string s = key;
|
||||
std::string province = kv_->get(s);
|
||||
return std::make_pair(s, province);
|
||||
}
|
||||
}
|
||||
|
||||
int CharsIdentify::identify(std::vector<cv::Mat> inputs, std::vector<std::pair<std::string, std::string>>& outputs,
|
||||
std::vector<bool> isChineseVec) {
|
||||
Mat featureRows;
|
||||
size_t input_size = inputs.size();
|
||||
for (size_t i = 0; i < input_size; i++) {
|
||||
Mat input = inputs[i];
|
||||
cv::Mat feature = charFeatures(input, kPredictSize);
|
||||
featureRows.push_back(feature);
|
||||
}
|
||||
|
||||
std::vector<int> maxIndexs;
|
||||
std::vector<float> maxVals;
|
||||
classify(featureRows, maxIndexs, maxVals, isChineseVec);
|
||||
|
||||
for (size_t row_index = 0; row_index < input_size; row_index++) {
|
||||
int index = maxIndexs[row_index];
|
||||
if (index < kCharactersNumber) {
|
||||
outputs[row_index] = std::make_pair(kChars[index], kChars[index]);
|
||||
}
|
||||
else {
|
||||
const char* key = kChars[index];
|
||||
std::string s = key;
|
||||
std::string province = kv_->get(s);
|
||||
outputs[row_index] = std::make_pair(s, province);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
@ -0,0 +1,117 @@
|
||||
#include "easypr/core/chars_recognise.h"
|
||||
#include "easypr/core/character.hpp"
|
||||
#include "easypr/util/util.h"
|
||||
#include <ctime>
|
||||
|
||||
namespace easypr {
|
||||
|
||||
CCharsRecognise::CCharsRecognise() { m_charsSegment = new CCharsSegment(); }
|
||||
|
||||
CCharsRecognise::~CCharsRecognise() { SAFE_RELEASE(m_charsSegment); }
|
||||
|
||||
int CCharsRecognise::charsRecognise(Mat plate, std::string& plateLicense) {
|
||||
std::vector<Mat> matChars;
|
||||
int result = m_charsSegment->charsSegment(plate, matChars);
|
||||
if (result == 0) {
|
||||
int num = matChars.size();
|
||||
for (int j = 0; j < num; j++)
|
||||
{
|
||||
Mat charMat = matChars.at(j);
|
||||
bool isChinses = false;
|
||||
float maxVal = 0;
|
||||
if (j == 0) {
|
||||
bool judge = true;
|
||||
isChinses = true;
|
||||
auto character = CharsIdentify::instance()->identifyChinese(charMat, maxVal, judge);
|
||||
plateLicense.append(character.second);
|
||||
}
|
||||
else {
|
||||
isChinses = false;
|
||||
auto character = CharsIdentify::instance()->identify(charMat, isChinses);
|
||||
plateLicense.append(character.second);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if (plateLicense.size() < 7) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
int CCharsRecognise::charsRecognise(CPlate& plate, std::string& plateLicense) {
|
||||
std::vector<Mat> matChars;
|
||||
std::vector<Mat> grayChars;
|
||||
Mat plateMat = plate.getPlateMat();
|
||||
if (0) writeTempImage(plateMat, "plateMat/plate");
|
||||
Color color;
|
||||
if (plate.getPlateLocateType() == CMSER) {
|
||||
color = plate.getPlateColor();
|
||||
}
|
||||
else {
|
||||
int w = plateMat.cols;
|
||||
int h = plateMat.rows;
|
||||
Mat tmpMat = plateMat(Rect_<double>(w * 0.1, h * 0.1, w * 0.8, h * 0.8));
|
||||
color = getPlateType(tmpMat, true);
|
||||
}
|
||||
|
||||
int result = m_charsSegment->charsSegmentUsingOSTU(plateMat, matChars, grayChars, color);
|
||||
|
||||
if (result == 0) {
|
||||
int num = matChars.size();
|
||||
for (int j = 0; j < num; j++)
|
||||
{
|
||||
Mat charMat = matChars.at(j);
|
||||
Mat grayChar = grayChars.at(j);
|
||||
if (color != Color::BLUE)
|
||||
grayChar = 255 - grayChar;
|
||||
|
||||
bool isChinses = false;
|
||||
std::pair<std::string, std::string> character;
|
||||
float maxVal;
|
||||
if (0 == j) {
|
||||
isChinses = true;
|
||||
bool judge = true;
|
||||
character = CharsIdentify::instance()->identifyChineseGray(grayChar, maxVal, judge);
|
||||
plateLicense.append(character.second);
|
||||
|
||||
// set plate chinese mat and str
|
||||
plate.setChineseMat(grayChar);
|
||||
plate.setChineseKey(character.first);
|
||||
if (0) writeTempImage(grayChar, "char_data/" + character.first + "/chars_");
|
||||
}
|
||||
else if (1 == j) {
|
||||
isChinses = false;
|
||||
bool isAbc = true;
|
||||
character = CharsIdentify::instance()->identify(charMat, isChinses, isAbc);
|
||||
plateLicense.append(character.second);
|
||||
}
|
||||
else {
|
||||
isChinses = false;
|
||||
SHOW_IMAGE(charMat, 0);
|
||||
character = CharsIdentify::instance()->identify(charMat, isChinses);
|
||||
plateLicense.append(character.second);
|
||||
}
|
||||
|
||||
CCharacter charResult;
|
||||
charResult.setCharacterMat(charMat);
|
||||
charResult.setCharacterGrayMat(grayChar);
|
||||
if (isChinses)
|
||||
charResult.setCharacterStr(character.first);
|
||||
else
|
||||
charResult.setCharacterStr(character.second);
|
||||
|
||||
plate.addReutCharacter(charResult);
|
||||
}
|
||||
if (plateLicense.size() < 7) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,466 @@
|
||||
#include "easypr/core/feature.h"
|
||||
#include "easypr/core/core_func.h"
|
||||
#include "thirdparty/LBP/lbp.hpp"
|
||||
|
||||
namespace easypr {
|
||||
|
||||
|
||||
Mat getHistogram(Mat in) {
|
||||
const int VERTICAL = 0;
|
||||
const int HORIZONTAL = 1;
|
||||
|
||||
// Histogram features
|
||||
Mat vhist = ProjectedHistogram(in, VERTICAL);
|
||||
Mat hhist = ProjectedHistogram(in, HORIZONTAL);
|
||||
|
||||
// Last 10 is the number of moments components
|
||||
int numCols = vhist.cols + hhist.cols;
|
||||
|
||||
Mat out = Mat::zeros(1, numCols, CV_32F);
|
||||
|
||||
int j = 0;
|
||||
for (int i = 0; i < vhist.cols; i++) {
|
||||
out.at<float>(j) = vhist.at<float>(i);
|
||||
j++;
|
||||
}
|
||||
for (int i = 0; i < hhist.cols; i++) {
|
||||
out.at<float>(j) = hhist.at<float>(i);
|
||||
j++;
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
void getHistogramFeatures(const Mat& image, Mat& features) {
|
||||
Mat grayImage;
|
||||
cvtColor(image, grayImage, CV_RGB2GRAY);
|
||||
|
||||
//grayImage = histeq(grayImage);
|
||||
|
||||
Mat img_threshold;
|
||||
threshold(grayImage, img_threshold, 0, 255, CV_THRESH_OTSU + CV_THRESH_BINARY);
|
||||
//Mat img_threshold = grayImage.clone();
|
||||
//spatial_ostu(img_threshold, 8, 2, getPlateType(image, false));
|
||||
|
||||
features = getHistogram(img_threshold);
|
||||
}
|
||||
|
||||
// compute color histom
|
||||
void getColorFeatures(const Mat& src, Mat& features) {
|
||||
Mat src_hsv;
|
||||
|
||||
//grayImage = histeq(grayImage);
|
||||
cvtColor(src, src_hsv, CV_BGR2HSV);
|
||||
int channels = src_hsv.channels();
|
||||
int nRows = src_hsv.rows;
|
||||
|
||||
// consider multi channel image
|
||||
int nCols = src_hsv.cols * channels;
|
||||
if (src_hsv.isContinuous()) {
|
||||
nCols *= nRows;
|
||||
nRows = 1;
|
||||
}
|
||||
|
||||
const int sz = 180;
|
||||
int h[sz] = { 0 };
|
||||
|
||||
uchar* p;
|
||||
for (int i = 0; i < nRows; ++i) {
|
||||
p = src_hsv.ptr<uchar>(i);
|
||||
for (int j = 0; j < nCols; j += 3) {
|
||||
int H = int(p[j]); // 0-180
|
||||
if (H > sz - 1) H = sz - 1;
|
||||
if (H < 0) H = 0;
|
||||
h[H]++;
|
||||
}
|
||||
}
|
||||
|
||||
Mat mhist = Mat::zeros(1, sz, CV_32F);
|
||||
for (int j = 0; j < sz; j++) {
|
||||
mhist.at<float>(j) = (float)h[j];
|
||||
}
|
||||
|
||||
// Normalize histogram
|
||||
double min, max;
|
||||
minMaxLoc(mhist, &min, &max);
|
||||
|
||||
if (max > 0)
|
||||
mhist.convertTo(mhist, -1, 1.0f / max, 0);
|
||||
|
||||
features = mhist;
|
||||
}
|
||||
|
||||
|
||||
void getHistomPlusColoFeatures(const Mat& image, Mat& features) {
|
||||
// TODO
|
||||
Mat feature1, feature2;
|
||||
getHistogramFeatures(image, feature1);
|
||||
getColorFeatures(image, feature2);
|
||||
hconcat(feature1.reshape(1, 1), feature2.reshape(1, 1), features);
|
||||
}
|
||||
|
||||
|
||||
void getSIFTFeatures(const Mat& image, Mat& features) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
|
||||
//HOG Features
|
||||
void getHOGFeatures(const Mat& image, Mat& features) {
|
||||
//HOG descripter
|
||||
HOGDescriptor hog(cvSize(128, 64), cvSize(16, 16), cvSize(8, 8), cvSize(8, 8), 3); //these parameters work well
|
||||
std::vector<float> descriptor;
|
||||
|
||||
// resize input image to (128,64) for compute
|
||||
Size dsize = Size(128,64);
|
||||
Mat trainImg = Mat(dsize, CV_32S);
|
||||
resize(image, trainImg, dsize);
|
||||
|
||||
// compute descripter
|
||||
hog.compute(trainImg, descriptor, Size(8, 8));
|
||||
|
||||
// copy the result
|
||||
Mat mat_featrue(descriptor);
|
||||
mat_featrue.copyTo(features);
|
||||
}
|
||||
|
||||
|
||||
void getHSVHistFeatures(const Mat& image, Mat& features) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
//! LBP feature
|
||||
void getLBPFeatures(const Mat& image, Mat& features) {
|
||||
|
||||
Mat grayImage;
|
||||
cvtColor(image, grayImage, CV_RGB2GRAY);
|
||||
|
||||
Mat lbpimage;
|
||||
lbpimage = libfacerec::olbp(grayImage);
|
||||
Mat lbp_hist = libfacerec::spatial_histogram(lbpimage, 32, 4, 4);
|
||||
|
||||
features = lbp_hist;
|
||||
}
|
||||
|
||||
Mat charFeatures(Mat in, int sizeData) {
|
||||
const int VERTICAL = 0;
|
||||
const int HORIZONTAL = 1;
|
||||
|
||||
// cut the cetner, will afect 5% perices.
|
||||
Rect _rect = GetCenterRect(in);
|
||||
Mat tmpIn = CutTheRect(in, _rect);
|
||||
//Mat tmpIn = in.clone();
|
||||
|
||||
// Low data feature
|
||||
Mat lowData;
|
||||
resize(tmpIn, lowData, Size(sizeData, sizeData));
|
||||
|
||||
// Histogram features
|
||||
Mat vhist = ProjectedHistogram(lowData, VERTICAL);
|
||||
Mat hhist = ProjectedHistogram(lowData, HORIZONTAL);
|
||||
|
||||
// Last 10 is the number of moments components
|
||||
int numCols = vhist.cols + hhist.cols + lowData.cols * lowData.cols;
|
||||
|
||||
Mat out = Mat::zeros(1, numCols, CV_32F);
|
||||
// Asign values to
|
||||
|
||||
int j = 0;
|
||||
for (int i = 0; i < vhist.cols; i++) {
|
||||
out.at<float>(j) = vhist.at<float>(i);
|
||||
j++;
|
||||
}
|
||||
for (int i = 0; i < hhist.cols; i++) {
|
||||
out.at<float>(j) = hhist.at<float>(i);
|
||||
j++;
|
||||
}
|
||||
for (int x = 0; x < lowData.cols; x++) {
|
||||
for (int y = 0; y < lowData.rows; y++) {
|
||||
out.at<float>(j) += (float)lowData.at <unsigned char>(x, y);
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
//std::cout << out << std::endl;
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
Mat charFeatures2(Mat in, int sizeData) {
|
||||
const int VERTICAL = 0;
|
||||
const int HORIZONTAL = 1;
|
||||
|
||||
// cut the cetner, will afect 5% perices.
|
||||
Rect _rect = GetCenterRect(in);
|
||||
Mat tmpIn = CutTheRect(in, _rect);
|
||||
//Mat tmpIn = in.clone();
|
||||
|
||||
// Low data feature
|
||||
Mat lowData;
|
||||
resize(tmpIn, lowData, Size(sizeData, sizeData));
|
||||
|
||||
// Histogram features
|
||||
Mat vhist = ProjectedHistogram(lowData, VERTICAL);
|
||||
Mat hhist = ProjectedHistogram(lowData, HORIZONTAL);
|
||||
|
||||
// Last 10 is the number of moments components
|
||||
int numCols = vhist.cols + hhist.cols + lowData.cols * lowData.cols;
|
||||
|
||||
Mat out = Mat::zeros(1, numCols, CV_32F);
|
||||
|
||||
int j = 0;
|
||||
for (int i = 0; i < vhist.cols; i++) {
|
||||
out.at<float>(j) = vhist.at<float>(i);
|
||||
j++;
|
||||
}
|
||||
for (int i = 0; i < hhist.cols; i++) {
|
||||
out.at<float>(j) = hhist.at<float>(i);
|
||||
j++;
|
||||
}
|
||||
for (int x = 0; x < lowData.cols; x++) {
|
||||
for (int y = 0; y < lowData.rows; y++) {
|
||||
out.at<float>(j) += (float)lowData.at <unsigned char>(x, y);
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
//std::cout << out << std::endl;
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
Mat charProjectFeatures(const Mat& in, int sizeData) {
|
||||
const int VERTICAL = 0;
|
||||
const int HORIZONTAL = 1;
|
||||
|
||||
SHOW_IMAGE(in, 0);
|
||||
// cut the cetner, will afect 5% perices.
|
||||
|
||||
Mat lowData;
|
||||
resize(in, lowData, Size(sizeData, sizeData));
|
||||
|
||||
SHOW_IMAGE(lowData, 0);
|
||||
// Histogram features
|
||||
Mat vhist = ProjectedHistogram(lowData, VERTICAL);
|
||||
Mat hhist = ProjectedHistogram(lowData, HORIZONTAL);
|
||||
|
||||
// Last 10 is the number of moments components
|
||||
int numCols = vhist.cols + hhist.cols;
|
||||
|
||||
Mat out = Mat::zeros(1, numCols, CV_32F);
|
||||
|
||||
int j = 0;
|
||||
for (int i = 0; i < vhist.cols; i++) {
|
||||
out.at<float>(j) = vhist.at<float>(i);
|
||||
j++;
|
||||
}
|
||||
for (int i = 0; i < hhist.cols; i++) {
|
||||
out.at<float>(j) = hhist.at<float>(i);
|
||||
j++;
|
||||
}
|
||||
//std::cout << out << std::endl;
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
void getGrayCharFeatures(const Mat& grayChar, Mat& features) {
|
||||
// TODO: check channnels == 1
|
||||
SHOW_IMAGE(grayChar, 0);
|
||||
SHOW_IMAGE(255 - grayChar, 0);
|
||||
|
||||
// resize to uniform size, like 20x32
|
||||
bool useResize = false;
|
||||
bool useConvert = true;
|
||||
bool useMean = true;
|
||||
bool useLBP = false;
|
||||
|
||||
Mat char_mat;
|
||||
if (useResize) {
|
||||
char_mat.create(kGrayCharHeight, kGrayCharWidth, CV_8UC1);
|
||||
resize(grayChar, char_mat, char_mat.size(), 0, 0, INTER_LINEAR);
|
||||
} else {
|
||||
char_mat = grayChar;
|
||||
}
|
||||
SHOW_IMAGE(char_mat, 0);
|
||||
|
||||
// convert to float
|
||||
Mat float_img;
|
||||
if (useConvert) {
|
||||
float scale = 1.f / 255;
|
||||
char_mat.convertTo(float_img, CV_32FC1, scale, 0);
|
||||
} else {
|
||||
float_img = char_mat;
|
||||
}
|
||||
SHOW_IMAGE(float_img, 0);
|
||||
|
||||
// cut from mean, it can be optional
|
||||
|
||||
Mat mean_img;
|
||||
if (useMean) {
|
||||
float_img -= mean(float_img);
|
||||
mean_img = float_img;
|
||||
} else {
|
||||
mean_img = float_img;
|
||||
}
|
||||
SHOW_IMAGE(mean_img, 0);
|
||||
|
||||
// use lbp to get features, it can be changed to other
|
||||
Mat feautreImg;
|
||||
if (useLBP) {
|
||||
Mat lbpimage = libfacerec::olbp(char_mat);
|
||||
SHOW_IMAGE(lbpimage, 0);
|
||||
feautreImg = libfacerec::spatial_histogram(lbpimage, kCharLBPPatterns, kCharLBPGridX, kCharLBPGridY);
|
||||
} else {
|
||||
feautreImg = mean_img.reshape(1, 1);
|
||||
}
|
||||
|
||||
// return back
|
||||
features = feautreImg;
|
||||
}
|
||||
|
||||
|
||||
void getGrayPlusProject(const Mat& grayChar, Mat& features)
|
||||
{
|
||||
// TODO: check channnels == 1
|
||||
SHOW_IMAGE(grayChar, 0);
|
||||
SHOW_IMAGE(255 - grayChar, 0);
|
||||
|
||||
// resize to uniform size, like 20x32
|
||||
bool useResize = false;
|
||||
bool useConvert = true;
|
||||
bool useMean = true;
|
||||
bool useLBP = false;
|
||||
|
||||
Mat char_mat;
|
||||
if (useResize) {
|
||||
char_mat.create(kGrayCharHeight, kGrayCharWidth, CV_8UC1);
|
||||
resize(grayChar, char_mat, char_mat.size(), 0, 0, INTER_LINEAR);
|
||||
}
|
||||
else {
|
||||
char_mat = grayChar;
|
||||
}
|
||||
SHOW_IMAGE(char_mat, 0);
|
||||
|
||||
// convert to float
|
||||
Mat float_img;
|
||||
if (useConvert) {
|
||||
float scale = 1.f / 255;
|
||||
char_mat.convertTo(float_img, CV_32FC1, scale, 0);
|
||||
}
|
||||
else {
|
||||
float_img = char_mat;
|
||||
}
|
||||
SHOW_IMAGE(float_img, 0);
|
||||
|
||||
// cut from mean, it can be optional
|
||||
|
||||
Mat mean_img;
|
||||
if (useMean) {
|
||||
float_img -= mean(float_img);
|
||||
mean_img = float_img;
|
||||
}
|
||||
else {
|
||||
mean_img = float_img;
|
||||
}
|
||||
SHOW_IMAGE(mean_img, 0);
|
||||
|
||||
// use lbp to get features, it can be changed to other
|
||||
Mat feautreImg;
|
||||
if (useLBP) {
|
||||
Mat lbpimage = libfacerec::olbp(char_mat);
|
||||
SHOW_IMAGE(lbpimage, 0);
|
||||
feautreImg = libfacerec::spatial_histogram(lbpimage, kCharLBPPatterns, kCharLBPGridX, kCharLBPGridY);
|
||||
}
|
||||
else {
|
||||
feautreImg = mean_img.reshape(1, 1);
|
||||
}
|
||||
SHOW_IMAGE(grayChar, 0);
|
||||
Mat binaryChar;
|
||||
threshold(grayChar, binaryChar, 0, 255, CV_THRESH_OTSU + CV_THRESH_BINARY);
|
||||
SHOW_IMAGE(binaryChar, 0);
|
||||
Mat projectFeature = charProjectFeatures(binaryChar, 32);
|
||||
|
||||
hconcat(feautreImg.reshape(1, 1), projectFeature.reshape(1, 1), features);
|
||||
}
|
||||
|
||||
|
||||
void getGrayPlusLBP(const Mat& grayChar, Mat& features)
|
||||
{
|
||||
// TODO: check channnels == 1
|
||||
SHOW_IMAGE(grayChar, 0);
|
||||
SHOW_IMAGE(255 - grayChar, 0);
|
||||
|
||||
// resize to uniform size, like 20x32
|
||||
bool useResize = false;
|
||||
bool useConvert = true;
|
||||
bool useMean = true;
|
||||
bool useLBP = true;
|
||||
|
||||
Mat char_mat;
|
||||
if (useResize) {
|
||||
char_mat.create(kGrayCharHeight, kGrayCharWidth, CV_8UC1);
|
||||
resize(grayChar, char_mat, char_mat.size(), 0, 0, INTER_LINEAR);
|
||||
}
|
||||
else {
|
||||
char_mat = grayChar;
|
||||
}
|
||||
SHOW_IMAGE(char_mat, 0);
|
||||
|
||||
// convert to float
|
||||
Mat float_img;
|
||||
if (useConvert) {
|
||||
float scale = 1.f / 255;
|
||||
char_mat.convertTo(float_img, CV_32FC1, scale, 0);
|
||||
}
|
||||
else {
|
||||
float_img = char_mat;
|
||||
}
|
||||
SHOW_IMAGE(float_img, 0);
|
||||
|
||||
// cut from mean, it can be optional
|
||||
|
||||
Mat mean_img;
|
||||
if (useMean) {
|
||||
float_img -= mean(float_img);
|
||||
mean_img = float_img;
|
||||
}
|
||||
else {
|
||||
mean_img = float_img;
|
||||
}
|
||||
SHOW_IMAGE(mean_img, 0);
|
||||
|
||||
// use lbp to get features, it can be changed to other
|
||||
Mat originImage = mean_img.clone();
|
||||
Mat lbpimage = libfacerec::olbp(mean_img);
|
||||
SHOW_IMAGE(lbpimage, 0);
|
||||
lbpimage = libfacerec::spatial_histogram(lbpimage, kCharLBPPatterns, kCharLBPGridX, kCharLBPGridY);
|
||||
|
||||
// 32x20 + 16x16
|
||||
hconcat(mean_img.reshape(1, 1), lbpimage.reshape(1, 1), features);
|
||||
}
|
||||
|
||||
void getLBPplusHistFeatures(const Mat& image, Mat& features) {
|
||||
Mat grayImage;
|
||||
cvtColor(image, grayImage, CV_RGB2GRAY);
|
||||
|
||||
Mat lbpimage;
|
||||
lbpimage = libfacerec::olbp(grayImage);
|
||||
Mat lbp_hist = libfacerec::spatial_histogram(lbpimage, 64, 8, 4);
|
||||
//features = lbp_hist.reshape(1, 1);
|
||||
|
||||
Mat greyImage;
|
||||
cvtColor(image, greyImage, CV_RGB2GRAY);
|
||||
|
||||
//grayImage = histeq(grayImage);
|
||||
Mat img_threshold;
|
||||
threshold(greyImage, img_threshold, 0, 255,
|
||||
CV_THRESH_OTSU + CV_THRESH_BINARY);
|
||||
Mat histomFeatures = getHistogram(img_threshold);
|
||||
|
||||
hconcat(lbp_hist.reshape(1, 1), histomFeatures.reshape(1, 1), features);
|
||||
//std::cout << features << std::endl;
|
||||
//features = histomFeatures;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
#include "easypr/core/params.h"
|
||||
|
||||
namespace easypr {
|
||||
CParams* CParams::instance_ = nullptr;
|
||||
|
||||
CParams* CParams::instance() {
|
||||
if (!instance_) {
|
||||
instance_ = new CParams;
|
||||
}
|
||||
return instance_;
|
||||
}
|
||||
}/*! \namespace easypr*/
|
@ -0,0 +1,77 @@
|
||||
#include "easypr/core/plate_detect.h"
|
||||
#include "easypr/util/util.h"
|
||||
#include "easypr/core/core_func.h"
|
||||
#include "easypr/config.h"
|
||||
|
||||
namespace easypr {
|
||||
|
||||
CPlateDetect::CPlateDetect() {
|
||||
m_plateLocate = new CPlateLocate();
|
||||
m_maxPlates = 3;
|
||||
m_type = 0;
|
||||
m_showDetect = false;
|
||||
}
|
||||
|
||||
CPlateDetect::~CPlateDetect() { SAFE_RELEASE(m_plateLocate); }
|
||||
|
||||
int CPlateDetect::plateDetect(Mat src, std::vector<CPlate> &resultVec, int type,
|
||||
bool showDetectArea, int img_index) {
|
||||
std::vector<CPlate> sobel_Plates;
|
||||
sobel_Plates.reserve(16);
|
||||
std::vector<CPlate> color_Plates;
|
||||
color_Plates.reserve(16);
|
||||
std::vector<CPlate> mser_Plates;
|
||||
mser_Plates.reserve(16);
|
||||
std::vector<CPlate> all_result_Plates;
|
||||
all_result_Plates.reserve(64);
|
||||
#pragma omp parallel sections
|
||||
{
|
||||
#pragma omp section
|
||||
{
|
||||
if (!type || type & PR_DETECT_SOBEL) {
|
||||
m_plateLocate->plateSobelLocate(src, sobel_Plates, img_index);
|
||||
}
|
||||
}
|
||||
#pragma omp section
|
||||
{
|
||||
if (!type || type & PR_DETECT_COLOR) {
|
||||
m_plateLocate->plateColorLocate(src, color_Plates, img_index);
|
||||
}
|
||||
}
|
||||
#pragma omp section
|
||||
{
|
||||
if (!type || type & PR_DETECT_CMSER) {
|
||||
m_plateLocate->plateMserLocate(src, mser_Plates, img_index);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (auto plate : sobel_Plates) {
|
||||
plate.setPlateLocateType(SOBEL);
|
||||
all_result_Plates.push_back(plate);
|
||||
}
|
||||
for (auto plate : color_Plates) {
|
||||
plate.setPlateLocateType(COLOR);
|
||||
all_result_Plates.push_back(plate);
|
||||
}
|
||||
for (auto plate : mser_Plates) {
|
||||
plate.setPlateLocateType(CMSER);
|
||||
all_result_Plates.push_back(plate);
|
||||
}
|
||||
// use nms to judge plate
|
||||
PlateJudge::instance()->plateJudgeUsingNMS(all_result_Plates, resultVec, m_maxPlates);
|
||||
|
||||
if (0)
|
||||
showDectectResults(src, resultVec, m_maxPlates);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CPlateDetect::plateDetect(Mat src, std::vector<CPlate> &resultVec, int img_index) {
|
||||
int result = plateDetect(src, resultVec, m_type, false, img_index);
|
||||
return result;
|
||||
}
|
||||
|
||||
void CPlateDetect::LoadSVM(std::string path) {
|
||||
PlateJudge::instance()->LoadModel(path);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,105 @@
|
||||
#include "easypr/core/plate_recognize.h"
|
||||
#include "easypr/config.h"
|
||||
#include "thirdparty/textDetect/erfilter.hpp"
|
||||
|
||||
namespace easypr {
|
||||
|
||||
CPlateRecognize::CPlateRecognize() {
|
||||
m_showResult = false;
|
||||
}
|
||||
|
||||
|
||||
// main method, plate recognize, contain two parts
|
||||
// 1. plate detect
|
||||
// 2. chars recognize
|
||||
int CPlateRecognize::plateRecognize(const Mat& src, std::vector<CPlate> &plateVecOut, int img_index) {
|
||||
// resize to uniform sizes
|
||||
float scale = 1.f;
|
||||
Mat img = uniformResize(src, scale);
|
||||
|
||||
// 1. plate detect
|
||||
std::vector<CPlate> plateVec;
|
||||
int resultPD = plateDetect(img, plateVec, img_index);
|
||||
if (resultPD == 0) {
|
||||
size_t num = plateVec.size();
|
||||
for (size_t j = 0; j < num; j++) {
|
||||
CPlate& item = plateVec.at(j);
|
||||
Mat plateMat = item.getPlateMat();
|
||||
SHOW_IMAGE(plateMat, 0);
|
||||
|
||||
// scale the rect to src;
|
||||
item.setPlateScale(scale);
|
||||
RotatedRect rect = item.getPlatePos();
|
||||
item.setPlatePos(scaleBackRRect(rect, 1.f / scale));
|
||||
|
||||
// get plate color
|
||||
Color color = item.getPlateColor();
|
||||
if (color == UNKNOWN) {
|
||||
color = getPlateType(plateMat, true);
|
||||
item.setPlateColor(color);
|
||||
}
|
||||
std::string plateColor = getPlateColor(color);
|
||||
if (0) {
|
||||
std::cout << "plateColor:" << plateColor << std::endl;
|
||||
}
|
||||
|
||||
// 2. chars recognize
|
||||
std::string plateIdentify = "";
|
||||
int resultCR = charsRecognise(item, plateIdentify);
|
||||
if (resultCR == 0) {
|
||||
std::string license = plateColor + ":" + plateIdentify;
|
||||
item.setPlateStr(license);
|
||||
plateVecOut.push_back(item);
|
||||
if (0) std::cout << "resultCR:" << resultCR << std::endl;
|
||||
}
|
||||
else {
|
||||
std::string license = plateColor;
|
||||
item.setPlateStr(license);
|
||||
plateVecOut.push_back(item);
|
||||
if (0) std::cout << "resultCR:" << resultCR << std::endl;
|
||||
}
|
||||
}
|
||||
if (getResultShow()) {
|
||||
// param type: 0 detect, 1 recognize;
|
||||
int showType = 1;
|
||||
if (0 == showType)
|
||||
showDectectResults(img, plateVec, num);
|
||||
else
|
||||
showDectectResults(img, plateVecOut, num);
|
||||
}
|
||||
}
|
||||
return resultPD;
|
||||
}
|
||||
|
||||
void CPlateRecognize::LoadSVM(std::string path) {
|
||||
PlateJudge::instance()->LoadModel(path);
|
||||
}
|
||||
|
||||
void CPlateRecognize::LoadANN(std::string path) {
|
||||
CharsIdentify::instance()->LoadModel(path);
|
||||
}
|
||||
|
||||
void CPlateRecognize::LoadChineseANN(std::string path) {
|
||||
CharsIdentify::instance()->LoadChineseModel(path);
|
||||
}
|
||||
|
||||
void CPlateRecognize::LoadGrayChANN(std::string path) {
|
||||
CharsIdentify::instance()->LoadGrayChANN(path);
|
||||
}
|
||||
|
||||
void CPlateRecognize::LoadChineseMapping(std::string path) {
|
||||
CharsIdentify::instance()->LoadChineseMapping(path);
|
||||
}
|
||||
|
||||
// deprected
|
||||
int CPlateRecognize::plateRecognize(const Mat& src, std::vector<std::string> &licenseVec) {
|
||||
vector<CPlate> plates;
|
||||
int resultPR = plateRecognize(src, plates, 0);
|
||||
|
||||
for (auto plate : plates) {
|
||||
licenseVec.push_back(plate.getPlateStr());
|
||||
}
|
||||
return resultPR;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,196 @@
|
||||
#include "easypr/train/svm_train.h"
|
||||
#include "easypr/util/util.h"
|
||||
#include "easypr/config.h"
|
||||
|
||||
#ifdef OS_WINDOWS
|
||||
#include <ctime>
|
||||
#endif
|
||||
|
||||
using namespace cv;
|
||||
using namespace cv::ml;
|
||||
|
||||
|
||||
// 原版C++语言 训练代码
|
||||
namespace easypr {
|
||||
|
||||
SvmTrain::SvmTrain(const char* plates_folder, const char* xml): plates_folder_(plates_folder), svm_xml_(xml) {
|
||||
assert(plates_folder);
|
||||
assert(xml);
|
||||
extractFeature = getHistomPlusColoFeatures;
|
||||
}
|
||||
|
||||
void SvmTrain::train() {
|
||||
svm_ = cv::ml::SVM::create();
|
||||
svm_->setType(cv::ml::SVM::C_SVC);
|
||||
svm_->setKernel(cv::ml::SVM::RBF);
|
||||
svm_->setDegree(0.1);
|
||||
// 1.4 bug fix: old 1.4 ver gamma is 1
|
||||
svm_->setGamma(0.1);
|
||||
svm_->setCoef0(0.1);
|
||||
svm_->setC(1);
|
||||
svm_->setNu(0.1);
|
||||
svm_->setP(0.1);
|
||||
svm_->setTermCriteria(cvTermCriteria(CV_TERMCRIT_ITER, 20000, 0.0001));
|
||||
|
||||
this->prepare();
|
||||
|
||||
if (train_file_list_.size() == 0) {
|
||||
fprintf(stdout, "No file found in the train folder!\n");
|
||||
fprintf(stdout, "You should create a folder named \"tmp\" in EasyPR main folder.\n");
|
||||
fprintf(stdout, "Copy train data folder(like \"SVM\") under \"tmp\". \n");
|
||||
return;
|
||||
}
|
||||
auto train_data = tdata();
|
||||
|
||||
fprintf(stdout, ">> Training SVM model, please wait...\n");
|
||||
long start = utils::getTimestamp();
|
||||
svm_->trainAuto(train_data, 10, SVM::getDefaultGrid(SVM::C),
|
||||
SVM::getDefaultGrid(SVM::GAMMA), SVM::getDefaultGrid(SVM::P),
|
||||
SVM::getDefaultGrid(SVM::NU), SVM::getDefaultGrid(SVM::COEF),
|
||||
SVM::getDefaultGrid(SVM::DEGREE), true);
|
||||
//svm_->train(train_data);
|
||||
|
||||
long end = utils::getTimestamp();
|
||||
fprintf(stdout, ">> Training done. Time elapse: %ldms\n", end - start);
|
||||
fprintf(stdout, ">> Saving model file...\n");
|
||||
svm_->save(svm_xml_);
|
||||
|
||||
fprintf(stdout, ">> Your SVM Model was saved to %s\n", svm_xml_);
|
||||
fprintf(stdout, ">> Testing...\n");
|
||||
|
||||
this->test();
|
||||
|
||||
}
|
||||
|
||||
void SvmTrain::test() {
|
||||
// 1.4 bug fix: old 1.4 ver there is no null judge
|
||||
// if (NULL == svm_)
|
||||
LOAD_SVM_MODEL(svm_, svm_xml_);
|
||||
|
||||
if (test_file_list_.empty()) {
|
||||
this->prepare();
|
||||
}
|
||||
|
||||
double count_all = test_file_list_.size();
|
||||
double ptrue_rtrue = 0;
|
||||
double ptrue_rfalse = 0;
|
||||
double pfalse_rtrue = 0;
|
||||
double pfalse_rfalse = 0;
|
||||
|
||||
for (auto item : test_file_list_) {
|
||||
auto image = cv::imread(item.file);
|
||||
if (!image.data) {
|
||||
std::cout << "no" << std::endl;
|
||||
continue;
|
||||
}
|
||||
cv::Mat feature;
|
||||
extractFeature(image, feature);
|
||||
|
||||
auto predict = int(svm_->predict(feature));
|
||||
//std::cout << "predict: " << predict << std::endl;
|
||||
|
||||
auto real = item.label;
|
||||
if (predict == kForward && real == kForward) ptrue_rtrue++;
|
||||
if (predict == kForward && real == kInverse) ptrue_rfalse++;
|
||||
if (predict == kInverse && real == kForward) pfalse_rtrue++;
|
||||
if (predict == kInverse && real == kInverse) pfalse_rfalse++;
|
||||
}
|
||||
|
||||
std::cout << "count_all: " << count_all << std::endl;
|
||||
std::cout << "ptrue_rtrue: " << ptrue_rtrue << std::endl;
|
||||
std::cout << "ptrue_rfalse: " << ptrue_rfalse << std::endl;
|
||||
std::cout << "pfalse_rtrue: " << pfalse_rtrue << std::endl;
|
||||
std::cout << "pfalse_rfalse: " << pfalse_rfalse << std::endl;
|
||||
|
||||
double precise = 0;
|
||||
if (ptrue_rtrue + ptrue_rfalse != 0) {
|
||||
precise = ptrue_rtrue / (ptrue_rtrue + ptrue_rfalse);
|
||||
std::cout << "precise: " << precise << std::endl;
|
||||
} else {
|
||||
std::cout << "precise: "
|
||||
<< "NA" << std::endl;
|
||||
}
|
||||
|
||||
double recall = 0;
|
||||
if (ptrue_rtrue + pfalse_rtrue != 0) {
|
||||
recall = ptrue_rtrue / (ptrue_rtrue + pfalse_rtrue);
|
||||
std::cout << "recall: " << recall << std::endl;
|
||||
} else {
|
||||
std::cout << "recall: "
|
||||
<< "NA" << std::endl;
|
||||
}
|
||||
|
||||
double Fsocre = 0;
|
||||
if (precise + recall != 0) {
|
||||
Fsocre = 2 * (precise * recall) / (precise + recall);
|
||||
std::cout << "Fsocre: " << Fsocre << std::endl;
|
||||
} else {
|
||||
std::cout << "Fsocre: "
|
||||
<< "NA" << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
void SvmTrain::prepare() {
|
||||
srand(unsigned(time(NULL)));
|
||||
|
||||
char buffer[260] = {0};
|
||||
|
||||
sprintf(buffer, "%s/has/train", plates_folder_);
|
||||
auto has_file_train_list = utils::getFiles(buffer);
|
||||
std::random_shuffle(has_file_train_list.begin(), has_file_train_list.end());
|
||||
|
||||
sprintf(buffer, "%s/has/test", plates_folder_);
|
||||
auto has_file_test_list = utils::getFiles(buffer);
|
||||
std::random_shuffle(has_file_test_list.begin(), has_file_test_list.end());
|
||||
|
||||
sprintf(buffer, "%s/no/train", plates_folder_);
|
||||
auto no_file_train_list = utils::getFiles(buffer);
|
||||
std::random_shuffle(no_file_train_list.begin(), no_file_train_list.end());
|
||||
|
||||
sprintf(buffer, "%s/no/test", plates_folder_);
|
||||
auto no_file_test_list = utils::getFiles(buffer);
|
||||
std::random_shuffle(no_file_test_list.begin(), no_file_test_list.end());
|
||||
|
||||
fprintf(stdout, ">> Collecting train data...\n");
|
||||
|
||||
for (auto file : has_file_train_list)
|
||||
train_file_list_.push_back({ file, kForward });
|
||||
|
||||
for (auto file : no_file_train_list)
|
||||
train_file_list_.push_back({ file, kInverse });
|
||||
|
||||
fprintf(stdout, ">> Collecting test data...\n");
|
||||
|
||||
for (auto file : has_file_test_list)
|
||||
test_file_list_.push_back({ file, kForward });
|
||||
|
||||
for (auto file : no_file_test_list)
|
||||
test_file_list_.push_back({ file, kInverse });
|
||||
}
|
||||
|
||||
cv::Ptr<cv::ml::TrainData> SvmTrain::tdata() {
|
||||
cv::Mat samples;
|
||||
std::vector<int> responses;
|
||||
|
||||
for (auto f : train_file_list_) {
|
||||
auto image = cv::imread(f.file);
|
||||
if (!image.data) {
|
||||
fprintf(stdout, ">> Invalid image: %s ignore.\n", f.file.c_str());
|
||||
continue;
|
||||
}
|
||||
cv::Mat feature;
|
||||
extractFeature(image, feature);
|
||||
feature = feature.reshape(1, 1);
|
||||
|
||||
samples.push_back(feature);
|
||||
responses.push_back(int(f.label));
|
||||
}
|
||||
|
||||
cv::Mat samples_, responses_;
|
||||
samples.convertTo(samples_, CV_32FC1);
|
||||
cv::Mat(responses).copyTo(responses_);
|
||||
|
||||
return cv::ml::TrainData::create(samples_, cv::ml::SampleTypes::ROW_SAMPLE, responses_);
|
||||
}
|
||||
|
||||
} // namespace easypr
|
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>easypr-java</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
@ -0,0 +1,2 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding/SVMTrain1.java=UTF-8
|
@ -0,0 +1,83 @@
|
||||
package com.yuxue.easypr.core;
|
||||
|
||||
import org.bytedeco.javacpp.opencv_core;
|
||||
import org.bytedeco.javacpp.opencv_core.Mat;
|
||||
import org.bytedeco.javacpp.opencv_ml.ANN_MLP;
|
||||
|
||||
import com.yuxue.constant.Constant;
|
||||
import com.yuxue.util.Convert;
|
||||
|
||||
|
||||
/**
|
||||
* 字符检测
|
||||
* @author yuxue
|
||||
* @date 2020-04-24 15:31
|
||||
*/
|
||||
public class CharsIdentify {
|
||||
|
||||
private ANN_MLP ann=ANN_MLP.create();
|
||||
|
||||
public CharsIdentify() {
|
||||
loadModel(Constant.DEFAULT_ANN_PATH);
|
||||
}
|
||||
|
||||
public void loadModel(String path) {
|
||||
this.ann.clear();
|
||||
// 加载ann配置文件 图像转文字的训练库文件
|
||||
//ann=ANN_MLP.loadANN_MLP(path, "ann");
|
||||
ann = ANN_MLP.load(path);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param input
|
||||
* @param isChinese
|
||||
* @return
|
||||
*/
|
||||
public String charsIdentify(final Mat input, final Boolean isChinese, final Boolean isSpeci) {
|
||||
String result = "";
|
||||
|
||||
/*String name = "D:/PlateDetect/train/chars_recognise_ann/" + System.currentTimeMillis() + ".jpg";
|
||||
opencv_imgcodecs.imwrite(name, input);
|
||||
Mat img = opencv_imgcodecs.imread(name);
|
||||
Mat f = CoreFunc.features(img, Constant.predictSize);*/
|
||||
|
||||
Mat f = CoreFunc.features(input, Constant.predictSize);
|
||||
|
||||
int index = this.classify(f, isChinese, isSpeci);
|
||||
|
||||
System.err.print(index);
|
||||
if (index < Constant.numCharacter) {
|
||||
result = String.valueOf(Constant.strCharacters[index]);
|
||||
} else {
|
||||
String s = Constant.strChinese[index - Constant.numCharacter];
|
||||
result = Constant.KEY_CHINESE_MAP.get(s); // 编码转中文
|
||||
}
|
||||
System.err.println(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private int classify(final Mat f, final Boolean isChinses, final Boolean isSpeci) {
|
||||
int result = -1;
|
||||
|
||||
Mat output = new Mat(1, 140, opencv_core.CV_32F);
|
||||
|
||||
ann.predict(f, output, 0); // 预测结果
|
||||
|
||||
int ann_min = (!isChinses) ? ((isSpeci) ? 10 : 0) : Constant.numCharacter;
|
||||
int ann_max = (!isChinses) ? Constant.numCharacter : Constant.numAll;
|
||||
|
||||
float maxVal = -2;
|
||||
|
||||
for (int j = ann_min; j < ann_max; j++) {
|
||||
float val = Convert.toFloat(output.ptr(0, j));
|
||||
if (val > maxVal) {
|
||||
maxVal = val;
|
||||
result = j;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,90 @@
|
||||
package com.yuxue.easypr.core;
|
||||
|
||||
import static com.yuxue.easypr.core.CoreFunc.features;
|
||||
import static org.bytedeco.javacpp.opencv_core.merge;
|
||||
import static org.bytedeco.javacpp.opencv_core.split;
|
||||
|
||||
import org.bytedeco.javacpp.opencv_core.Mat;
|
||||
import org.bytedeco.javacpp.opencv_core.MatVector;
|
||||
import org.bytedeco.javacpp.opencv_imgproc;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author yuxue
|
||||
* @date 2020-05-05 08:26
|
||||
*/
|
||||
public class Features implements SVMCallback {
|
||||
|
||||
/***
|
||||
* EasyPR的getFeatures回调函数
|
||||
* 本函数是生成直方图均衡特征的回调函数
|
||||
* @param image
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Mat getHisteqFeatures(final Mat image) {
|
||||
return histeq(image);
|
||||
}
|
||||
|
||||
private Mat histeq(Mat in) {
|
||||
Mat out = new Mat(in.size(), in.type());
|
||||
if (in.channels() == 3) {
|
||||
Mat hsv = new Mat();
|
||||
MatVector hsvSplit = new MatVector();
|
||||
opencv_imgproc.cvtColor(in, hsv, opencv_imgproc.CV_BGR2HSV);
|
||||
split(hsv, hsvSplit);
|
||||
opencv_imgproc.equalizeHist(hsvSplit.get(2), hsvSplit.get(2));
|
||||
merge(hsvSplit, hsv);
|
||||
opencv_imgproc.cvtColor(hsv, out, opencv_imgproc.CV_HSV2BGR);
|
||||
hsv = null;
|
||||
hsvSplit = null;
|
||||
System.gc();
|
||||
} else if (in.channels() == 1) {
|
||||
opencv_imgproc.equalizeHist(in, out);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* EasyPR的getFeatures回调函数
|
||||
* 本函数是获取垂直和水平的直方图图值
|
||||
* @param image
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Mat getHistogramFeatures(Mat image) {
|
||||
Mat grayImage = new Mat();
|
||||
opencv_imgproc.cvtColor(image, grayImage, opencv_imgproc.CV_RGB2GRAY);
|
||||
|
||||
Mat img_threshold = new Mat();
|
||||
opencv_imgproc.threshold(grayImage, img_threshold, 0, 255, opencv_imgproc.CV_THRESH_OTSU + opencv_imgproc.CV_THRESH_BINARY);
|
||||
|
||||
return features(img_threshold, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 本函数是获取SITF特征子的回调函数
|
||||
*
|
||||
* @param image
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Mat getSIFTFeatures(final Mat image) {
|
||||
// TODO: 待完善
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 本函数是获取HOG特征子的回调函数
|
||||
*
|
||||
* @param image
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Mat getHOGFeatures(final Mat image) {
|
||||
// TODO: 待完善
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,107 @@
|
||||
package com.yuxue.easypr.core;
|
||||
|
||||
import org.bytedeco.javacpp.opencv_core;
|
||||
import org.bytedeco.javacpp.opencv_imgproc;
|
||||
|
||||
import java.util.Vector;
|
||||
|
||||
import org.bytedeco.javacpp.opencv_core.Mat;
|
||||
import org.bytedeco.javacpp.opencv_core.Rect;
|
||||
import org.bytedeco.javacpp.opencv_core.Size;
|
||||
import org.bytedeco.javacpp.opencv_ml.SVM;
|
||||
|
||||
import com.yuxue.constant.Constant;
|
||||
|
||||
|
||||
/**
|
||||
* 车牌判断
|
||||
* @author yuxue
|
||||
* @date 2020-04-26 15:21
|
||||
*/
|
||||
public class PlateJudge {
|
||||
|
||||
private SVM svm = SVM.create();
|
||||
|
||||
public PlateJudge() {
|
||||
loadSVM(Constant.DEFAULT_SVM_PATH);
|
||||
}
|
||||
|
||||
public void loadSVM(String path) {
|
||||
svm.clear();
|
||||
// svm=SVM.loadSVM(path, "svm");
|
||||
svm=SVM.load(path);
|
||||
}
|
||||
|
||||
/**
|
||||
* EasyPR的getFeatures回调函数, 用于从车牌的image生成svm的训练特征features
|
||||
*/
|
||||
private SVMCallback features = new Features();
|
||||
|
||||
|
||||
/**
|
||||
* 对单幅图像进行SVM判断
|
||||
* @param inMat
|
||||
* @return
|
||||
*/
|
||||
public int plateJudge(final Mat inMat) {
|
||||
int ret = 1;
|
||||
// 使用com.yuxue.train.SVMTrain 生成的训练库文件
|
||||
Mat features = this.features.getHistogramFeatures(inMat);
|
||||
/*Mat samples = features.reshape(1, 1);
|
||||
samples.convertTo(samples, opencv_core.CV_32F);*/
|
||||
|
||||
Mat p = features.reshape(1, 1);
|
||||
p.convertTo(p, opencv_core.CV_32FC1);
|
||||
ret = (int) svm.predict(features);
|
||||
return ret;
|
||||
|
||||
// 使用com.yuxue.train.PlateRecoTrain 生成的训练库文件
|
||||
// 在使用的过程中,传入的样本切图要跟训练的时候处理切图的方法一致
|
||||
/*Mat grayImage = new Mat();
|
||||
opencv_imgproc.cvtColor(inMat, grayImage, opencv_imgproc.CV_RGB2GRAY);
|
||||
Mat dst = new Mat();
|
||||
opencv_imgproc.Canny(grayImage, dst, 130, 250);
|
||||
Mat samples = dst.reshape(1, 1);
|
||||
samples.convertTo(samples, opencv_core.CV_32F);*/
|
||||
|
||||
// 正样本为0 负样本为1
|
||||
/*if(svm.predict(samples) <= 0) {
|
||||
ret = 1;
|
||||
}*/
|
||||
/*ret = (int)svm.predict(samples);
|
||||
System.err.println(ret);
|
||||
return ret ;*/
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 对多幅图像进行SVM判断
|
||||
* @param inVec
|
||||
* @param resultVec
|
||||
* @return
|
||||
*/
|
||||
public int plateJudge(Vector<Mat> inVec, Vector<Mat> resultVec) {
|
||||
|
||||
for (int j = 0; j < inVec.size(); j++) {
|
||||
Mat inMat = inVec.get(j);
|
||||
|
||||
if (1 == plateJudge(inMat)) {
|
||||
resultVec.add(inMat);
|
||||
} else { // 再取中间部分判断一次
|
||||
int w = inMat.cols();
|
||||
int h = inMat.rows();
|
||||
|
||||
Mat tmpDes = inMat.clone();
|
||||
Mat tmpMat = new Mat(inMat, new Rect((int) (w * 0.05), (int) (h * 0.1), (int) (w * 0.9), (int) (h * 0.8)));
|
||||
opencv_imgproc.resize(tmpMat, tmpDes, new Size(inMat.size()));
|
||||
|
||||
if (plateJudge(tmpDes) == 1) {
|
||||
resultVec.add(inMat);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package com.yuxue.easypr.core;
|
||||
|
||||
import org.bytedeco.javacpp.opencv_core.Mat;
|
||||
|
||||
|
||||
/**
|
||||
* @author Created by fanwenjie
|
||||
* @author lin.yao
|
||||
*
|
||||
*/
|
||||
public interface SVMCallback {
|
||||
|
||||
/***
|
||||
* EasyPR的getFeatures回调函数,本函数是生成直方图均衡特征的回调函数
|
||||
*
|
||||
* @param image
|
||||
* @return
|
||||
*/
|
||||
public abstract Mat getHisteqFeatures(final Mat image);
|
||||
|
||||
/**
|
||||
* EasyPR的getFeatures回调函数, 本函数是获取垂直和水平的直方图图值
|
||||
*
|
||||
* @param image
|
||||
* @return
|
||||
*/
|
||||
public abstract Mat getHistogramFeatures(final Mat image);
|
||||
|
||||
/**
|
||||
* 本函数是获取SITF特征子的回调函数
|
||||
*
|
||||
* @param image
|
||||
* @return
|
||||
*/
|
||||
public abstract Mat getSIFTFeatures(final Mat image);
|
||||
|
||||
/**
|
||||
* 本函数是获取HOG特征子的回调函数
|
||||
*
|
||||
* @param image
|
||||
* @return
|
||||
*/
|
||||
public abstract Mat getHOGFeatures(final Mat image);
|
||||
}
|
@ -0,0 +1,244 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.yuxue.mapper.PlateFileMapper">
|
||||
|
||||
<resultMap id="BaseResultMap" type="com.yuxue.entity.PlateFileEntity">
|
||||
<id column="id" jdbcType="INTEGER" property="id" />
|
||||
<result column="file_name" jdbcType="VARCHAR" property="fileName" />
|
||||
<result column="file_path" jdbcType="VARCHAR" property="filePath" />
|
||||
<result column="file_type" jdbcType="VARCHAR" property="fileType" />
|
||||
<result column="file_length" jdbcType="INTEGER" property="fileLength" />
|
||||
<result column="plate" jdbcType="VARCHAR" property="plate" />
|
||||
<result column="plate_color" jdbcType="VARCHAR" property="plateColor" />
|
||||
<result column="last_reco_time" jdbcType="VARCHAR" property="lastRecoTime" />
|
||||
<result column="temp_path" jdbcType="VARCHAR" property="tempPath" />
|
||||
<result column="reco_plate" jdbcType="VARCHAR" property="recoPlate" />
|
||||
<result column="reco_color" jdbcType="VARCHAR" property="recoColor" />
|
||||
<result column="reco_correct" jdbcType="INTEGER" property="recoCorrect" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
id, file_name, file_path, file_type, file_length, plate, plate_color, last_reco_time,
|
||||
temp_path, reco_plate, reco_color, reco_correct
|
||||
</sql>
|
||||
|
||||
<sql id="Base_Where_Clause">
|
||||
<where>
|
||||
<if test="fileName != null">
|
||||
and file_name = #{fileName,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="filePath != null">
|
||||
and file_path = #{filePath,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="fileType != null">
|
||||
and file_type = #{fileType,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="fileLength != null">
|
||||
and file_length = #{fileLength,jdbcType=INTEGER}
|
||||
</if>
|
||||
<if test="plate != null">
|
||||
and plate = #{plate,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="plateColor != null">
|
||||
and plate_color = #{plateColor,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="lastRecoTime != null">
|
||||
and last_reco_time = #{lastRecoTime,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="tempPath != null">
|
||||
and temp_path = #{tempPath,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="recoPlate != null">
|
||||
and reco_plate = #{recoPlate,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="recoColor != null">
|
||||
and reco_color = #{recoColor,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="recoCorrect != null">
|
||||
and reco_correct = #{recoCorrect,jdbcType=INTEGER}
|
||||
</if>
|
||||
</where>
|
||||
</sql>
|
||||
|
||||
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_plate_file
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</select>
|
||||
|
||||
<select id="selectByCondition" resultMap="BaseResultMap">
|
||||
select id, file_name, file_path, file_type, file_length, plate, plate_color, last_reco_time,
|
||||
temp_path, reco_plate, reco_color, reco_correct
|
||||
from t_plate_file
|
||||
<include refid="Base_Where_Clause" />
|
||||
order by id desc
|
||||
</select>
|
||||
|
||||
<insert id="insert" parameterType="com.yuxue.entity.PlateFileEntity">
|
||||
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
|
||||
select seq from sqlite_sequence WHERE name = 't_plate_file'
|
||||
</selectKey>
|
||||
insert into t_plate_file (file_name, file_path, file_type,
|
||||
file_length, plate, plate_color,
|
||||
last_reco_time, temp_path, reco_plate,
|
||||
reco_color, reco_correct)
|
||||
values (#{fileName,jdbcType=VARCHAR}, #{filePath,jdbcType=VARCHAR}, #{fileType,jdbcType=VARCHAR},
|
||||
#{fileLength,jdbcType=INTEGER}, #{plate,jdbcType=VARCHAR}, #{plateColor,jdbcType=VARCHAR},
|
||||
#{lastRecoTime,jdbcType=VARCHAR}, #{tempPath,jdbcType=VARCHAR}, #{recoPlate,jdbcType=VARCHAR},
|
||||
#{recoColor,jdbcType=VARCHAR}, #{recoCorrect,jdbcType=INTEGER})
|
||||
</insert>
|
||||
|
||||
<insert id="insertSelective" parameterType="com.yuxue.entity.PlateFileEntity">
|
||||
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
|
||||
select seq from sqlite_sequence WHERE name = 't_plate_file'
|
||||
</selectKey>
|
||||
insert into t_plate_file
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="fileName != null">
|
||||
file_name,
|
||||
</if>
|
||||
<if test="filePath != null">
|
||||
file_path,
|
||||
</if>
|
||||
<if test="fileType != null">
|
||||
file_type,
|
||||
</if>
|
||||
<if test="fileLength != null">
|
||||
file_length,
|
||||
</if>
|
||||
<if test="plate != null">
|
||||
plate,
|
||||
</if>
|
||||
<if test="plateColor != null">
|
||||
plate_color,
|
||||
</if>
|
||||
<if test="lastRecoTime != null">
|
||||
last_reco_time,
|
||||
</if>
|
||||
<if test="tempPath != null">
|
||||
temp_path,
|
||||
</if>
|
||||
<if test="recoPlate != null">
|
||||
reco_plate,
|
||||
</if>
|
||||
<if test="recoColor != null">
|
||||
reco_color,
|
||||
</if>
|
||||
<if test="recoCorrect != null">
|
||||
reco_correct,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="fileName != null">
|
||||
#{fileName,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="filePath != null">
|
||||
#{filePath,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="fileType != null">
|
||||
#{fileType,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="fileLength != null">
|
||||
#{fileLength,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="plate != null">
|
||||
#{plate,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="plateColor != null">
|
||||
#{plateColor,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="lastRecoTime != null">
|
||||
#{lastRecoTime,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="tempPath != null">
|
||||
#{tempPath,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="recoPlate != null">
|
||||
#{recoPlate,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="recoColor != null">
|
||||
#{recoColor,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="recoCorrect != null">
|
||||
#{recoCorrect,jdbcType=INTEGER},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<update id="updateByPrimaryKeySelective" parameterType="com.yuxue.entity.PlateFileEntity">
|
||||
update t_plate_file
|
||||
<set>
|
||||
<if test="fileName != null">
|
||||
file_name = #{fileName,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="filePath != null">
|
||||
file_path = #{filePath,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="fileType != null">
|
||||
file_type = #{fileType,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="fileLength != null">
|
||||
file_length = #{fileLength,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="plate != null">
|
||||
plate = #{plate,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="plateColor != null">
|
||||
plate_color = #{plateColor,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="lastRecoTime != null">
|
||||
last_reco_time = #{lastRecoTime,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="tempPath != null">
|
||||
temp_path = #{tempPath,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="recoPlate != null">
|
||||
reco_plate = #{recoPlate,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="recoColor != null">
|
||||
reco_color = #{recoColor,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="recoCorrect != null">
|
||||
reco_correct = #{recoCorrect,jdbcType=INTEGER},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</update>
|
||||
|
||||
<update id="updateByPrimaryKey" parameterType="com.yuxue.entity.PlateFileEntity">
|
||||
update t_plate_file
|
||||
set file_name = #{fileName,jdbcType=VARCHAR},
|
||||
file_path = #{filePath,jdbcType=VARCHAR},
|
||||
file_type = #{fileType,jdbcType=VARCHAR},
|
||||
file_length = #{fileLength,jdbcType=INTEGER},
|
||||
plate = #{plate,jdbcType=VARCHAR},
|
||||
plate_color = #{plateColor,jdbcType=VARCHAR},
|
||||
last_reco_time = #{lastRecoTime,jdbcType=VARCHAR},
|
||||
temp_path = #{tempPath,jdbcType=VARCHAR},
|
||||
reco_plate = #{recoPlate,jdbcType=VARCHAR},
|
||||
reco_color = #{recoColor,jdbcType=VARCHAR},
|
||||
reco_correct = #{recoCorrect,jdbcType=INTEGER}
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</update>
|
||||
|
||||
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
|
||||
delete from t_plate_file
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</delete>
|
||||
|
||||
|
||||
<select id="getUnRecogniseList" resultMap="BaseResultMap">
|
||||
select id, file_name, file_path, file_type, file_length, plate, plate_color, last_reco_time,
|
||||
temp_path, reco_plate, reco_color, reco_correct
|
||||
from t_plate_file
|
||||
<where>
|
||||
<!-- 0未识别 1正确 2错误 -->
|
||||
reco_correct = 0
|
||||
</where>
|
||||
order by id desc
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
@ -0,0 +1,220 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.yuxue.mapper.PlateRecoDebugMapper">
|
||||
|
||||
<resultMap id="BaseResultMap" type="com.yuxue.entity.PlateRecoDebugEntity">
|
||||
<id column="id" jdbcType="INTEGER" property="id" />
|
||||
<result column="parent_id" jdbcType="INTEGER" property="parentId" />
|
||||
<result column="file_name" jdbcType="VARCHAR" property="fileName" />
|
||||
<result column="file_path" jdbcType="VARCHAR" property="filePath" />
|
||||
<result column="debug_type" jdbcType="VARCHAR" property="debugType" />
|
||||
<result column="file_length" jdbcType="INTEGER" property="fileLength" />
|
||||
<result column="last_reco_time" jdbcType="VARCHAR" property="lastRecoTime" />
|
||||
<result column="reco_plate" jdbcType="VARCHAR" property="recoPlate" />
|
||||
<result column="plate_color" jdbcType="VARCHAR" property="plateColor" />
|
||||
<result column="sort" jdbcType="INTEGER" property="sort" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
id, parent_id, file_name, file_path, debug_type, file_length, last_reco_time, reco_plate,
|
||||
plate_color, sort
|
||||
</sql>
|
||||
|
||||
<sql id="Base_Where_Clause">
|
||||
<where>
|
||||
<if test="parentId != null">
|
||||
and parent_id = #{parentId,jdbcType=INTEGER}
|
||||
</if>
|
||||
<if test="fileName != null">
|
||||
and file_name = #{fileName,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="filePath != null">
|
||||
and file_path = #{filePath,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="debugType != null">
|
||||
and debug_type = #{debugType,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="fileLength != null">
|
||||
and file_length = #{fileLength,jdbcType=INTEGER}
|
||||
</if>
|
||||
<if test="lastRecoTime != null">
|
||||
and last_reco_time = #{lastRecoTime,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="recoPlate != null">
|
||||
and reco_plate = #{recoPlate,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="plateColor != null">
|
||||
and plate_color = #{plateColor,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="sort != null">
|
||||
and sort = #{sort,jdbcType=INTEGER}
|
||||
</if>
|
||||
</where>
|
||||
</sql>
|
||||
|
||||
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_plate_reco_debug
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</select>
|
||||
|
||||
<select id="selectByCondition" resultMap="BaseResultMap">
|
||||
select id, parent_id, file_name, file_path, debug_type, file_length, last_reco_time,
|
||||
reco_plate, plate_color, sort
|
||||
from t_plate_reco_debug
|
||||
<include refid="Base_Where_Clause" />
|
||||
order by sort, file_name
|
||||
</select>
|
||||
|
||||
<insert id="insert" parameterType="com.yuxue.entity.PlateRecoDebugEntity">
|
||||
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
|
||||
Sqlite
|
||||
</selectKey>
|
||||
insert into t_plate_reco_debug (parent_id, file_name, file_path,
|
||||
debug_type, file_length, last_reco_time,
|
||||
reco_plate, plate_color, sort
|
||||
)
|
||||
values (#{parentId,jdbcType=INTEGER}, #{fileName,jdbcType=VARCHAR}, #{filePath,jdbcType=VARCHAR},
|
||||
#{debugType,jdbcType=VARCHAR}, #{fileLength,jdbcType=INTEGER}, #{lastRecoTime,jdbcType=VARCHAR},
|
||||
#{recoPlate,jdbcType=VARCHAR}, #{plateColor,jdbcType=VARCHAR}, #{sort,jdbcType=INTEGER}
|
||||
)
|
||||
</insert>
|
||||
|
||||
<insert id="insertSelective" parameterType="com.yuxue.entity.PlateRecoDebugEntity">
|
||||
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
|
||||
Sqlite
|
||||
</selectKey>
|
||||
insert into t_plate_reco_debug
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="parentId != null">
|
||||
parent_id,
|
||||
</if>
|
||||
<if test="fileName != null">
|
||||
file_name,
|
||||
</if>
|
||||
<if test="filePath != null">
|
||||
file_path,
|
||||
</if>
|
||||
<if test="debugType != null">
|
||||
debug_type,
|
||||
</if>
|
||||
<if test="fileLength != null">
|
||||
file_length,
|
||||
</if>
|
||||
<if test="lastRecoTime != null">
|
||||
last_reco_time,
|
||||
</if>
|
||||
<if test="recoPlate != null">
|
||||
reco_plate,
|
||||
</if>
|
||||
<if test="plateColor != null">
|
||||
plate_color,
|
||||
</if>
|
||||
<if test="sort != null">
|
||||
sort,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="parentId != null">
|
||||
#{parentId,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="fileName != null">
|
||||
#{fileName,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="filePath != null">
|
||||
#{filePath,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="debugType != null">
|
||||
#{debugType,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="fileLength != null">
|
||||
#{fileLength,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="lastRecoTime != null">
|
||||
#{lastRecoTime,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="recoPlate != null">
|
||||
#{recoPlate,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="plateColor != null">
|
||||
#{plateColor,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="sort != null">
|
||||
#{sort,jdbcType=INTEGER},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<update id="updateByPrimaryKeySelective" parameterType="com.yuxue.entity.PlateRecoDebugEntity">
|
||||
update t_plate_reco_debug
|
||||
<set>
|
||||
<if test="parentId != null">
|
||||
parent_id = #{parentId,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="fileName != null">
|
||||
file_name = #{fileName,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="filePath != null">
|
||||
file_path = #{filePath,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="debugType != null">
|
||||
debug_type = #{debugType,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="fileLength != null">
|
||||
file_length = #{fileLength,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="lastRecoTime != null">
|
||||
last_reco_time = #{lastRecoTime,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="recoPlate != null">
|
||||
reco_plate = #{recoPlate,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="plateColor != null">
|
||||
plate_color = #{plateColor,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="sort != null">
|
||||
sort = #{sort,jdbcType=INTEGER},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</update>
|
||||
|
||||
<update id="updateByPrimaryKey" parameterType="com.yuxue.entity.PlateRecoDebugEntity">
|
||||
update t_plate_reco_debug
|
||||
set parent_id = #{parentId,jdbcType=INTEGER},
|
||||
file_name = #{fileName,jdbcType=VARCHAR},
|
||||
file_path = #{filePath,jdbcType=VARCHAR},
|
||||
debug_type = #{debugType,jdbcType=VARCHAR},
|
||||
file_length = #{fileLength,jdbcType=INTEGER},
|
||||
last_reco_time = #{lastRecoTime,jdbcType=VARCHAR},
|
||||
reco_plate = #{recoPlate,jdbcType=VARCHAR},
|
||||
plate_color = #{plateColor,jdbcType=VARCHAR},
|
||||
sort = #{sort,jdbcType=INTEGER}
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</update>
|
||||
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
|
||||
delete from t_plate_reco_debug
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</delete>
|
||||
|
||||
|
||||
<delete id="deleteByParentId" parameterType="java.lang.Integer">
|
||||
delete from t_plate_reco_debug
|
||||
where parent_id = #{parentId,jdbcType=INTEGER}
|
||||
</delete>
|
||||
|
||||
|
||||
<insert id="batchInsert">
|
||||
insert into t_plate_reco_debug (parent_id, file_name, file_path,
|
||||
debug_type, reco_plate, plate_color, sort )
|
||||
values
|
||||
<foreach collection="list" index="index" item="item" open="(" close=")" separator="),(">
|
||||
ifnull(#{item.parentId,jdbcType=INTEGER}, 0), ifnull(#{item.fileName,jdbcType=VARCHAR}, ''), ifnull(#{item.filePath,jdbcType=VARCHAR}, ''),
|
||||
ifnull(#{item.debugType,jdbcType=VARCHAR}, ''), ifnull(#{item.recoPlate,jdbcType=VARCHAR}, ''),
|
||||
ifnull(#{item.plateColor,jdbcType=VARCHAR}, ''), ifnull(#{item.sort,jdbcType=INTEGER}, 0)
|
||||
</foreach>
|
||||
</insert>
|
||||
|
||||
</mapper>
|
@ -0,0 +1,272 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.yuxue.mapper.SystemMenuMapper">
|
||||
|
||||
<resultMap id="BaseResultMap" type="com.yuxue.entity.SystemMenuEntity">
|
||||
<id column="id" jdbcType="INTEGER" property="id" />
|
||||
<result column="menu_name" jdbcType="VARCHAR" property="menuName" />
|
||||
<result column="menu_url" jdbcType="VARCHAR" property="menuUrl" />
|
||||
<result column="parent_id" jdbcType="INTEGER" property="parentId" />
|
||||
<result column="sort" jdbcType="INTEGER" property="sort" />
|
||||
<result column="menu_level" jdbcType="INTEGER" property="menuLevel" />
|
||||
<result column="menu_icon" jdbcType="VARCHAR" property="menuIcon" />
|
||||
<result column="show_flag" jdbcType="INTEGER" property="showFlag" />
|
||||
<result column="platform" jdbcType="INTEGER" property="platform" />
|
||||
<result column="menu_type" jdbcType="INTEGER" property="menuType" />
|
||||
<result column="permission" jdbcType="VARCHAR" property="permission" />
|
||||
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
|
||||
<result column="editor_id" jdbcType="INTEGER" property="editorId" />
|
||||
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
|
||||
<result column="creator_id" jdbcType="INTEGER" property="creatorId" />
|
||||
<result column="version" jdbcType="INTEGER" property="version" />
|
||||
<result column="del_flag" jdbcType="INTEGER" property="delFlag" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
id, menu_name, menu_url, parent_id, sort, menu_level, menu_icon, show_flag, platform,
|
||||
menu_type, permission, update_time, editor_id, create_time, creator_id, version,
|
||||
del_flag
|
||||
</sql>
|
||||
|
||||
<sql id="Base_Where_Clause">
|
||||
<where>
|
||||
<if test="menuName != null">
|
||||
and menu_name = #{menuName,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="menuUrl != null">
|
||||
and menu_url = #{menuUrl,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="parentId != null">
|
||||
and parent_id = #{parentId,jdbcType=INTEGER}
|
||||
</if>
|
||||
<if test="sort != null">
|
||||
and sort = #{sort,jdbcType=INTEGER}
|
||||
</if>
|
||||
<if test="menuLevel != null">
|
||||
and menu_level = #{menuLevel,jdbcType=INTEGER}
|
||||
</if>
|
||||
<if test="menuIcon != null">
|
||||
and menu_icon = #{menuIcon,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="showFlag != null">
|
||||
and show_flag = #{showFlag,jdbcType=INTEGER}
|
||||
</if>
|
||||
<if test="platform != null">
|
||||
and platform = #{platform,jdbcType=INTEGER}
|
||||
</if>
|
||||
<if test="menuType != null">
|
||||
and menu_type = #{menuType,jdbcType=INTEGER}
|
||||
</if>
|
||||
<if test="permission != null">
|
||||
and permission = #{permission,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="updateTime != null">
|
||||
and update_time = #{updateTime,jdbcType=TIMESTAMP}
|
||||
</if>
|
||||
<if test="editorId != null">
|
||||
and editor_id = #{editorId,jdbcType=INTEGER}
|
||||
</if>
|
||||
<if test="createTime != null">
|
||||
and create_time = #{createTime,jdbcType=TIMESTAMP}
|
||||
</if>
|
||||
<if test="creatorId != null">
|
||||
and creator_id = #{creatorId,jdbcType=INTEGER}
|
||||
</if>
|
||||
and del_flag = 0
|
||||
</where>
|
||||
</sql>
|
||||
|
||||
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_system_menu
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</select>
|
||||
|
||||
<select id="selectByCondition" resultMap="BaseResultMap">
|
||||
select id, menu_name, menu_url, parent_id, sort, menu_level, menu_icon, show_flag,
|
||||
platform, menu_type, permission, update_time, editor_id, create_time, creator_id,
|
||||
version, del_flag
|
||||
from t_system_menu
|
||||
<include refid="Base_Where_Clause" />
|
||||
order by menu_level, sort, id
|
||||
</select>
|
||||
|
||||
<insert id="insert" parameterType="com.yuxue.entity.SystemMenuEntity">
|
||||
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
|
||||
select seq from sqlite_sequence where name = 't_system_menu'
|
||||
</selectKey>
|
||||
insert into t_system_menu (menu_name, menu_url, parent_id,
|
||||
sort, menu_level, menu_icon,
|
||||
show_flag, platform, menu_type,
|
||||
permission, editor_id, create_time,
|
||||
creator_id)
|
||||
values (#{menuName,jdbcType=VARCHAR}, #{menuUrl,jdbcType=VARCHAR}, #{parentId,jdbcType=INTEGER},
|
||||
#{sort,jdbcType=INTEGER}, #{menuLevel,jdbcType=INTEGER}, #{menuIcon,jdbcType=VARCHAR},
|
||||
#{showFlag,jdbcType=INTEGER}, #{platform,jdbcType=INTEGER}, #{menuType,jdbcType=INTEGER},
|
||||
#{permission,jdbcType=VARCHAR}, #{editorId,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP},
|
||||
#{creatorId,jdbcType=INTEGER})
|
||||
</insert>
|
||||
|
||||
<insert id="insertSelective" parameterType="com.yuxue.entity.SystemMenuEntity">
|
||||
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
|
||||
select seq from sqlite_sequence where name = 't_system_menu'
|
||||
</selectKey>
|
||||
insert into t_system_menu
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="menuName != null">
|
||||
menu_name,
|
||||
</if>
|
||||
<if test="menuUrl != null">
|
||||
menu_url,
|
||||
</if>
|
||||
<if test="parentId != null">
|
||||
parent_id,
|
||||
</if>
|
||||
<if test="sort != null">
|
||||
sort,
|
||||
</if>
|
||||
<if test="menuLevel != null">
|
||||
menu_level,
|
||||
</if>
|
||||
<if test="menuIcon != null">
|
||||
menu_icon,
|
||||
</if>
|
||||
<if test="showFlag != null">
|
||||
show_flag,
|
||||
</if>
|
||||
<if test="platform != null">
|
||||
platform,
|
||||
</if>
|
||||
<if test="menuType != null">
|
||||
menu_type,
|
||||
</if>
|
||||
<if test="permission != null">
|
||||
permission,
|
||||
</if>
|
||||
<if test="editorId != null">
|
||||
editor_id,
|
||||
</if>
|
||||
<if test="createTime != null">
|
||||
create_time,
|
||||
</if>
|
||||
<if test="creatorId != null">
|
||||
creator_id,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="menuName != null">
|
||||
#{menuName,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="menuUrl != null">
|
||||
#{menuUrl,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="parentId != null">
|
||||
#{parentId,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="sort != null">
|
||||
#{sort,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="menuLevel != null">
|
||||
#{menuLevel,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="menuIcon != null">
|
||||
#{menuIcon,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="showFlag != null">
|
||||
#{showFlag,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="platform != null">
|
||||
#{platform,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="menuType != null">
|
||||
#{menuType,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="permission != null">
|
||||
#{permission,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="editorId != null">
|
||||
#{editorId,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="createTime != null">
|
||||
#{createTime,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="creatorId != null">
|
||||
#{creatorId,jdbcType=INTEGER},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<update id="updateByPrimaryKeySelective" parameterType="com.yuxue.entity.SystemMenuEntity">
|
||||
update t_system_menu
|
||||
<set>
|
||||
<if test="menuName != null">
|
||||
menu_name = #{menuName,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="menuUrl != null">
|
||||
menu_url = #{menuUrl,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="parentId != null">
|
||||
parent_id = #{parentId,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="sort != null">
|
||||
sort = #{sort,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="menuLevel != null">
|
||||
menu_level = #{menuLevel,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="menuIcon != null">
|
||||
menu_icon = #{menuIcon,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="showFlag != null">
|
||||
show_flag = #{showFlag,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="platform != null">
|
||||
platform = #{platform,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="menuType != null">
|
||||
menu_type = #{menuType,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="permission != null">
|
||||
permission = #{permission,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="updateTime != null">
|
||||
update_time = #{updateTime,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="editorId != null">
|
||||
editor_id = #{editorId,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="creatorId != null">
|
||||
creator_id = #{creatorId,jdbcType=INTEGER},
|
||||
</if>
|
||||
version = version + 1,
|
||||
</set>
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
and version = #{version, jdbcType=INTEGER}
|
||||
</update>
|
||||
|
||||
<update id="updateByPrimaryKey" parameterType="com.yuxue.entity.SystemMenuEntity">
|
||||
update t_system_menu
|
||||
set menu_name = #{menuName,jdbcType=VARCHAR},
|
||||
menu_url = #{menuUrl,jdbcType=VARCHAR},
|
||||
parent_id = #{parentId,jdbcType=INTEGER},
|
||||
sort = #{sort,jdbcType=INTEGER},
|
||||
menu_level = #{menuLevel,jdbcType=INTEGER},
|
||||
menu_icon = #{menuIcon,jdbcType=VARCHAR},
|
||||
show_flag = #{showFlag,jdbcType=INTEGER},
|
||||
platform = #{platform,jdbcType=INTEGER},
|
||||
menu_type = #{menuType,jdbcType=INTEGER},
|
||||
permission = #{permission,jdbcType=VARCHAR},
|
||||
update_time = #{updateTime,jdbcType=TIMESTAMP},
|
||||
editor_id = #{editorId,jdbcType=INTEGER},
|
||||
creator_id = #{creatorId,jdbcType=INTEGER},
|
||||
version = version + 1
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
and version = #{version, jdbcType=INTEGER}
|
||||
</update>
|
||||
|
||||
<update id="deleteByPrimaryKey" parameterType="java.lang.Integer">
|
||||
update t_system_menu set del_flag = 1
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</update>
|
||||
</mapper>
|
@ -0,0 +1,183 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.yuxue.mapper.TempPlateFileMapper">
|
||||
|
||||
<resultMap id="BaseResultMap" type="com.yuxue.entity.TempPlateFileEntity">
|
||||
<id column="id" jdbcType="INTEGER" property="id" />
|
||||
<result column="file_name" jdbcType="VARCHAR" property="fileName" />
|
||||
<result column="file_path" jdbcType="VARCHAR" property="filePath" />
|
||||
<result column="file_type" jdbcType="VARCHAR" property="fileType" />
|
||||
<result column="file_length" jdbcType="INTEGER" property="fileLength" />
|
||||
<result column="parent_id" jdbcType="INTEGER" property="parentId" />
|
||||
<result column="level" jdbcType="INTEGER" property="level" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
id, file_name, file_path, file_type, file_length, parent_id, level
|
||||
</sql>
|
||||
|
||||
<sql id="Base_Where_Clause">
|
||||
<where>
|
||||
<if test="fileName != null">
|
||||
and file_name = #{fileName,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="filePath != null">
|
||||
and file_path = #{filePath,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="fileType != null">
|
||||
and file_type = #{fileType,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="fileLength != null">
|
||||
and file_length = #{fileLength,jdbcType=INTEGER}
|
||||
</if>
|
||||
<if test="parentId != null">
|
||||
and parent_id = #{parentId,jdbcType=INTEGER}
|
||||
</if>
|
||||
<if test="level != null">
|
||||
and level = #{level,jdbcType=INTEGER}
|
||||
</if>
|
||||
</where>
|
||||
</sql>
|
||||
|
||||
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from temp_plate_file
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</select>
|
||||
|
||||
<select id="selectByCondition" resultMap="BaseResultMap">
|
||||
select id, file_name, file_path, file_type, file_length, parent_id, level
|
||||
from temp_plate_file
|
||||
<include refid="Base_Where_Clause" />
|
||||
order by id desc
|
||||
</select>
|
||||
|
||||
<insert id="insert" parameterType="com.yuxue.entity.TempPlateFileEntity">
|
||||
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
|
||||
select seq from sqlite_sequence WHERE name = 'temp_plate_file'
|
||||
</selectKey>
|
||||
insert into temp_plate_file (file_name, file_path, file_type,
|
||||
file_length, parent_id, level
|
||||
)
|
||||
values (#{fileName,jdbcType=VARCHAR}, #{filePath,jdbcType=VARCHAR}, #{fileType,jdbcType=VARCHAR},
|
||||
#{fileLength,jdbcType=INTEGER}, #{parentId,jdbcType=INTEGER}, #{level,jdbcType=INTEGER}
|
||||
)
|
||||
</insert>
|
||||
|
||||
<insert id="insertSelective" parameterType="com.yuxue.entity.TempPlateFileEntity">
|
||||
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
|
||||
select seq from sqlite_sequence WHERE name = 'temp_plate_file'
|
||||
</selectKey>
|
||||
insert into temp_plate_file
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="fileName != null">
|
||||
file_name,
|
||||
</if>
|
||||
<if test="filePath != null">
|
||||
file_path,
|
||||
</if>
|
||||
<if test="fileType != null">
|
||||
file_type,
|
||||
</if>
|
||||
<if test="fileLength != null">
|
||||
file_length,
|
||||
</if>
|
||||
<if test="parentId != null">
|
||||
parent_id,
|
||||
</if>
|
||||
<if test="level != null">
|
||||
level ,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="fileName != null">
|
||||
#{fileName,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="filePath != null">
|
||||
#{filePath,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="fileType != null">
|
||||
#{fileType,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="fileLength != null">
|
||||
#{fileLength,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="parentId != null">
|
||||
#{parentId,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="level != null">
|
||||
#{level,jdbcType=INTEGER},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<update id="updateByPrimaryKeySelective" parameterType="com.yuxue.entity.TempPlateFileEntity">
|
||||
update temp_plate_file
|
||||
<set>
|
||||
<if test="fileName != null">
|
||||
file_name = #{fileName,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="filePath != null">
|
||||
file_path = #{filePath,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="fileType != null">
|
||||
file_type = #{fileType,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="fileLength != null">
|
||||
file_length = #{fileLength,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="parentId != null">
|
||||
parent_id = #{parentId,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="level != null">
|
||||
level = #{level,jdbcType=INTEGER},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</update>
|
||||
|
||||
<update id="updateByPrimaryKey" parameterType="com.yuxue.entity.TempPlateFileEntity">
|
||||
update temp_plate_file
|
||||
set file_name = #{fileName,jdbcType=VARCHAR},
|
||||
file_path = #{filePath,jdbcType=VARCHAR},
|
||||
file_type = #{fileType,jdbcType=VARCHAR},
|
||||
file_length = #{fileLength,jdbcType=INTEGER},
|
||||
parent_id = #{parentId,jdbcType=INTEGER},
|
||||
level = #{level,jdbcType=INTEGER}
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</update>
|
||||
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
|
||||
delete from temp_plate_file
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</delete>
|
||||
|
||||
|
||||
<delete id="turncateTable">
|
||||
delete from temp_plate_file;
|
||||
delete from sqlite_sequence WHERE name = 'temp_plate_file'
|
||||
</delete>
|
||||
|
||||
|
||||
<insert id="batchInsert" parameterType = "com.yuxue.entity.TempPlateFileEntity">
|
||||
insert into temp_plate_file (file_name, file_path, file_type)
|
||||
values
|
||||
<foreach collection="list" index="index" item="item" open="(" close=")" separator="),(">
|
||||
ifnull(#{item.fileName, jdbcType=VARCHAR}, ''),
|
||||
ifnull(#{item.filePath, jdbcType=VARCHAR}, ''),
|
||||
ifnull(#{item.fileType, jdbcType=VARCHAR}, '')
|
||||
</foreach>
|
||||
</insert>
|
||||
|
||||
|
||||
<insert id="updateFileInfo">
|
||||
insert into t_plate_file (file_name, file_path, file_type)
|
||||
select file_name, file_path, file_type from temp_plate_file temp
|
||||
where not exists (select 1 from t_plate_file t where t.file_path = temp.file_path )
|
||||
</insert>
|
||||
|
||||
|
||||
|
||||
|
||||
</mapper>
|
@ -0,0 +1,64 @@
|
||||
label.error {
|
||||
font-weight: normal;
|
||||
margin: 0
|
||||
}
|
||||
.fa-cb-container {
|
||||
display: inline-block;
|
||||
}
|
||||
.fa-cb-box {
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
display: -webkit-flex;
|
||||
display: -ms-flexbox;
|
||||
align-items: center;
|
||||
}
|
||||
.fa-cb-label {
|
||||
display: inline-block;
|
||||
text-align: right;
|
||||
padding-right: 5px;
|
||||
}
|
||||
.ck-box input {
|
||||
display: none;
|
||||
}
|
||||
.ck-box .ck-bg {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.ck-16 {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
.ck-22 {
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
}
|
||||
.ck-16 .ck-bg {
|
||||
background: url('../../img/common/ck_bg_16.png') no-repeat 0 0;
|
||||
}
|
||||
.ck-16 .ck-bg:hover {
|
||||
background: url('../../img/common/ck_bg_16.png') no-repeat -17px 0;
|
||||
}
|
||||
.ck-16 input:checked+.ck-bg {
|
||||
background-position: -35px 0;
|
||||
}
|
||||
.ck-22 .ck-bg {
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
background: url('../img/ck_bg_22.png') no-repeat 0 0;
|
||||
}
|
||||
.ck-22 .ck-bg:hover {
|
||||
background: url('../img/ck_bg_22.png') no-repeat -24px 0;
|
||||
}
|
||||
.ck-22 input:checked+.ck-bg {
|
||||
background-position: -48px 0;
|
||||
}
|
||||
.w100{
|
||||
width:100%;
|
||||
}
|
||||
.h100{
|
||||
height:100%;
|
||||
}
|
||||
.dis-none{
|
||||
display: none
|
||||
}
|
@ -0,0 +1,336 @@
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7qsDJT9g.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7jsDJT9g.woff2) format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7rsDJT9g.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7ksDJT9g.woff2) format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7osDJT9g.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7psDJT9g.woff2) format('woff2');
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7nsDI.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmhduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwkxduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmxduz8A.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlBduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmBduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmRduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lqDY.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lqDY.woff2) format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lqDY.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lqDY.woff2) format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lqDY.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lqDY.woff2) format('woff2');
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7l.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmhduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwkxduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmxduz8A.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlBduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmhduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwkxduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmxduz8A.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlBduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
src: local('Source Sans Pro Black'), local('SourceSansPro-Black'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmhduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
src: local('Source Sans Pro Black'), local('SourceSansPro-Black'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwkxduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
src: local('Source Sans Pro Black'), local('SourceSansPro-Black'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmxduz8A.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
src: local('Source Sans Pro Black'), local('SourceSansPro-Black'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlBduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
src: local('Source Sans Pro Black'), local('SourceSansPro-Black'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmBduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
src: local('Source Sans Pro Black'), local('SourceSansPro-Black'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmRduz8A.woff2) format('woff2');
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
src: local('Source Sans Pro Black'), local('SourceSansPro-Black'), url(http://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlxdu.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
After Width: | Height: | Size: 106 KiB |
@ -0,0 +1,711 @@
|
||||
|
||||
.row {
|
||||
margin-right: -10px;
|
||||
margin-left: -10px;
|
||||
}
|
||||
.col-lg-1,
|
||||
.col-lg-10,
|
||||
.col-lg-11,
|
||||
.col-lg-12,
|
||||
.col-lg-2,
|
||||
.col-lg-3,
|
||||
.col-lg-4,
|
||||
.col-lg-5,
|
||||
.col-lg-6,
|
||||
.col-lg-7,
|
||||
.col-lg-8,
|
||||
.col-lg-9,
|
||||
.col-md-1,
|
||||
.col-md-10,
|
||||
.col-md-11,
|
||||
.col-md-12,
|
||||
.col-md-2,
|
||||
.col-md-3,
|
||||
.col-md-4,
|
||||
.col-md-5,
|
||||
.col-md-6,
|
||||
.col-md-7,
|
||||
.col-md-8,
|
||||
.col-md-9,
|
||||
.col-sm-1,
|
||||
.col-sm-10,
|
||||
.col-sm-11,
|
||||
.col-sm-12,
|
||||
.col-sm-2,
|
||||
.col-sm-3,
|
||||
.col-sm-4,
|
||||
.col-sm-5,
|
||||
.col-sm-6,
|
||||
.col-sm-7,
|
||||
.col-sm-8,
|
||||
.col-sm-9,
|
||||
.col-xs-1,
|
||||
.col-xs-10,
|
||||
.col-xs-11,
|
||||
.col-xs-12,
|
||||
.col-xs-2,
|
||||
.col-xs-3,
|
||||
.col-xs-4,
|
||||
.col-xs-5,
|
||||
.col-xs-6,
|
||||
.col-xs-7,
|
||||
.col-xs-8,
|
||||
.col-xs-9 {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
a{
|
||||
color: #333b4d;
|
||||
cursor: pointer;
|
||||
outline: none !important;
|
||||
}
|
||||
a:hover,a:focus{
|
||||
color: #2A3542;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
ul, ol {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
|
||||
.list-group{
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
.popover {
|
||||
border-radius: 3px;
|
||||
}
|
||||
/*panel*/
|
||||
.panel{
|
||||
padding: 20px 30px;
|
||||
border: none;
|
||||
border-top: 1px solid #ddd;
|
||||
margin-bottom: 20px;
|
||||
box-shadow: none;
|
||||
}
|
||||
.panel .panel-body{
|
||||
padding: 0px;
|
||||
padding-top: 20px;
|
||||
}
|
||||
.panel .panel-body p{
|
||||
margin: 0px;
|
||||
}
|
||||
.panel .panel-body p+p {
|
||||
margin-top: 15px;
|
||||
}
|
||||
.panel-default > .panel-heading {
|
||||
background-color: #FFFFFF;
|
||||
border-color: #DDDDDD;
|
||||
color: #797979;
|
||||
}
|
||||
.panel-heading {
|
||||
border-color:#eff2f7 ;
|
||||
font-size: 16px;
|
||||
padding: 0;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
.panel-title {
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
margin-bottom: 0;
|
||||
margin-top: 0;
|
||||
}
|
||||
.panel-footer {
|
||||
margin: 0px -30px -30px;
|
||||
background: #eee;
|
||||
border-top: 0px;
|
||||
}
|
||||
.panel-group .panel .panel-heading {
|
||||
padding-bottom: 0;
|
||||
border-bottom: 0;
|
||||
}
|
||||
.panel-group .panel {
|
||||
margin-bottom: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
/*label*/
|
||||
|
||||
.label {
|
||||
padding: 0.4em .8em;
|
||||
}
|
||||
|
||||
.label-default {
|
||||
background-color: #a1a1a1;
|
||||
}
|
||||
|
||||
.label-primary {
|
||||
background-color: #3bc0c3;
|
||||
}
|
||||
|
||||
.label-success {
|
||||
background-color: #2eb398;
|
||||
}
|
||||
|
||||
.label-info {
|
||||
background-color: #5bc0de;
|
||||
}
|
||||
|
||||
.label-warning {
|
||||
background-color: #f4984e;
|
||||
}
|
||||
|
||||
.label-danger {
|
||||
background-color: #FF6C60;
|
||||
}
|
||||
|
||||
.label-inverse {
|
||||
background-color: #344860;
|
||||
}
|
||||
.label-purple{
|
||||
background-color: #7266ba;
|
||||
}
|
||||
.label-pink{
|
||||
background-color: #f13c6e;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.badge {
|
||||
display: inline-block;
|
||||
min-width: 10px;
|
||||
padding: 3px 6px;
|
||||
font-size: 11px !important;
|
||||
font-weight: normal;
|
||||
color: #ffffff;
|
||||
line-height: 1;
|
||||
vertical-align: baseline;
|
||||
white-space: nowrap;
|
||||
text-align: center;
|
||||
background-color: #777777;
|
||||
border-color: #777777;
|
||||
border-radius: 12px;
|
||||
}
|
||||
.badge-danger{
|
||||
background-color: #cb2a2a;
|
||||
}
|
||||
.badge-info{
|
||||
background-color: #1ca8dd;
|
||||
}
|
||||
.btn{
|
||||
border-radius: 2px;
|
||||
opacity: 0.9;
|
||||
}
|
||||
.btn:hover{
|
||||
opacity: 1;
|
||||
}
|
||||
.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger,.btn-inverse,.btn-purple,.btn-pink{
|
||||
color: #FFFFFF !important;
|
||||
}
|
||||
.btn-default:hover,.btn-default:focus,.btn-default:active{
|
||||
background-color: #e6eaed;
|
||||
}
|
||||
|
||||
.btn-primary,.btn-primary:hover,.btn-primary:focus,.btn-primary:active,
|
||||
.btn-primary.active, .btn-primary.focus, .btn-primary:active, .btn-primary:focus, .btn-primary:hover, .open>.dropdown-toggle.btn-primary{
|
||||
background-color: #3bc0c3;
|
||||
border: 1px solid #3bc0c3;
|
||||
}
|
||||
.btn-success,.btn-success:hover,.btn-success:focus,.btn-success:active,
|
||||
.btn-success.active, .btn-success.focus, .btn-success:active, .btn-success:focus, .btn-success:hover, .open>.dropdown-toggle.btn-success{
|
||||
background-color: #33b86c;
|
||||
border: 1px solid #33b86c;
|
||||
}
|
||||
.btn-info,.btn-info:hover,.btn-info:focus,.btn-info:active,
|
||||
.btn-info.active, .btn-info.focus, .btn-info:active, .btn-info:focus, .btn-info:hover, .open>.dropdown-toggle.btn-info{
|
||||
background-color: #1ca8dd;
|
||||
border: 1px solid #1ca8dd;
|
||||
}
|
||||
.btn-warning,.btn-warning:hover,.btn-warning:focus,.btn-warning:active,
|
||||
.btn-warning.active, .btn-warning.focus, .btn-warning:active, .btn-warning:focus, .btn-warning:hover, .open>.dropdown-toggle.btn-warning{
|
||||
background-color: #ebc142;
|
||||
border: 1px solid #ebc142;
|
||||
}
|
||||
.btn-danger,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,
|
||||
.btn-danger.active, .btn-danger.focus, .btn-danger:active, .btn-danger:focus, .btn-danger:hover, .open>.dropdown-toggle.btn-danger{
|
||||
background-color: #cb2a2a;
|
||||
border: 1px solid #cb2a2a;
|
||||
}
|
||||
.btn-inverse,.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,
|
||||
.btn-inverse.active, .btn-inverse.focus, .btn-inverse:active, .btn-inverse:focus, .btn-inverse:hover, .open>.dropdown-toggle.btn-inverse{
|
||||
background-color: #14082d;
|
||||
border: 1px solid #14082d;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
.btn-purple,.btn-purple:hover,.btn-purple:focus,.btn-purple:active{
|
||||
background-color: #615ca8;
|
||||
border: 1px solid #615ca8;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
.btn-pink,.btn-pink:hover,.btn-pink:focus,.btn-pink:active{
|
||||
background-color: #f13c6e;
|
||||
border: 1px solid #f13c6e;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
/*text color*/
|
||||
.text-white {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.text-danger {
|
||||
color: #cb2a2a;
|
||||
}
|
||||
|
||||
.text-muted {
|
||||
color: #98a6ad;
|
||||
}
|
||||
|
||||
.text-primary {
|
||||
color: #3bc0c3;
|
||||
}
|
||||
|
||||
.text-warning {
|
||||
color: #ebc142;
|
||||
}
|
||||
|
||||
.text-success {
|
||||
color: #33b86c;
|
||||
}
|
||||
|
||||
.text-info {
|
||||
color: #1ca8dd;
|
||||
}
|
||||
|
||||
.text-inverse {
|
||||
color: #14082d;
|
||||
}
|
||||
|
||||
.text-pink {
|
||||
color: #F13C6E;
|
||||
}
|
||||
.text-purple {
|
||||
color: #615ca8;
|
||||
}
|
||||
/* text-color */
|
||||
.text-dark {
|
||||
color: #797979;
|
||||
}
|
||||
/*modal*/
|
||||
.modal .modal-dialog .modal-content {
|
||||
-webkit-box-shadow: none;
|
||||
-moz-box-shadow: none;
|
||||
box-shadow: none;
|
||||
border-color: #DDDDDD;
|
||||
padding: 30px;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.modal .modal-dialog .modal-content .modal-header {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border-bottom-width: 2px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
.modal .modal-dialog .modal-content .modal-body {
|
||||
padding: 20px 0;
|
||||
}
|
||||
.modal .modal-dialog .modal-content .modal-footer {
|
||||
padding: 0;
|
||||
padding-top: 15px;
|
||||
}
|
||||
.modal-full {
|
||||
width: 98%;
|
||||
}
|
||||
|
||||
/*text input*/
|
||||
|
||||
.form-control {
|
||||
background-color: #fafafa;
|
||||
color: rgba(0,0,0,0.6);
|
||||
font-size: 14px;
|
||||
-webkit-border-radius: 2px;
|
||||
-moz-border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
-webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
|
||||
-moz-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
|
||||
box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
|
||||
border: 1px solid #eee;
|
||||
box-shadow: none;
|
||||
}
|
||||
.form-control:focus {
|
||||
border: 1px solid #e0e0e0;
|
||||
background: #FFF;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
|
||||
|
||||
input, textarea, select, button {
|
||||
outline: none !important;
|
||||
}
|
||||
textarea.form-control {
|
||||
height: auto;
|
||||
min-height: 100px;
|
||||
}
|
||||
.input-group-addon {
|
||||
border: 1px solid #eee;
|
||||
border-radius: 2px;
|
||||
}
|
||||
/*list*/
|
||||
|
||||
|
||||
|
||||
|
||||
/*dropdown select bg*/
|
||||
.dropdown-menu {
|
||||
border-radius: 2px;
|
||||
-webkit-box-shadow: 0 2px 6px rgba(0,0,0,0.1);
|
||||
box-shadow: 0 2px 6px rgba(0,0,0,0.1);
|
||||
margin-top: 0px;
|
||||
}
|
||||
.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
|
||||
background-color: #edf1f2!important;
|
||||
color: #141719;
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
.dropdown-menu .divider {
|
||||
margin: 6px 0;
|
||||
}
|
||||
|
||||
/*split dropdown btn*/
|
||||
|
||||
.btn-white {
|
||||
background-clip: padding-box;
|
||||
background-color: #FFFFFF;
|
||||
border-color: rgba(150, 160, 180, 0.3);
|
||||
box-shadow: 0 -1px 1px rgba(0, 0, 0, 0.05) inset;
|
||||
}
|
||||
|
||||
/*breadcrumbs*/
|
||||
|
||||
.breadcrumb {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
|
||||
/*tab*/
|
||||
|
||||
.nav-tabs > li > a {
|
||||
margin-right: 1px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*nav inverse*/
|
||||
|
||||
.navbar-inverse {
|
||||
background-color: #7087A3;
|
||||
border-color: #7087A3;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus,
|
||||
.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:focus{
|
||||
background-color: #61748d;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav > li a:hover {
|
||||
color: #2A3542;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav > li > ul > li a:hover {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-brand {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav > li > a {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav > .dropdown > a .caret {
|
||||
border-bottom-color: #fff;
|
||||
border-top-color: #fff;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
|
||||
color: #000;
|
||||
}
|
||||
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/*nav justified*/
|
||||
|
||||
.nav-justified li:last-child > a:hover, .nav-justified li.active:last-child > a {
|
||||
border-radius: 0 4px 0 0 !important;
|
||||
-webkit-border-radius: 0 4px 0 0 !important;
|
||||
}
|
||||
|
||||
/*list group*/
|
||||
|
||||
.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {
|
||||
background-color: #ddd;
|
||||
border-color: #ddd;
|
||||
color: #444;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.list-group-item,.list-group-item:first-child ,.list-group-item:last-child {
|
||||
border-radius: 0px;
|
||||
padding: 12px 20px;
|
||||
}
|
||||
|
||||
.list-group-item-heading {
|
||||
font-weight: 300;
|
||||
}
|
||||
.list-group-item.active>.badge, .nav-pills>.active>a>.badge {
|
||||
color: #3bc0c3;
|
||||
}
|
||||
.list-group-item.active .list-group-item-text, .list-group-item.active:focus .list-group-item-text, .list-group-item.active:hover .list-group-item-text {
|
||||
color: #3bc0c3;
|
||||
}
|
||||
/*progress*/
|
||||
|
||||
.progress {
|
||||
box-shadow: none;
|
||||
background: #f0f2f7;
|
||||
}
|
||||
|
||||
/*alert*/
|
||||
|
||||
.alert-success, .alert-danger, .alert-info, .alert-warning {
|
||||
border: none;
|
||||
}
|
||||
|
||||
/*table*/
|
||||
|
||||
.table thead > tr > th, .table tbody > tr > th, .table tfoot > tr > th, .table thead > tr > td, .table tbody > tr > td, .table tfoot > tr > td {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.bg-primary{
|
||||
background-color: rgba(59, 192, 195, 0.8);
|
||||
}
|
||||
.bg-success{
|
||||
background-color: rgba(51, 184, 108, 0.8);
|
||||
}
|
||||
.bg-info{
|
||||
background-color: rgba(28, 168, 221, 0.8);
|
||||
}
|
||||
.bg-warning{
|
||||
background-color: rgba(235, 193, 66, 0.8);
|
||||
}
|
||||
.bg-danger{
|
||||
background-color: rgba(203, 42, 42, 0.8);
|
||||
}
|
||||
.bg-muted {
|
||||
background-color: #d0d0d0;
|
||||
}
|
||||
.bg-inverse {
|
||||
background-color: rgba(20, 8, 45, 0.8);
|
||||
}
|
||||
.bg-purple {
|
||||
background-color: rgba(97, 92, 168, 0.8) !important;
|
||||
}
|
||||
.bg-pink {
|
||||
background-color: rgba(241, 60, 110, 0.8);
|
||||
}
|
||||
.white-bg{
|
||||
background-color: #ffffff;
|
||||
}
|
||||
.bg-fb{
|
||||
background-color: #3b5998;
|
||||
}
|
||||
.bg-gp{
|
||||
background-color: #dd4b39;
|
||||
}
|
||||
.bg-tw{
|
||||
background-color: #00aced;
|
||||
}
|
||||
.bg-dribbble{
|
||||
background-color: #ea4c89;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* ------ btn-custom -----*/
|
||||
.btn-custom{
|
||||
background: transparent;
|
||||
-moz-border-radius: 2px;
|
||||
-webkit-border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
border-width: 1px;
|
||||
-webkit-transition: all 400ms ease-in-out;
|
||||
-moz-transition: all 400ms ease-in-out;
|
||||
-o-transition: all 400ms ease-in-out;
|
||||
transition: all 400ms ease-in-out;
|
||||
}
|
||||
.btn-custom.btn-default:hover,.btn-custom.btn-default:active,.btn-custom.btn-default:focus{
|
||||
color: #333 !important;
|
||||
}
|
||||
.btn-custom.btn-primary{
|
||||
color: #3bc0c3 !important;
|
||||
}
|
||||
.btn-custom.btn-success{
|
||||
color: #33b86c !important;
|
||||
}
|
||||
.btn-custom.btn-info{
|
||||
color: #1ca8dd !important;
|
||||
}
|
||||
.btn-custom.btn-warning{
|
||||
color: #ebc142 !important;
|
||||
}
|
||||
.btn-custom.btn-danger{
|
||||
color: #cb2a2a !important;
|
||||
}
|
||||
.btn-custom.btn-inverse{
|
||||
color: #14082d !important;
|
||||
}
|
||||
.btn-custom.btn-purple{
|
||||
color: #615ca8 !important;
|
||||
}
|
||||
.btn-custom.btn-pink{
|
||||
color: #f13c6e !important;
|
||||
}
|
||||
.btn-custom:hover,.btn-custom:focus{
|
||||
color: #FFFFFF !important;
|
||||
}
|
||||
|
||||
.btn-rounded {
|
||||
border-radius: 2em;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.panel.panel-color .panel-heading {
|
||||
margin-top: -20px;
|
||||
margin-left: -30px;
|
||||
margin-right: -30px;
|
||||
padding: 20px 30px;
|
||||
border-bottom: 0;
|
||||
}
|
||||
.panel-group {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
.panel-group >.panel.panel-color .panel-heading {
|
||||
margin-top: -20px;
|
||||
margin-left: -30px;
|
||||
margin-right: -30px;
|
||||
padding: 20px 30px;
|
||||
border-bottom: 0;
|
||||
margin-bottom: -20px !important;
|
||||
border-radius: 0px !important;
|
||||
}
|
||||
|
||||
.panel.panel-primary .panel-heading {
|
||||
background-color: #3bc0c3;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.panel.panel-success .panel-heading {
|
||||
background-color: #33b86c;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.panel.panel-info .panel-heading {
|
||||
background-color: #1ca8dd;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.panel.panel-warning .panel-heading {
|
||||
background-color: #ebc142;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.panel.panel-danger .panel-heading {
|
||||
background-color: #cb2a2a;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.panel.panel-inverse .panel-heading {
|
||||
background-color: #14082d;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.panel.panel-purple .panel-heading {
|
||||
background-color: #615ca8;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.panel.panel-pink .panel-heading {
|
||||
background-color: #f13c6e;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.progress {
|
||||
overflow: hidden;
|
||||
margin-bottom: 18px;
|
||||
background-color: #f5f5f5;
|
||||
border-radius: 0px;
|
||||
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1) !important;
|
||||
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1) !important;
|
||||
height: 10px;
|
||||
}
|
||||
.progress-bar{
|
||||
font-size: 8px;
|
||||
line-height: 12px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.progress.progress-md {
|
||||
height: 15px !important;
|
||||
}
|
||||
.progress.progress-lg {
|
||||
height: 20px !important;
|
||||
}
|
||||
.progress.progress-md .progress-bar {
|
||||
font-size: 10.8px;
|
||||
line-height: 14.4px;
|
||||
}
|
||||
.progress.progress-lg .progress-bar {
|
||||
font-size: 12px;
|
||||
line-height: 20px;
|
||||
}
|
||||
.progress-bar-primary {
|
||||
background-color: #3bc0c3;
|
||||
}
|
||||
|
||||
.progress-bar-success {
|
||||
background-color: #33b86c;
|
||||
}
|
||||
|
||||
.progress-bar-info {
|
||||
background-color: #1ca8dd;
|
||||
}
|
||||
|
||||
.progress-bar-warning {
|
||||
background-color: #ebc142;
|
||||
}
|
||||
|
||||
.progress-bar-danger {
|
||||
background-color: #cb2a2a;
|
||||
}
|
||||
|
||||
.progress-bar-inverse {
|
||||
background-color: #14082d;
|
||||
}
|
||||
|
||||
.progress-bar-purple {
|
||||
background-color: #615ca8;
|
||||
}
|
||||
|
||||
.progress-bar-pink {
|
||||
background-color: #f13c6e;
|
||||
}
|
||||
|
||||
.pagination>li>a, .pagination>li>span {
|
||||
color: #373e4a;
|
||||
background-color: #fff;
|
||||
border: 1px solid #ddd;
|
||||
}
|
||||
.pagination>.active>a, .pagination>.active>span, .pagination>.active>a:hover, .pagination>.active>span:hover, .pagination>.active>a:focus, .pagination>.active>span:focus {
|
||||
background-color: #1c2b36;
|
||||
border-color: #1c2b36;
|
||||
}
|
@ -0,0 +1,587 @@
|
||||
/*!
|
||||
* Bootstrap v3.3.6 (http://getbootstrap.com)
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
.btn-default,
|
||||
.btn-primary,
|
||||
.btn-success,
|
||||
.btn-info,
|
||||
.btn-warning,
|
||||
.btn-danger {
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
|
||||
}
|
||||
.btn-default:active,
|
||||
.btn-primary:active,
|
||||
.btn-success:active,
|
||||
.btn-info:active,
|
||||
.btn-warning:active,
|
||||
.btn-danger:active,
|
||||
.btn-default.active,
|
||||
.btn-primary.active,
|
||||
.btn-success.active,
|
||||
.btn-info.active,
|
||||
.btn-warning.active,
|
||||
.btn-danger.active {
|
||||
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
|
||||
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
|
||||
}
|
||||
.btn-default.disabled,
|
||||
.btn-primary.disabled,
|
||||
.btn-success.disabled,
|
||||
.btn-info.disabled,
|
||||
.btn-warning.disabled,
|
||||
.btn-danger.disabled,
|
||||
.btn-default[disabled],
|
||||
.btn-primary[disabled],
|
||||
.btn-success[disabled],
|
||||
.btn-info[disabled],
|
||||
.btn-warning[disabled],
|
||||
.btn-danger[disabled],
|
||||
fieldset[disabled] .btn-default,
|
||||
fieldset[disabled] .btn-primary,
|
||||
fieldset[disabled] .btn-success,
|
||||
fieldset[disabled] .btn-info,
|
||||
fieldset[disabled] .btn-warning,
|
||||
fieldset[disabled] .btn-danger {
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
.btn-default .badge,
|
||||
.btn-primary .badge,
|
||||
.btn-success .badge,
|
||||
.btn-info .badge,
|
||||
.btn-warning .badge,
|
||||
.btn-danger .badge {
|
||||
text-shadow: none;
|
||||
}
|
||||
.btn:active,
|
||||
.btn.active {
|
||||
background-image: none;
|
||||
}
|
||||
.btn-default {
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
|
||||
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
|
||||
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #dbdbdb;
|
||||
border-color: #ccc;
|
||||
}
|
||||
.btn-default:hover,
|
||||
.btn-default:focus {
|
||||
background-color: #e0e0e0;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-default:active,
|
||||
.btn-default.active {
|
||||
background-color: #e0e0e0;
|
||||
border-color: #dbdbdb;
|
||||
}
|
||||
.btn-default.disabled,
|
||||
.btn-default[disabled],
|
||||
fieldset[disabled] .btn-default,
|
||||
.btn-default.disabled:hover,
|
||||
.btn-default[disabled]:hover,
|
||||
fieldset[disabled] .btn-default:hover,
|
||||
.btn-default.disabled:focus,
|
||||
.btn-default[disabled]:focus,
|
||||
fieldset[disabled] .btn-default:focus,
|
||||
.btn-default.disabled.focus,
|
||||
.btn-default[disabled].focus,
|
||||
fieldset[disabled] .btn-default.focus,
|
||||
.btn-default.disabled:active,
|
||||
.btn-default[disabled]:active,
|
||||
fieldset[disabled] .btn-default:active,
|
||||
.btn-default.disabled.active,
|
||||
.btn-default[disabled].active,
|
||||
fieldset[disabled] .btn-default.active {
|
||||
background-color: #e0e0e0;
|
||||
background-image: none;
|
||||
}
|
||||
.btn-primary {
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #245580;
|
||||
}
|
||||
.btn-primary:hover,
|
||||
.btn-primary:focus {
|
||||
background-color: #265a88;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-primary:active,
|
||||
.btn-primary.active {
|
||||
background-color: #265a88;
|
||||
border-color: #245580;
|
||||
}
|
||||
.btn-primary.disabled,
|
||||
.btn-primary[disabled],
|
||||
fieldset[disabled] .btn-primary,
|
||||
.btn-primary.disabled:hover,
|
||||
.btn-primary[disabled]:hover,
|
||||
fieldset[disabled] .btn-primary:hover,
|
||||
.btn-primary.disabled:focus,
|
||||
.btn-primary[disabled]:focus,
|
||||
fieldset[disabled] .btn-primary:focus,
|
||||
.btn-primary.disabled.focus,
|
||||
.btn-primary[disabled].focus,
|
||||
fieldset[disabled] .btn-primary.focus,
|
||||
.btn-primary.disabled:active,
|
||||
.btn-primary[disabled]:active,
|
||||
fieldset[disabled] .btn-primary:active,
|
||||
.btn-primary.disabled.active,
|
||||
.btn-primary[disabled].active,
|
||||
fieldset[disabled] .btn-primary.active {
|
||||
background-color: #265a88;
|
||||
background-image: none;
|
||||
}
|
||||
.btn-success {
|
||||
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
|
||||
background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
|
||||
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #3e8f3e;
|
||||
}
|
||||
.btn-success:hover,
|
||||
.btn-success:focus {
|
||||
background-color: #419641;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-success:active,
|
||||
.btn-success.active {
|
||||
background-color: #419641;
|
||||
border-color: #3e8f3e;
|
||||
}
|
||||
.btn-success.disabled,
|
||||
.btn-success[disabled],
|
||||
fieldset[disabled] .btn-success,
|
||||
.btn-success.disabled:hover,
|
||||
.btn-success[disabled]:hover,
|
||||
fieldset[disabled] .btn-success:hover,
|
||||
.btn-success.disabled:focus,
|
||||
.btn-success[disabled]:focus,
|
||||
fieldset[disabled] .btn-success:focus,
|
||||
.btn-success.disabled.focus,
|
||||
.btn-success[disabled].focus,
|
||||
fieldset[disabled] .btn-success.focus,
|
||||
.btn-success.disabled:active,
|
||||
.btn-success[disabled]:active,
|
||||
fieldset[disabled] .btn-success:active,
|
||||
.btn-success.disabled.active,
|
||||
.btn-success[disabled].active,
|
||||
fieldset[disabled] .btn-success.active {
|
||||
background-color: #419641;
|
||||
background-image: none;
|
||||
}
|
||||
.btn-info {
|
||||
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
|
||||
background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
|
||||
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #28a4c9;
|
||||
}
|
||||
.btn-info:hover,
|
||||
.btn-info:focus {
|
||||
background-color: #2aabd2;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-info:active,
|
||||
.btn-info.active {
|
||||
background-color: #2aabd2;
|
||||
border-color: #28a4c9;
|
||||
}
|
||||
.btn-info.disabled,
|
||||
.btn-info[disabled],
|
||||
fieldset[disabled] .btn-info,
|
||||
.btn-info.disabled:hover,
|
||||
.btn-info[disabled]:hover,
|
||||
fieldset[disabled] .btn-info:hover,
|
||||
.btn-info.disabled:focus,
|
||||
.btn-info[disabled]:focus,
|
||||
fieldset[disabled] .btn-info:focus,
|
||||
.btn-info.disabled.focus,
|
||||
.btn-info[disabled].focus,
|
||||
fieldset[disabled] .btn-info.focus,
|
||||
.btn-info.disabled:active,
|
||||
.btn-info[disabled]:active,
|
||||
fieldset[disabled] .btn-info:active,
|
||||
.btn-info.disabled.active,
|
||||
.btn-info[disabled].active,
|
||||
fieldset[disabled] .btn-info.active {
|
||||
background-color: #2aabd2;
|
||||
background-image: none;
|
||||
}
|
||||
.btn-warning {
|
||||
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
|
||||
background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
|
||||
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #e38d13;
|
||||
}
|
||||
.btn-warning:hover,
|
||||
.btn-warning:focus {
|
||||
background-color: #eb9316;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-warning:active,
|
||||
.btn-warning.active {
|
||||
background-color: #eb9316;
|
||||
border-color: #e38d13;
|
||||
}
|
||||
.btn-warning.disabled,
|
||||
.btn-warning[disabled],
|
||||
fieldset[disabled] .btn-warning,
|
||||
.btn-warning.disabled:hover,
|
||||
.btn-warning[disabled]:hover,
|
||||
fieldset[disabled] .btn-warning:hover,
|
||||
.btn-warning.disabled:focus,
|
||||
.btn-warning[disabled]:focus,
|
||||
fieldset[disabled] .btn-warning:focus,
|
||||
.btn-warning.disabled.focus,
|
||||
.btn-warning[disabled].focus,
|
||||
fieldset[disabled] .btn-warning.focus,
|
||||
.btn-warning.disabled:active,
|
||||
.btn-warning[disabled]:active,
|
||||
fieldset[disabled] .btn-warning:active,
|
||||
.btn-warning.disabled.active,
|
||||
.btn-warning[disabled].active,
|
||||
fieldset[disabled] .btn-warning.active {
|
||||
background-color: #eb9316;
|
||||
background-image: none;
|
||||
}
|
||||
.btn-danger {
|
||||
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
|
||||
background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
|
||||
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #b92c28;
|
||||
}
|
||||
.btn-danger:hover,
|
||||
.btn-danger:focus {
|
||||
background-color: #c12e2a;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-danger:active,
|
||||
.btn-danger.active {
|
||||
background-color: #c12e2a;
|
||||
border-color: #b92c28;
|
||||
}
|
||||
.btn-danger.disabled,
|
||||
.btn-danger[disabled],
|
||||
fieldset[disabled] .btn-danger,
|
||||
.btn-danger.disabled:hover,
|
||||
.btn-danger[disabled]:hover,
|
||||
fieldset[disabled] .btn-danger:hover,
|
||||
.btn-danger.disabled:focus,
|
||||
.btn-danger[disabled]:focus,
|
||||
fieldset[disabled] .btn-danger:focus,
|
||||
.btn-danger.disabled.focus,
|
||||
.btn-danger[disabled].focus,
|
||||
fieldset[disabled] .btn-danger.focus,
|
||||
.btn-danger.disabled:active,
|
||||
.btn-danger[disabled]:active,
|
||||
fieldset[disabled] .btn-danger:active,
|
||||
.btn-danger.disabled.active,
|
||||
.btn-danger[disabled].active,
|
||||
fieldset[disabled] .btn-danger.active {
|
||||
background-color: #c12e2a;
|
||||
background-image: none;
|
||||
}
|
||||
.thumbnail,
|
||||
.img-thumbnail {
|
||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
|
||||
}
|
||||
.dropdown-menu > li > a:hover,
|
||||
.dropdown-menu > li > a:focus {
|
||||
background-color: #e8e8e8;
|
||||
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
||||
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
|
||||
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.dropdown-menu > .active > a,
|
||||
.dropdown-menu > .active > a:hover,
|
||||
.dropdown-menu > .active > a:focus {
|
||||
background-color: #2e6da4;
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.navbar-default {
|
||||
background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
|
||||
background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
|
||||
background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
|
||||
}
|
||||
.navbar-default .navbar-nav > .open > a,
|
||||
.navbar-default .navbar-nav > .active > a {
|
||||
background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
|
||||
background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
|
||||
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
|
||||
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
|
||||
}
|
||||
.navbar-brand,
|
||||
.navbar-nav > li > a {
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
|
||||
}
|
||||
.navbar-inverse {
|
||||
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
|
||||
background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
|
||||
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.navbar-inverse .navbar-nav > .open > a,
|
||||
.navbar-inverse .navbar-nav > .active > a {
|
||||
background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
|
||||
background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
|
||||
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
|
||||
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
|
||||
}
|
||||
.navbar-inverse .navbar-brand,
|
||||
.navbar-inverse .navbar-nav > li > a {
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
|
||||
}
|
||||
.navbar-static-top,
|
||||
.navbar-fixed-top,
|
||||
.navbar-fixed-bottom {
|
||||
border-radius: 0;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.navbar .navbar-nav .open .dropdown-menu > .active > a,
|
||||
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
|
||||
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
|
||||
color: #fff;
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
}
|
||||
.alert {
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
|
||||
}
|
||||
.alert-success {
|
||||
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
|
||||
background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
|
||||
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #b2dba1;
|
||||
}
|
||||
.alert-info {
|
||||
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
|
||||
background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
|
||||
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #9acfea;
|
||||
}
|
||||
.alert-warning {
|
||||
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
|
||||
background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
|
||||
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #f5e79e;
|
||||
}
|
||||
.alert-danger {
|
||||
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
|
||||
background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
|
||||
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #dca7a7;
|
||||
}
|
||||
.progress {
|
||||
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
|
||||
background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
|
||||
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar {
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar-success {
|
||||
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
|
||||
background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
|
||||
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar-info {
|
||||
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
|
||||
background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
|
||||
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar-warning {
|
||||
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
|
||||
background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
|
||||
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar-danger {
|
||||
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
|
||||
background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
|
||||
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar-striped {
|
||||
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
||||
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
||||
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
||||
}
|
||||
.list-group {
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
|
||||
}
|
||||
.list-group-item.active,
|
||||
.list-group-item.active:hover,
|
||||
.list-group-item.active:focus {
|
||||
text-shadow: 0 -1px 0 #286090;
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #2b669a;
|
||||
}
|
||||
.list-group-item.active .badge,
|
||||
.list-group-item.active:hover .badge,
|
||||
.list-group-item.active:focus .badge {
|
||||
text-shadow: none;
|
||||
}
|
||||
.panel {
|
||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
|
||||
}
|
||||
.panel-default > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
||||
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
|
||||
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.panel-primary > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.panel-success > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
|
||||
background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
|
||||
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.panel-info > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
|
||||
background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
|
||||
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.panel-warning > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
|
||||
background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
|
||||
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.panel-danger > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
|
||||
background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
|
||||
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.well {
|
||||
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
|
||||
background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
|
||||
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #dcdcdc;
|
||||
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
|
||||
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
|
||||
}
|
||||
/*# sourceMappingURL=bootstrap-theme.css.map */
|
@ -0,0 +1,299 @@
|
||||
/* Animation / Shadow / Radius */
|
||||
|
||||
.log-in-detail a,
|
||||
.icon-list div:hover,
|
||||
.widget-style-1 i,
|
||||
.profile-widget,
|
||||
.portlet,
|
||||
.ionicon-list i {
|
||||
-webkit-transition: all 220ms ease-in-out;
|
||||
-moz-transition: all 220ms ease-in-out;
|
||||
-o-transition: all 220ms ease-in-out;
|
||||
transition: all 220ms ease-in-out;
|
||||
}
|
||||
.bx-s,
|
||||
.panel,
|
||||
.portlet,
|
||||
.nav.nav-tabs+.tab-content,
|
||||
.tabs-vertical-env .tab-content,
|
||||
.widget-panel,
|
||||
.profile-widget,
|
||||
.profile-widget img,
|
||||
.tiles,
|
||||
.tile-stats,
|
||||
.mini-stat,
|
||||
header {
|
||||
-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.br-radius,
|
||||
.tiles,
|
||||
.tile-stats,
|
||||
.portlet {
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
/* Padding - Margin */
|
||||
|
||||
.p-0 {
|
||||
padding: 0px !important;
|
||||
}
|
||||
.p-t-0 {
|
||||
padding-top: 0px !important;
|
||||
}
|
||||
.p-t-10 {
|
||||
padding-top: 10px !important;
|
||||
}
|
||||
.p-b-10 {
|
||||
padding-bottom: 10px !important;
|
||||
}
|
||||
.m-0 {
|
||||
margin: 0px !important;
|
||||
}
|
||||
.m-r-5 {
|
||||
margin-right: 5px;
|
||||
}
|
||||
.m-r-10 {
|
||||
margin-right: 10px;
|
||||
}
|
||||
.m-r-15 {
|
||||
margin-right: 15px;
|
||||
}
|
||||
.m-l-10 {
|
||||
margin-left: 10px;
|
||||
}
|
||||
.m-l-15 {
|
||||
margin-left: 15px;
|
||||
}
|
||||
.m-t-5 {
|
||||
margin-top: 5px !important;
|
||||
}
|
||||
.m-t-0 {
|
||||
margin-top: 0px;
|
||||
}
|
||||
.m-t-10 {
|
||||
margin-top: 10px !important;
|
||||
}
|
||||
.m-t-15 {
|
||||
margin-top: 15px;
|
||||
}
|
||||
.m-t-20 {
|
||||
margin-top: 20px;
|
||||
}
|
||||
.m-t-30 {
|
||||
margin-top: 30px !important;
|
||||
}
|
||||
.m-t-40 {
|
||||
margin-top: 40px !important;
|
||||
}
|
||||
.m-b-0 {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
.m-b-5 {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.m-b-10 {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.m-b-15 {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.m-b-30 {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
/* ---- Width-Sizes ---*/
|
||||
|
||||
.w-xs {
|
||||
min-width: 80px;
|
||||
}
|
||||
.w-sm {
|
||||
min-width: 95px;
|
||||
}
|
||||
.w-md {
|
||||
min-width: 110px;
|
||||
}
|
||||
.w-lg {
|
||||
min-width: 140px;
|
||||
}
|
||||
/* ---- Images-Sizes ---*/
|
||||
|
||||
.thumb-sm {
|
||||
height: 32px;
|
||||
width: 32px;
|
||||
}
|
||||
.thumb-sm img {
|
||||
height: auto;
|
||||
max-width: 100%;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.thumb-xs {
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
}
|
||||
.thumb-md {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
}
|
||||
.thumb-lg {
|
||||
height: 84px;
|
||||
width: 84px;
|
||||
}
|
||||
/* Text-sizes */
|
||||
|
||||
.text-xs {
|
||||
font-size: 12px;
|
||||
}
|
||||
.text-sm {
|
||||
font-size: 16px;
|
||||
}
|
||||
.text-md {
|
||||
font-size: 20px;
|
||||
}
|
||||
.text-lg {
|
||||
font-size: 24px !important;
|
||||
}
|
||||
/* Extra */
|
||||
|
||||
.m-h-50 {
|
||||
min-height: 50px;
|
||||
}
|
||||
.l-h-34 {
|
||||
line-height: 34px;
|
||||
}
|
||||
.font-light {
|
||||
font-weight: 300;
|
||||
}
|
||||
.wrapper-md {
|
||||
padding: 20px;
|
||||
}
|
||||
.pull-in {
|
||||
margin-left: -15px;
|
||||
margin-right: -15px;
|
||||
}
|
||||
.b-0 {
|
||||
border: none !important;
|
||||
}
|
||||
/* Dropcap */
|
||||
|
||||
.dropcap {
|
||||
font-size: 3.1em;
|
||||
}
|
||||
.dropcap,
|
||||
.dropcap-circle,
|
||||
.dropcap-square {
|
||||
display: block;
|
||||
float: left;
|
||||
font-weight: 400;
|
||||
line-height: 36px;
|
||||
margin-right: 6px;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
/* Custom Radio/Checkbox */
|
||||
.cr-styled {
|
||||
display: inline-block;
|
||||
margin: 0px 2px;
|
||||
line-height: 20px;
|
||||
font-weight: normal;
|
||||
cursor: pointer;
|
||||
}
|
||||
.cr-styled i {
|
||||
display: inline-block;
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
cursor: pointer;
|
||||
vertical-align: middle;
|
||||
border: 2px solid #CCC;
|
||||
border-radius: 3px;
|
||||
text-align: center;
|
||||
padding-top: 1px;
|
||||
font-family: 'FontAwesome';
|
||||
margin-top: -4px;
|
||||
margin-right: 3px;
|
||||
font-size: 12px;
|
||||
}
|
||||
.cr-styled input {
|
||||
visibility: hidden;
|
||||
display: none;
|
||||
}
|
||||
.cr-styled input[type=checkbox]:checked + i:before {
|
||||
content: "\f00c";
|
||||
}
|
||||
.cr-styled input[type=radio] + i {
|
||||
border-radius: 18px;
|
||||
font-size: 11px;
|
||||
line-height: 13px;
|
||||
}
|
||||
|
||||
.cr-styled input[type=radio]:checked + i:before {
|
||||
content: "\f111";
|
||||
}
|
||||
.cr-styled input:checked + i {
|
||||
border-color: #3bc0c3;
|
||||
color: #3bc0c3;
|
||||
}
|
||||
/* Icon-list (Used Icon-page only) */
|
||||
|
||||
.icon-list div {
|
||||
line-height: 40px;
|
||||
white-space: nowrap;
|
||||
cursor: pointer;
|
||||
}
|
||||
.icon-list i {
|
||||
display: inline-block;
|
||||
width: 40px;
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
-webkit-transition: font-size .2s;
|
||||
transition: font-size .2s;
|
||||
}
|
||||
.ionicon-list i {
|
||||
font-size: 16px;
|
||||
}
|
||||
.ionicon-list .col-md-3:hover i,
|
||||
.icon-list .col-md-3:hover i {
|
||||
moz-transform: scale(2);
|
||||
-webkit-transform: scale(2);
|
||||
-o-transform: scale(2);
|
||||
transform: scale(2);
|
||||
}
|
||||
/* Grid-structure (Used Grid-page only) */
|
||||
|
||||
.grid-structure .grid-container {
|
||||
background-color: #e6eaed;
|
||||
padding: 10px 20px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
/* Custom Choose-button */
|
||||
|
||||
.fileUpload {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.fileUpload input.upload {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 20px;
|
||||
cursor: pointer;
|
||||
opacity: 0;
|
||||
filter: alpha(opacity=0);
|
||||
}
|
||||
|
||||
|
||||
/* Only Mozila */
|
||||
@-moz-document url-prefix() {
|
||||
|
||||
.cr-styled i {
|
||||
padding-top: 0px;
|
||||
}
|
||||
label {
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
@ -0,0 +1,110 @@
|
||||
/*** Aside Collapsed ***/
|
||||
@media (min-width: 769px) {
|
||||
aside.left-panel.collapsed {
|
||||
width: 75px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
aside.left-panel.collapsed + .content {
|
||||
margin-left: 75px;
|
||||
}
|
||||
|
||||
aside.left-panel.collapsed .user .user-login,
|
||||
aside.left-panel.collapsed span.nav-label {
|
||||
display: none;
|
||||
}
|
||||
|
||||
aside.left-panel.collapsed .navigation > ul > li > a {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
aside.left-panel.collapsed i.fa {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
aside.left-panel.collapsed .navigation > ul > li.has-submenu:after {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/*** Aside Collapsed Sub Menu ***/
|
||||
@media (min-width: 769px) {
|
||||
aside.left-panel.collapsed .navigation > ul > li > ul {
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
left: 100%;
|
||||
top: 0px;
|
||||
background-color: #162338;
|
||||
box-shadow: none;
|
||||
padding: 10px 0px;
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
aside.left-panel.collapsed .navigation > ul > li:hover > ul {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
aside.left-panel.collapsed .navigation ul li ul li a {
|
||||
border: 0px;
|
||||
color: #b4b6bd;
|
||||
padding: 8px 25px 8px 40px;
|
||||
}
|
||||
|
||||
aside.left-panel.collapsed .navigation ul li ul li a:hover {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
aside.left-panel.collapsed .navigation ul li ul li ul li a:hover {
|
||||
color: #dedede;
|
||||
}
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
|
||||
|
||||
|
||||
aside.left-panel.collapsed {
|
||||
width: 250px;
|
||||
left: 0px;
|
||||
overflow: hidden !important;
|
||||
}
|
||||
|
||||
aside.left-panel.collapsed + .content {
|
||||
margin-left: 0px;
|
||||
transform: translate3d(250px, 0px, 0px);
|
||||
-ms-transform: translate3d(250px, 0px, 0px);
|
||||
-webkit-transform: translate3d(250px, 0px, 0px);
|
||||
-moz-transition: translate3d(250px, 0px, 0px);
|
||||
-o-transition: translate3d(250px, 0px, 0px);
|
||||
}
|
||||
|
||||
aside.left-panel {
|
||||
left: 100%;
|
||||
}
|
||||
|
||||
.footer {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
section.content {
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
.content > .container-fluid {
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
.page-header h1 {
|
||||
margin-top: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 450px) {
|
||||
|
||||
.username {
|
||||
display: none;
|
||||
}
|
||||
.dropdown .extended i {
|
||||
display: none;
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 4.2 KiB |
@ -0,0 +1,27 @@
|
||||
|
||||
@font-face {font-family: "iconfont";
|
||||
src: url('iconfont.eot?t=1527468348729'); /* IE9*/
|
||||
src: url('iconfont.eot?t=1527468348729#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
||||
url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAcwAAsAAAAACngAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFZW7ki8Y21hcAAAAYAAAACCAAAB1ptjoK1nbHlmAAACBAAAAw0AAAPYbpclnGhlYWQAAAUUAAAALwAAADYRgih1aGhlYQAABUQAAAAcAAAAJAfeA4hobXR4AAAFYAAAABMAAAAcG+kAAGxvY2EAAAV0AAAAEAAAABADaARmbWF4cAAABYQAAAAfAAAAIAEWAF1uYW1lAAAFpAAAAUUAAAJtPlT+fXBvc3QAAAbsAAAARAAAAFY2edzueJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2Bk/ss4gYGVgYOpk+kMAwNDP4RmfM1gxMjBwMDEwMrMgBUEpLmmMDgwVDw7y9zwv4EhhrmBoQEozAiSAwA0Mg0+eJzFkeENhSAMhK+CxBjiJE5i3gCOwi+XcR7XuDX0CrzkvQk88hGuaYG0AEYAQawiAnbA4CqKWo0HzDUe8ZHPmDDoXBi58eR1357N8OO+MmVnLHW5i7prVHWSSXhN9t7T/8p137vzjpSOvsjQ8Kmw45Pi1vDJ8Wyop+DVQHoAhiwgOwAAeJxdU81rE1EQf/Oe+7ZZN5vNfiYbm3Szm2y/THXzUWw1tR8WlGIFoVawWD2VgFKEWKgiUikIbcFLbx5UBM8KIkpR0LtnLwqiB/8CT3Z1tlER3y6/mXlvZpjfMEMEQn5+ZjssQ3TSSw6TKXKGEOADUFRoN7hBrUIHwHQF0zYUFniBK3rFCjsGdpEbVtiolW0u8hQokIeqGzaCCg2gXmvSUQitboBszjmrlQ5o7B5ImSC/Hp2ij8AseAdSzYPRycExI+zRu1ZkTctq2mYXF4QuSvelFLhiWwkhIfHosZByzJ1CHy2AnA2cmfPJnpx26W7tanfJTgDcvg16rkd5MpZ20vjfdCxdy4pqsivjJD3fgJWv+zO63F3+QvDsQ64P2DO2SPYTmwyQJjKtQNCE4TzYCjAFRFTQrAC4+FBuDOPXY1t2HkQFoMgRbcOKidYb5QDdvi1vM7a93MELq5SuXthD8HdJoReo3l8914Kwda7ar1PojS7deh76KigSI5ICqh8+hzN/45e34eOfBIg/rkFvQVg4OhUMDQVTRxcETDg7OV49zSQFE5yujk8SQpHTa/aWTRCZHCJE+IePqDdqQ1AuppAJAjcKIMZghWNgxxA/U/ImEoToTQffi2KFa3xtTUyjgpLzCqooNVTEtYm/noj0xP9eHfvOnd923PN4vh6yDXaRKCTACo+Tcey6Qi3bzENjuI4TVPLqWDXWa3oIaazdRQpp7C6qpltvAhjcc4vlerrWwN5bZpoSo6AkFOjrA8OHRB/barW2aP/gKMDoIJ3ek9HT+es0WqTX4aWX232V87wcnc55MAFmqZQcsTMZe0Sv+ztLrU3GNltLGBm1OxlgA+UR1p5fWppv//gQh8KG4/tO1I45AXJ6R7+zY7gzBBvMDRxFhDyEjWHsagCzUtaQYD26IUlCUpIFuC9JrCoZjhTdwEtHEvDgpSP9zkcI+4Rzme1MZBnXj+cBdwhz2pYZb1q9xl7463PnL3NZhZTM52Zn2q6rZlQ6Mrful9O26rrtmdk5WVXly+QXB36vRwAAAHicY2BkYGAA4rsexQrx/DZfGbhZGEDgumGRDYL+v4CFgTkByOVgYAKJAgAEeAjlAHicY2BkYGBu+N/AEMPCAAJAkpEBFbADAEcNAnB4nGNhYGBgfsnAwMKAiQEWswEFAAAAAAAAdgDgATABmgHCAex4nGNgZGBgYGcIZGBlAAEmIOYCQgaG/2A+AwARYwF0AHicZY9NTsMwEIVf+gekEqqoYIfkBWIBKP0Rq25YVGr3XXTfpk6bKokjx63UA3AejsAJOALcgDvwSCebNpbH37x5Y08A3OAHHo7fLfeRPVwyO3INF7gXrlN/EG6QX4SbaONVuEX9TdjHM6bCbXRheYPXuGL2hHdhDx18CNdwjU/hOvUv4Qb5W7iJO/wKt9Dx6sI+5l5XuI1HL/bHVi+cXqnlQcWhySKTOb+CmV7vkoWt0uqca1vEJlODoF9JU51pW91T7NdD5yIVWZOqCas6SYzKrdnq0AUb5/JRrxeJHoQm5Vhj/rbGAo5xBYUlDowxQhhkiMro6DtVZvSvsUPCXntWPc3ndFsU1P9zhQEC9M9cU7qy0nk6T4E9XxtSdXQrbsuelDSRXs1JErJCXta2VELqATZlV44RelzRiT8oZ0j/AAlabsgAAAB4nG3BQQqAMAwEwN0aG/GXQcWm2BbUgs/34NUZBHxm/FMGDhSOjFRO4CP92s64JEvWpHgxzW71bl2PZqvXHXgB9HQMcg==') format('woff'),
|
||||
url('iconfont.ttf?t=1527468348729') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
|
||||
url('iconfont.svg?t=1527468348729#iconfont') format('svg'); /* iOS 4.1- */
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
font-family:"iconfont" !important;
|
||||
font-size:16px;
|
||||
font-style:normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.icon-user:before { content: "\e6a3"; }
|
||||
|
||||
.icon-chahao:before { content: "\e604"; }
|
||||
|
||||
.icon-mima:before { content: "\e603"; }
|
||||
|
||||
.icon-jiantou:before { content: "\e64a"; }
|
||||
|
||||
.icon-loading:before { content: "\e6cd"; }
|
||||
|