diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..550d27dd9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,18 @@ + + +**我确定我已经查看了** (标注`[ ]`为`[x]`) + +- [ ] [Halo 使用文档](https://docs.halo.run/) +- [ ] [Github Wiki 常见问题](https://github.com/ruibaby/halo/wiki/4.-%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98) +- [ ] [其他 Issues](https://github.com/ruibaby/halo/issues) + +---- + +**我要申请** (标注`[ ]`为`[x]`) + +- [ ] BUG 反馈 +- [ ] 添加新的特性或者功能 +- [ ] 请求技术支持 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 96038b830..9b5610ef8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,17 @@ -FROM maven:3 +FROM maven:3-jdk-8-alpine LABEL maintainer="Ryan Wang" WORKDIR /opt/halo ADD . /tmp +ENV TZ=Asia/Shanghai \ +DB_USER="admin" \ +DB_PASSWORD="123456" + +RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone RUN cd /tmp && mvn package -Pci && mv target/dist/halo/* /opt/halo/ \ && rm -rf /tmp/* && rm -rf ~/.m2 EXPOSE 8090 -ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/opt/halo/halo-latest.jar","--spring.profiles.active=docker"] +ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/opt/halo/halo-latest.jar","--spring.datasource.username=${DB_USER}","--spring.datasource.password=${DB_PASSWORD}"] diff --git a/README-en_US.md b/README-en_US.md new file mode 100644 index 000000000..5df0ca028 --- /dev/null +++ b/README-en_US.md @@ -0,0 +1,149 @@ +![](https://i.loli.net/2018/12/21/5c1cd34849751.png) + +> Halo may be the best Java blog system. + +

+Author +JDK +GitHub release +Travis CI +Docker Build Status +

+ +------------------------------ +🇨🇳[简体中文](README.md) | 🇺🇸English + +## Introduction + +**Halo** [ˈheɪloʊ], Become the best blogging system using Java. + +Fast, concise, and powerful blogging system developed in Java. + +> QQ Group: 162747721,Telegram Group: [https://t.me/HaloBlog](https://t.me/HaloBlog) | Telegram Channel: [https://t.me/halo_dev](https://t.me/halo_dev) | [WeHalo 小程序](https://github.com/aquanlerou/WeHalo)。 + +## Demo + +> Frontend: [https://demo.halo.run](https://demo.halo.run) +> Backend: [https://demo.halo.run/admin](https://demo.halo.run/admin) +> username: admin,password: 123456 + +## Quick start + +Deploy with shell script: + +```bash +# install Halo +$ yum install -y wget && wget -O halo-cli.sh https://git.io/fxHqp && bash halo-cli.sh -i + +# upgrade Halo +$ bash halo-cli.sh -u +``` + +Deploy with Docker: +```bash +# pull docker images +$ docker pull ruibaby/halo + +# create docker container and run it +$ docker run -d --name halo -p 8090:8090 -v ~/halo:/root/halo ruibaby/halo + +# Tips:DB_USER and DB_PASSWORD must be repaired and recorded +``` + +Deploy with Docker compose: +```bash +# Download the nginx config file template +$ curl https://raw.githubusercontent.com/jwilder/nginx-proxy/master/nginx.tmpl > /etc/nginx/nginx.tmpl + +# Get the docker-compose.yaml +$ yum install -y wget && wget -O docker-compose.yaml https://git.io/fpS8N + +# Modify docker-compose.yaml +# 1. modify VIRTUAL_HOST, LETSENCRYPT_HOST for your own domain name. +# 2. modify LETSENCRYPT_EMAIL to your own mailbox. +# 3. modify DB_USER . +# 4. modify DB_PASSWORD . + +# run +$ docker-compose up -d +``` + +> Tips: If you use Idea, Eclipse and other IDEs to run, you need to install the Lombok plugin, In addition, JDK10 is not supported at the moment, and there are problems with themes scanning and uploading. +> See the [Halo documentation](https://halo-doc.ryanc.cc/installation/) or [ Wiki](https://github.com/ruibaby/halo/wiki) for more details. + +## Blogs with Halo + +[Ryan0up'S Blog](https://ryanc.cc) + +[SNAIL BLOG](https://slogc.cc) + +[宋浩志博客](http://songhaozhi.com) + +[KingYiFan'S Blog](https://blog.cnbuilder.cn) + +[AquanBlog](https://blog.eunji.cn/) + +## Themes + +In addition to the built-in [Anatole](https://github.com/hi-caicai/farbox-theme-Anatole) and [Material](https://github.com/viosey/hexo-theme-material), there are the following The theme is not integrated in the project. If you need it, please download it and upload it through the background. + +- [Vno](https://github.com/ruibaby/vno-halo) - From Jekyll,Author [Wei Wang](https://onevcat.com/). +- [Hux](https://github.com/ruibaby/hux-halo) - From Jekyll,Author [Xuan Huang](https://huangxuan.me/). +- [Story](https://github.com/ruibaby/story-halo) - From Typecho,Author [Trii Hsia](https://yumoe.com/). +- [NexT](https://github.com/ruibaby/next-halo) - From Hexo,Author [iissnan](https://notes.iissnan.com/). +- [Casper](https://github.com/ruibaby/casper-halo) - From Ghost,Author [Ghost](https://github.com/TryGhost). +- [Pinghsu](https://github.com/ruibaby/pinghsu-halo) - From Typecho,Author [Chakhsu.Lau](https://github.com/chakhsu). + +> Disclaimer: Do not accept any comments or suggestions on the functionality of the **Porting Theme**. + +## License + +[![license](https://img.shields.io/github/license/ruibaby/halo.svg?style=flat-square)](https://github.com/ruibaby/halo/blob/master/LICENSE) + +> Halo uses the GPL-v3.0 protocol to open source. + +## Thanks + +The birth of Halo is inseparable from the following projects: + +- [Spring Boot](https://github.com/spring-projects/spring-boot): Spring's rapid development framework +- [Freemarker](https://freemarker.apache.org/): Template engine to make pages static +- [H2 Database](https://github.com/h2database/h2database): Embedded database, no need to install +- [Spring-data-jpa](https://github.com/spring-projects/spring-data-jpa.git): a persistence layer framework that does not require writing sql statements +- [Ehcache](http://www.ehcache.org/): Cache Framework +- [Lombok](https://www.projectlombok.org/): Make the code simpler +- [oh-my-email](https://github.com/biezhi/oh-my-email): Probably the smallest Java mailing library, support for CC, attachments, templates, etc. +- [Hutool](https://github.com/looly/hutool): A Java Foundation Tools library +- [Thumbnailator](https://github.com/coobird/thumbnailator): thumbnail generation library +- [AdminLTE](https://github.com/almasaeed2010/AdminLTE): Bootstrap-based background template +- [Bootstrap](https://github.com/twbs/bootstrap.git): The most widely used front-end ui framework +- [Animate](https://github.com/daneden/animate.css.git): Very easy to use css effects library +- [SimpleMDE - Markdown Editor](https://github.com/sparksuite/simplemde-markdown-editor): Simple, functional, and lightweight Markdown editor +- [Bootstrap-FileInput](https://github.com/kartik-v/bootstrap-fileinput.git): Bootstrap-based file upload component +- [Font-awesome](https://github.com/FortAwesome/Font-Awesome.git): the most widely used font icon library +- [JQuery](https://github.com/jquery/jquery.git): The most widely used JavaScript framework +- [Layer](https://github.com/sentsin/layer.git): Personally think that the most practical and best-looking pop-up layer component, no one +- [JQuery-Toast](https://github.com/kamranahmedse/jquery-toast-plugin) +: message prompt component +- [Pjax](https://github.com/defunkt/jquery-pjax.git): pushState + ajax = pjax +- [OwO](https://github.com/DIYgod/OwO): front-end expression library + +## Donate + +> If Halo is helpful to you, ask the author to have a ☕. + +| AliPay/WeChat/QQ/PayPal | +| :------------: | +| | + +## Interface display + +![](https://i.loli.net/2018/12/16/5c15b6edb9a49.png) +![](https://i.loli.net/2018/12/16/5c15b6ee08333.png) +![](https://i.loli.net/2018/12/16/5c15b6ec853af.png) +![](https://i.loli.net/2018/12/16/5c15b6ec50238.png) +![](https://i.loli.net/2018/12/16/5c15b6ed4057a.png) +![](https://i.loli.net/2018/12/16/5c15b6eb01f2d.png) +![](https://i.loli.net/2018/12/16/5c15b6eb98898.png) +![](https://i.loli.net/2018/12/16/5c15b6eb3b506.png) +![](https://i.loli.net/2018/12/16/5c15b6ebf29fd.png) diff --git a/README.md b/README.md index c1978c466..40890f038 100755 --- a/README.md +++ b/README.md @@ -1,70 +1,77 @@ -

- Halo -

+![](https://i.loli.net/2018/12/21/5c1cd34849751.png) -> Halo可能是最好的Java博客系统。 +> Halo 可能是最好的 Java 博客系统。 -[![JDK](https://img.shields.io/badge/JDK-1.8-yellow.svg)](#) -[![GitHub release](https://img.shields.io/github/release/ruibaby/halo.svg)](https://github.com/ruibaby/halo/releases) -[![Travis CI](https://img.shields.io/travis/ruibaby/halo.svg)](https://travis-ci.org/ruibaby/halo) -[![Docker Build Status](https://img.shields.io/docker/build/ruibaby/halo.svg)](https://hub.docker.com/r/ruibaby/halo/) +

+Author +JDK +GitHub release +Travis CI +Docker Build Status +

------------------------------ -🇨🇳简体中文 | 🇺🇸[English](./docs/README-en-US.md) | Turkish [Türkçe](./docs/README-tr.md) - -## 目录 - -- [简介](#简介) -- [快速开始](#快速开始) -- [演示](#演示) -- [下载部署](#下载部署) -- [文档](#文档) -- [主题](#主题) -- [许可证](#许可证) -- [后续功能](#后续功能) -- [感谢](#感谢) -- [捐赠](#捐赠) +🇨🇳简体中文 | 🇺🇸[English](README-en_US.md) ## 简介 **Halo** [ˈheɪloʊ],意为光环。当然,你也可以当成拼音读(哈喽)。 -轻快,简洁,功能强大,使用Java开发的博客系统。 +轻快,简洁,功能强大,使用 Java 开发的博客系统。 -> QQ交流群: 162747721,Telegram交流群:[https://t.me/HaloBlog](https://t.me/HaloBlog) +> QQ 交流群: 162747721 | Telegram 交流群:[https://t.me/HaloBlog](https://t.me/HaloBlog) | Telegram 频道:[https://t.me/halo_dev](https://t.me/halo_dev) | [WeHalo 小程序](https://github.com/aquanlerou/WeHalo)。 + +## 演示站点 + +> 前台地址:[https://demo.halo.run](https://demo.halo.run) +> 后台地址:[https://demo.halo.run/admin](https://demo.halo.run/admin) +> 用户名:admin,密码:123456 ## 快速开始 -```bash -git clone https://github.com/ruibaby/halo.git -cd halo -mvn clean package -Pprod -java -jar target/dist/halo/halo-latest.jar -``` - 服务器快速部署: ```bash -# 安装Halo -yum install -y wget && wget https://git.io/fxHqp && bash halo-cli.sh -i -# 更新Halo -bash halo-cli.sh -u +# 安装 Halo +$ yum install -y wget && wget -O halo-cli.sh https://git.io/fxHqp && bash halo-cli.sh -i + +# 更新 Halo +$ bash halo-cli.sh -u ``` Docker 部署: ```bash # 拉取镜像 -docker pull ruibaby/halo +$ docker pull ruibaby/halo # 运行 -docker run -d --name halo -p 8090:8090 -v ~/halo:/root/halo ruibaby/halo +$ docker run -d --name halo -p 8090:8090 -v ~/halo:/root/halo -e DB_USER=root -e DB_PASSWORD=123456 ruibaby/halo + +# 注意:DB_USER 和 DB_PASSWORD 务必修改并记下 ``` -> 注意:如使用Idea,Eclipse等IDE运行的话,需要安装Lombok插件,另外暂不支持JDK10,主题扫描和上传会有问题。 +Docker Compose 部署: +```bash +# 下载 Nginx 配置文件模板 +$ curl https://raw.githubusercontent.com/jwilder/nginx-proxy/master/nginx.tmpl > /etc/nginx/nginx.tmpl -Let's start: http://localhost:8090 +# 获取 docker-compose.yaml 文件 +$ yum install -y wget && wget -O docker-compose.yaml https://git.io/fpS8N -## 演示 +# 修改 docker-compose.yaml +# 1. 修改 VIRTUAL_HOST,LETSENCRYPT_HOST 为自己的域名。 +# 2. 修改 LETSENCRYPT_EMAIL 为自己的邮箱。 +# 3. 修改 DB_USER 数据库用户名,注意:这是自定义的,请不要使用默认的!下面数据库密码同理。 +# 4. 修改 DB_PASSWORD 数据库密码。 + +# 运行 +$ docker-compose up -d +``` + +> 注意:如使用 Idea,Eclipse 等IDE运行的话,需要安装Lombok插件,另外暂不支持JDK10,主题管理和主题上传会有问题。 +> 更多请参考[ Halo 使用文档 ](https://halo-doc.ryanc.cc/installation/)或者[ Wiki](https://github.com/ruibaby/halo/wiki)。 + +## 博客示例 [Ryan0up'S Blog](https://ryanc.cc) @@ -74,73 +81,68 @@ Let's start: http://localhost:8090 [KingYiFan'S Blog](https://blog.cnbuilder.cn) -## 下载部署 - -> 如需部署到服务器,请参考[Halo部署教程](https://halo-doc.ryanc.cc/installation/)或者[Wiki](https://github.com/ruibaby/halo/wiki)。 - -## 文档 - -[Halo Document](https://halo-doc.ryanc.cc) - -> 文档正在不断完善中。 +[AquanBlog](https://blog.eunji.cn/) ## 主题 -除了内置的[Anatole](https://github.com/hi-caicai/farbox-theme-Anatole)和[Material](https://github.com/viosey/hexo-theme-material),还有下列主题没有集成在项目里,如有需要,请自行下载之后通过后台上传上去使用。 +除了内置的 [Anatole](https://github.com/hi-caicai/farbox-theme-Anatole) 和 [Material](https://github.com/viosey/hexo-theme-material) ,还有下列主题没有集成在项目里,如有需要,请自行下载之后通过后台上传上去使用。 -- [Vno](https://github.com/ruibaby/vno-halo) - 来自Jekyll的一款主题,作者[Wei Wang](https://onevcat.com/)。 -- [Hux](https://github.com/ruibaby/hux-halo) - 来自Jekyll的一款主题,作者[Xuan Huang](https://huangxuan.me/)。 -- [Story](https://github.com/ruibaby/story-halo) - 来自Typecho的一款主题,作者[Trii Hsia](https://yumoe.com/)。 -- [NexT](https://github.com/ruibaby/next-halo) - 来自Hexo的一款主题,作者[iissnan](https://notes.iissnan.com/)。 -- [Casper](https://github.com/ruibaby/casper-halo) - 来自Ghost的一款主题,作者[Ghost](https://github.com/TryGhost)。 +- [Vno](https://github.com/ruibaby/vno-halo) - 来自 Jekyll 的一款主题,作者 [Wei Wang](https://onevcat.com/)。 +- [Hux](https://github.com/ruibaby/hux-halo) - 来自 Jekyll 的一款主题,作者 [Xuan Huang](https://huangxuan.me/)。 +- [Story](https://github.com/ruibaby/story-halo) - 来自 Typecho 的一款主题,作者 [Trii Hsia](https://yumoe.com/)。 +- [NexT](https://github.com/ruibaby/next-halo) - 来自 Hexo 的一款主题,作者 [iissnan](https://notes.iissnan.com/)。 +- [Casper](https://github.com/ruibaby/casper-halo) - 来自 Ghost 的一款主题,作者 [Ghost](https://github.com/TryGhost)。 +- [Pinghsu](https://github.com/ruibaby/pinghsu-halo) - 来自 Typecho 的一款主题,作者 [Chakhsu.Lau](https://github.com/chakhsu)。 > 声明:不接受任何对**移植主题**功能上的意见和建议。 ## 许可证 -[![license](https://img.shields.io/github/license/ruibaby/halo.svg)](https://github.com/ruibaby/halo/blob/master/LICENSE) +[![license](https://img.shields.io/github/license/ruibaby/halo.svg?style=flat-square)](https://github.com/ruibaby/halo/blob/master/LICENSE) -> Halo使用GPL-v3.0协议开源,请尽量遵守开源协议,即便是在中国。 - -## 后续功能 - -- [x] 文章阅读统计 -- [ ] 文章顶置 -- [ ] 集成又拍云,七牛云等云服务 +> Halo 使用 GPL-v3.0 协议开源,请尽量遵守开源协议,即便是在中国。 ## 感谢 -Halo的诞生离不开下面这些项目: +Halo 的诞生离不开下面这些项目: -- [IntelliJ IDEA](https://www.jetbrains.com/idea/):个人认为最强大的Java IDE,没有之一 -- [Spring Boot](https://github.com/spring-projects/spring-boot):Spring的微服务框架 +- [Spring Boot](https://github.com/spring-projects/spring-boot):Spring 的快速开发框架 - [Freemarker](https://freemarker.apache.org/):模板引擎,使页面静态化 - [H2 Database](https://github.com/h2database/h2database):嵌入式数据库,无需安装 -- [Druid](https://github.com/alibaba/druid):阿里开发的连接池 -- [Spring-data-jpa](https://github.com/spring-projects/spring-data-jpa.git):不需要写sql语句的持久层框架 +- [Spring-data-jpa](https://github.com/spring-projects/spring-data-jpa.git):不需要写 sql 语句的持久层框架 - [Ehcache](http://www.ehcache.org/):缓存框架 - [Lombok](https://www.projectlombok.org/):让代码更简洁 -- [oh-my-email](https://github.com/biezhi/oh-my-email):可能是最小的Java邮件发送库了,支持抄送、附件、模板等 -- [Hutool](https://github.com/looly/hutool):一个Java基础工具类库 +- [oh-my-email](https://github.com/biezhi/oh-my-email):可能是最小的 Java 邮件发送库了,支持抄送、附件、模板等 +- [Hutool](https://github.com/looly/hutool):一个 Java 基础工具类库 - [Thumbnailator](https://github.com/coobird/thumbnailator):缩略图生成库 -- [AdminLTE](https://github.com/almasaeed2010/AdminLTE):基于Bootstrap的后台模板 -- [Bootstrap](https://github.com/twbs/bootstrap.git):使用最广泛的前端ui框架 -- [Animate](https://github.com/daneden/animate.css.git):非常好用的css动效库 -- [SimpleMDE - Markdown Editor](https://github.com/sparksuite/simplemde-markdown-editor):简洁,功能够用,且轻量级的Markdown编辑器 -- [Bootstrap-FileInput](https://github.com/kartik-v/bootstrap-fileinput.git):个人认为最好用的上传组件,没有之一 +- [AdminLTE](https://github.com/almasaeed2010/AdminLTE):基于 Bootstrap 的后台模板 +- [Bootstrap](https://github.com/twbs/bootstrap.git):使用最广泛的前端 ui 框架 +- [Animate](https://github.com/daneden/animate.css.git):非常好用的 css 动效库 +- [SimpleMDE - Markdown Editor](https://github.com/sparksuite/simplemde-markdown-editor):简洁,功能够用,且轻量级的 Markdown 编辑器 +- [Bootstrap-FileInput](https://github.com/kartik-v/bootstrap-fileinput.git):基于 Bootstrap 的文件上传组件 - [Font-awesome](https://github.com/FortAwesome/Font-Awesome.git):使用最广泛的字体图标库 -- [Jquery](https://github.com/jquery/jquery.git):使用最广泛的JavaScript框架 +- [JQuery](https://github.com/jquery/jquery.git):使用最广泛的 JavaScript 框架 - [Layer](https://github.com/sentsin/layer.git):个人认为最实用最好看的弹出层组件,没有之一 -- [Jquery-Toast](https://github.com/kamranahmedse/jquery-toast-plugin):消息提示组件 +- [JQuery-Toast](https://github.com/kamranahmedse/jquery-toast-plugin):消息提示组件 - [Pjax](https://github.com/defunkt/jquery-pjax.git):pushState + ajax = pjax - [OwO](https://github.com/DIYgod/OwO):前端表情库 ## 捐赠 -> 如果Halo对你有帮助,可以请作者喝瓶娃哈哈哈哈哈哈哈哈哈哈。 +> 如果 Halo 对你有帮助,可以请作者喝杯☕️。 -| 支付宝 | 微信 | 支付宝红包 | -| :------------: | :------------: | :------------: | -| | | | +| 支付宝/微信/QQ | +| :------------: | +| | +## 界面展示 +![](https://i.loli.net/2018/12/16/5c15b6edb9a49.png) +![](https://i.loli.net/2018/12/16/5c15b6ee08333.png) +![](https://i.loli.net/2018/12/16/5c15b6ec853af.png) +![](https://i.loli.net/2018/12/16/5c15b6ec50238.png) +![](https://i.loli.net/2018/12/16/5c15b6ed4057a.png) +![](https://i.loli.net/2018/12/16/5c15b6eb01f2d.png) +![](https://i.loli.net/2018/12/16/5c15b6eb98898.png) +![](https://i.loli.net/2018/12/16/5c15b6eb3b506.png) +![](https://i.loli.net/2018/12/16/5c15b6ebf29fd.png) diff --git a/_config.yml b/_config.yml deleted file mode 100644 index 3397c9a49..000000000 --- a/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-architect \ No newline at end of file diff --git a/deploy.sh b/deploy.sh index e0eecabce..c1d6084b7 100644 --- a/deploy.sh +++ b/deploy.sh @@ -19,6 +19,6 @@ mvn package -Pprod cd $HALO_DIR/target/dist/halo # 运行Halo -nohup java -server -Xms256m -Xmx512m -jar `find ./ -name "halo*.jar"` > /dev/null 2>&1 & +nohup java -server -jar `find ./ -name "halo*.jar"` > /dev/null 2>&1 & echo "Halo部署完毕,Enjoy!" \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 000000000..1a38ba865 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,55 @@ +version: '2' +services: + + nginx: + restart: always + image: nginx + container_name: nginx + ports: + - 80:80 + - 443:443 + volumes: + - /etc/nginx/conf.d:/etc/nginx/conf.d + - /etc/nginx/vhost.d:/etc/nginx/vhost.d + - /usr/share/nginx/html:/usr/share/nginx/html + - /etc/nginx/certs:/etc/nginx/certs:ro + + halo: + restart: always + image: ruibaby/halo + container_name: halo + ports: + - 8090:8090 + environment: + - VIRTUAL_PORT=8090 + - VIRTUAL_HOST=localhost # 监听的地址(务必修改) + - LETSENCRYPT_HOST=localhost # 证书的域名 (务必修改) + - LETSENCRYPT_EMAIL=i@example.com # 证书所有者的邮箱,快过期时会提醒(务必修改) + - DB_USER=admin # h2数据库用户名,自定义(务必修改) + - DB_PASSWORD=123456 # h2数据库密码,自定义(务必修改) + volumes: + - ~/halo:/root/halo + + docker-gen: + restart: always + image: jwilder/docker-gen + container_name: docker-gen + volumes: + - /var/run/docker.sock:/tmp/docker.sock:ro + - /etc/nginx/nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro + volumes_from: + - nginx + entrypoint: /usr/local/bin/docker-gen -notify-sighup nginx -watch -wait 5s:30s + /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf + + letsencrypt-nginx-proxy-companion: + restart: always + image: jrcs/letsencrypt-nginx-proxy-companion + container_name: letsencrypt-nginx-proxy-companion + volumes_from: + - nginx + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - /etc/nginx/certs:/etc/nginx/certs:rw + environment: + - NGINX_DOCKER_GEN_CONTAINER=docker-gen diff --git a/docs/README-en-US.md b/docs/README-en-US.md deleted file mode 100755 index cc4b16785..000000000 --- a/docs/README-en-US.md +++ /dev/null @@ -1,141 +0,0 @@ -

- Halo -

- -> Halo may be the best Java blog system. - -[![JDK](https://img.shields.io/badge/JDK-1.8-yellow.svg)](#) -[![GitHub release](https://img.shields.io/github/release/ruibaby/halo.svg)](https://github.com/ruibaby/halo/releases) -[![Travis CI](https://img.shields.io/travis/ruibaby/halo.svg)](https://travis-ci.org/ruibaby/halo) -[![Docker Build Status](https://img.shields.io/docker/build/ruibaby/halo.svg)](https://hub.docker.com/r/ruibaby/halo/) - ------------------------------- -🇨🇳[简体中文](../README.md) | 🇺🇸English | Turkish [Türkçe](./README-tr.md) - -## Catalog - -- [Introduction](#introduction) -- [Quickstart](#quickstart) -- [Demo](#demo) -- [Download](#download) -- [Docs](#docs) -- [Themes](#themes) -- [License](#license) -- [Todo](#todo) -- [Thanks](#thanks) -- [Donate](#donate) - -## Introduction - -**Halo** [ˈheɪloʊ],Become the best blogging system using Java. - -Fast, concise, and powerful blogging system developed in Java. - -> QQ Group: 162747721,Telegram Group:[https://t.me/HaloBlog](https://t.me/HaloBlog) - -## Quickstart - -```bash -git clone https://github.com/ruibaby/halo.git -cd halo -mvn clean package -Pprod -java -jar target/dist/halo/halo-latest.jar -``` - -Rapid server deployment: -```bash -# Install Halo -yum install -y wget && wget https://git.io/fxHqp && bash halo-cli.sh -i -# Upgrade Halo -bash halo-cli.sh -u -``` - -Docker: -```bash -# Pull image -docker pull ruibaby/halo -# run -docker run -d --name halo -p 8090:8090 -v ~/halo:/root/halo ruibaby/halo -``` - -> Note: If you use Idea, Eclipse and other IDEs to run, you need to install the Lombok plugin, In addition, JDK10 is not supported at the moment, and there are problems with themes scanning and uploading. - -Let's start: http://localhost:8090 - -## Demo - -[Ryan0up'S Blog](https://ryanc.cc) - -[SNAIL BLOG](https://slogc.cc) - -[宋浩志博客](http://songhaozhi.com) - -[KingYiFan'S Blog](https://blog.cnbuilder.cn) - -## Download - -> For deployment to the server, please refer to [Halo部署教程](https://halo-doc.ryanc.cc/installation/) or [Wiki](https://github.com/ruibaby/halo/wiki). - -## Docs - -[Halo Document](https://halo-doc.ryanc.cc) - -> The documentation is constantly being improved. - -## Themes - -In addition to the built-in [Anatole](https://github.com/hi-caicai/farbox-theme-Anatole) and [Material](https://github.com/viosey/hexo-theme-material), there are the following The theme is not integrated in the project. If you need it, please download it and upload it through the background. -- [Vno](https://github.com/ruibaby/vno-halo) - From Jekyll,Author [Wei Wang](https://onevcat.com/)。 -- [Hux](https://github.com/ruibaby/hux-halo) - From Jekyll,Author [Xuan Huang](https://huangxuan.me/)。 -- [Story](https://github.com/ruibaby/story-halo) - From Typecho,Author [Trii Hsia](https://yumoe.com/)。 -- [NexT](https://github.com/ruibaby/next-halo) - From Hexo,Author [iissnan](https://notes.iissnan.com/)。 -- [Casper](https://github.com/ruibaby/casper-halo) - From Ghost,Author [Ghost](https://github.com/TryGhost)。 - -> Disclaimer: Do not accept any comments or suggestions on the functionality of the **Porting Theme**. - -## License - -[![license](https://img.shields.io/github/license/ruibaby/halo.svg)](https://github.com/ruibaby/halo/blob/master/LICENSE) - -> Halo uses the GPL-v3.0 protocol to open source. - -## Todo - -- [x] Article reading statistics -- [ ] Article overhead -- [ ] Integrate cloud services such as Qiniu yun or Upyun - -## Thanks - -The birth of Halo is inseparable from the following projects: - -- [IntelliJ IDEA](https://www.jetbrains.com/idea/):Personally think that the most powerful Java IDE. -- [Spring Boot](https://github.com/spring-projects/spring-boot):Spring's microservices framework. -- [Freemarker](https://freemarker.apache.org/):Template engine to make the page static. -- [H2 Database](https://github.com/h2database/h2database):Embedded database, no need to install. -- [Druid](https://github.com/alibaba/druid):Database connection pool developed by Alibaba. -- [Spring-data-jpa](https://github.com/spring-projects/spring-data-jpa.git):Do not need to write a sql script persistence layer framework. -- [Ehcache](http://www.ehcache.org/):Cache framework. -- [Lombok](https://www.projectlombok.org/):Make the code simpler. -- [oh-my-email](https://github.com/biezhi/oh-my-email):Probably the smallest Java mailing library, support for CC, attachments, templates, etc. -- [Hutool](https://github.com/looly/hutool):A Java base tool library. -- [Thumbnailator](https://github.com/coobird/thumbnailator):Thumbnail generation library. -- [AdminLTE](https://github.com/almasaeed2010/AdminLTE):Background template based on Bootstrap. -- [Bootstrap](https://github.com/twbs/bootstrap.git):Use the most extensive front-end ui framework. -- [Animate](https://github.com/daneden/animate.css.git):Very easy to use css motion library. -- [SimpleMDE - Markdown Editor](https://github.com/sparksuite/simplemde-markdown-editor):Simple, functional, and lightweight Markdown editor. -- [Bootstrap-FileInput](https://github.com/kartik-v/bootstrap-fileinput.git):Personally think that the best upload component. -- [Font-awesome](https://github.com/FortAwesome/Font-Awesome.git):The most widely used font icon library. -- [Jquery](https://github.com/jquery/jquery.git):Use the widest range of JavaScript frameworks. -- [Layer](https://github.com/sentsin/layer.git):Personally think that the most practical and best-looking pop-up layer components. -- [Jquery-Toast](https://github.com/kamranahmedse/jquery-toast-plugin):Message prompt component. -- [Pjax](https://github.com/defunkt/jquery-pjax.git):pushState + ajax = pjax.**** -- [OwO](https://github.com/DIYgod/OwO):Front-end expression library. - -## Donate - -| Alipay | Wechat | Alipay Red envelope | -| :------------: | :------------: | :------------: | -| | | | - - diff --git a/docs/README-tr.md b/docs/README-tr.md deleted file mode 100644 index a91cbb492..000000000 --- a/docs/README-tr.md +++ /dev/null @@ -1,142 +0,0 @@ -

- Halo -

- -> Halo, bir Java blog sistemidir. - -[![JDK](https://img.shields.io/badge/JDK-1.8-yellow.svg)](#) -[![GitHub release](https://img.shields.io/github/release/ruibaby/halo.svg)](https://github.com/ruibaby/halo/releases) -[![Travis CI](https://img.shields.io/travis/ruibaby/halo.svg)](https://travis-ci.org/ruibaby/halo) -[![Docker Build Status](https://img.shields.io/docker/build/ruibaby/halo.svg)](https://hub.docker.com/r/ruibaby/halo/) - ------------------------------- -🇨🇳[简体中文](../README.md) | 🇺🇸[English](./README-en-US.md) | Turkish Türkçe - -## Katalog - -- [Giriş](#giris) -- [Hemen Başla](#hemen-başla) -- [Demo](#demo) -- [İndir](#İndir) -- [Dökümanlar](#dökümanlar) -- [Temalar](#temalar) -- [Lisans](#lisans) -- [Yapılacaklar Listesi](#yapılacaklar-listesi) -- [Teşekkür](#teşekkür) -- [Bağışlar](#bağışlar) - -## Giriş - -**Halo** [ˈheɪloʊ], Java kullanan en iyi blog sistemi olma yolunda. - -Hızlı, öz ve güçlü bir blog sistemi. - -> QQ Grup: 162747721,Telegram Grup:[https://t.me/HaloBlog](https://t.me/HaloBlog) - -## Hemen Başla - -```bash -git clone https://github.com/ruibaby/halo.git -cd halo -mvn clean package -Pprod -java -jar target/dist/halo/halo-latest.jar -``` - -Rapid server deploy etme: -```bash -# Install Halo -yum install -y wget && wget https://git.io/fxHqp && bash halo-cli.sh -i -# Upgrade Halo -bash halo-cli.sh -u -``` - -Docker: -```bash -# Pull image -docker pull ruibaby/halo -# run -docker run -d --name halo -p 8090:8090 -v ~/halo:/root/halo ruibaby/halo -``` - -> Not: Eğer çalıştırmak için Idea, Eclipse ve diğer IDE leri kullanırsanız, Lombok eklentisini yüklemeniz gerekir. Ayrıca JDK 10 şu anda desteklenmiyor ve temaların taranması ve yüklenmesi ile ilgili sorunlar var. - - -Hadi başlayalım: http://localhost:8090 - -## Demo - -[Ryan0up'nın Bloğu](https://ryanc.cc) - -[SNAIL'in Bloğu](https://slogc.cc) - -[宋浩志博客](http://songhaozhi.com) - -[KingYiFan'ın Bloğu](https://blog.cnbuilder.cn) - -## İndir - -> Sunucuya deploy etmek için gözat: [Halo部署教程](https://halo-doc.ryanc.cc/installation/) veya [Wiki](https://github.com/ruibaby/halo/wiki). - -## Dökümanlar - -[Halo Dökümanları](https://halo-doc.ryanc.cc) - -> Dökümanlar sürekli geliştirilme aşamasındadır. - -## Temalar - -Ön bilgi olarak [Anatole](https://github.com/hi-caicai/farbox-theme-Anatole) ve [Material](https://github.com/viosey/hexo-theme-material) temları projeye entegre edilmedi. Eğer kullanmak isterseniz indirip arkaplanda yükleyebilirsiniz. -- [Vno](https://github.com/ruibaby/vno-halo) - Jekyll, Geliştirici [Wei Wang](https://onevcat.com/)。 -- [Hux](https://github.com/ruibaby/hux-halo) - Jekyll, Geliştirici [Xuan Huang](https://huangxuan.me/)。 -- [Story](https://github.com/ruibaby/story-halo) - Typecho, Geliştirici [Trii Hsia](https://yumoe.com/)。 -- [NexT](https://github.com/ruibaby/next-halo) - Hexo, Geliştirici [iissnan](https://notes.iissnan.com/)。 -- [Casper](https://github.com/ruibaby/casper-halo) - Ghost, Geliştirici [Ghost](https://github.com/TryGhost)。 - -> **Porting Theme**'nın işlevselliği ile ilgili yorum ve öneri kabul edilmemektedir. - -## Lisans - -[![license](https://img.shields.io/github/license/ruibaby/halo.svg)](https://github.com/ruibaby/halo/blob/master/LICENSE) - -> Halo, açık kaynak kod olarak GPL-v3.0 kullanmaktadır. - -## Yapılacaklar Listesi - -- [x] Makale okunma istatistikleri -- [ ] Makale üstü -- [ ] Qiniu ve Upyun gibi bulut servisleri entegresi - -## Teşekkür - -Halo'nun ortaya çıkışı aşağıdaki projelerle olmuştur: - -- [IntelliJ IDEA](https://www.jetbrains.com/idea/):Kişisel görüş olarak en güçlü Java IDE si. -- [Spring Boot](https://github.com/spring-projects/spring-boot):Spring'in microservis frameworkü. -- [Freemarker](https://freemarker.apache.org/):Statik sayfa yapmak için şablon motoru. -- [H2 Database](https://github.com/h2database/h2database):Gömülü veritabanı, kurulum gerekmez. -- [Druid](https://github.com/alibaba/druid): Alibaba tarafından geliştirilen veritabanı bağlantı havuzu. -- [Spring-data-jpa](https://github.com/spring-projects/spring-data-jpa.git):Bir sql script katmanı yazmaya gerek yok. -- [Ehcache](http://www.ehcache.org/):Cache sistemi. -- [Lombok](https://www.projectlombok.org/):Kod basitleştirme. -- [oh-my-email](https://github.com/biezhi/oh-my-email):Belkide en küçük java e-posta kütüphanesi. (CC, Ek, şablon desteği). -- [Hutool](https://github.com/looly/hutool):Java tabanlı bir araç kütüphanesi. -- [Thumbnailator](https://github.com/coobird/thumbnailator):Küçük resim oluşturma kütüphanesi. -- [AdminLTE](https://github.com/almasaeed2010/AdminLTE):Bootstrap alt yapılı arka plan şablonu. -- [Bootstrap](https://github.com/twbs/bootstrap.git):En kapsamlı front-end ui çatısı. -- [Animate](https://github.com/daneden/animate.css.git):Kolay kullanımlı css kütüphanesi. -- [SimpleMDE - Markdown Editor](https://github.com/sparksuite/simplemde-markdown-editor):Markdown editor. -- [Bootstrap-FileInput](https://github.com/kartik-v/bootstrap-fileinput.git):Şahsen en iyi yükleme bileşeni olduğunu düşünyorum. -- [Font-awesome](https://github.com/FortAwesome/Font-Awesome.git):En çok kullanılan font simgesi kütüphanesi. -- [Jquery](https://github.com/jquery/jquery.git):Javascrip kullanımınızı genişletin. -- [Layer](https://github.com/sentsin/layer.git):Kişisel görüşüm en pratik ve en iyi görünen pop-up katman bileşeni. -- [Jquery-Toast](https://github.com/kamranahmedse/jquery-toast-plugin):Mesaj istemi bileşeni. -- [Pjax](https://github.com/defunkt/jquery-pjax.git):pushState + ajax = pjax.**** -- [OwO](https://github.com/DIYgod/OwO):Front-end ifade kütüphanesi. - -## Bağışlar - -| Alipay | Wechat | Alipay Red envelope | -| :------------: | :------------: | :------------: | -| | | | - - diff --git a/pom.xml b/pom.xml index 6bde0e130..b21416366 100755 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.6.RELEASE + 2.1.2.RELEASE @@ -31,15 +31,15 @@ UTF-8 UTF-8 1.8 - 0.0.3 - 1.18.2 - 3.6.0 + 0.0.4 + 1.18.4 + 3.6.3 1.0 - 4.1.19 + 4.4.2 4.0.1 - 7.2.14 + 7.2.18 0.4.8 - 2.3.0 + 0.12.1 @@ -55,12 +55,6 @@ - - org.springframework.boot - spring-boot-devtools - true - - org.springframework.boot spring-boot-starter-test @@ -152,6 +146,12 @@ com.qiniu qiniu-java-sdk ${qiniu-java-sdk.version} + + + okhttp + com.squareup.okhttp3 + + @@ -161,11 +161,21 @@ ${thumbnailator.version} - + - javax.xml.bind - jaxb-api - ${jaxb-api.version} + com.atlassian.commonmark + commonmark + ${commonmark.version} + + + com.atlassian.commonmark + commonmark-ext-gfm-tables + ${commonmark.version} + + + com.atlassian.commonmark + commonmark-ext-yaml-front-matter + ${commonmark.version} @@ -198,7 +208,6 @@ - org.apache.maven.plugins maven-surefire-plugin @@ -235,8 +244,6 @@ - - org.apache.maven.plugins maven-jar-plugin @@ -273,7 +280,6 @@ - org.apache.maven.plugins maven-surefire-plugin @@ -310,8 +316,6 @@ - - org.apache.maven.plugins maven-jar-plugin @@ -345,6 +349,11 @@ true + + org.apache.maven.plugins + maven-javadoc-plugin + 3.0.0 + diff --git a/src/main/java/cc/ryanc/halo/Application.java b/src/main/java/cc/ryanc/halo/Application.java index f67e743eb..0f65eb888 100755 --- a/src/main/java/cc/ryanc/halo/Application.java +++ b/src/main/java/cc/ryanc/halo/Application.java @@ -5,6 +5,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.ApplicationContext; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; /** *
@@ -17,6 +18,7 @@ import org.springframework.context.ApplicationContext;
 @Slf4j
 @SpringBootApplication
 @EnableCaching
+@EnableJpaAuditing
 public class Application {
     public static void main(String[] args) {
         ApplicationContext context = SpringApplication.run(Application.class, args);
diff --git a/src/main/java/cc/ryanc/halo/config/FreeMarkerConfig.java b/src/main/java/cc/ryanc/halo/config/FreeMarkerAutoConfiguration.java
similarity index 63%
rename from src/main/java/cc/ryanc/halo/config/FreeMarkerConfig.java
rename to src/main/java/cc/ryanc/halo/config/FreeMarkerAutoConfiguration.java
index 59c1df8ff..3646c50ba 100644
--- a/src/main/java/cc/ryanc/halo/config/FreeMarkerConfig.java
+++ b/src/main/java/cc/ryanc/halo/config/FreeMarkerAutoConfiguration.java
@@ -1,7 +1,10 @@
 package cc.ryanc.halo.config;
 
-import cc.ryanc.halo.model.tag.ArticleTagDirective;
-import cc.ryanc.halo.model.tag.CommonTagDirective;
+import cc.ryanc.halo.model.freemarker.method.RandomMethod;
+import cc.ryanc.halo.model.freemarker.method.RecentCommentsMethod;
+import cc.ryanc.halo.model.freemarker.method.RecentPostsMethod;
+import cc.ryanc.halo.model.freemarker.tag.ArticleTagDirective;
+import cc.ryanc.halo.model.freemarker.tag.CommonTagDirective;
 import cc.ryanc.halo.service.OptionsService;
 import cc.ryanc.halo.service.UserService;
 import freemarker.template.TemplateModelException;
@@ -21,7 +24,7 @@ import javax.annotation.PostConstruct;
  */
 @Slf4j
 @Configuration
-public class FreeMarkerConfig {
+public class FreeMarkerAutoConfiguration {
 
     @Autowired
     private freemarker.template.Configuration configuration;
@@ -38,6 +41,15 @@ public class FreeMarkerConfig {
     @Autowired
     private ArticleTagDirective articleTagDirective;
 
+    @Autowired
+    private RandomMethod randomMethod;
+
+    @Autowired
+    private RecentPostsMethod recentPostsMethod;
+
+    @Autowired
+    private RecentCommentsMethod recentCommentsMethod;
+
     @PostConstruct
     public void setSharedVariable() {
         try {
@@ -46,6 +58,9 @@ public class FreeMarkerConfig {
             configuration.setSharedVariable("articleTag", articleTagDirective);
             configuration.setSharedVariable("options", optionsService.findAllOptions());
             configuration.setSharedVariable("user", userService.findUser());
+            configuration.setSharedVariable("randomMethod", randomMethod);
+            configuration.setSharedVariable("recentPostsMethod", recentPostsMethod);
+            configuration.setSharedVariable("recentCommentsMethod", recentCommentsMethod);
         } catch (TemplateModelException e) {
             log.error("Custom tags failed to load:{}", e.getMessage());
         }
diff --git a/src/main/java/cc/ryanc/halo/config/StartupConfig.java b/src/main/java/cc/ryanc/halo/config/StartupConfig.java
deleted file mode 100755
index 651f71008..000000000
--- a/src/main/java/cc/ryanc/halo/config/StartupConfig.java
+++ /dev/null
@@ -1,243 +0,0 @@
-package cc.ryanc.halo.config;
-
-import cc.ryanc.halo.model.dto.HaloConst;
-import cc.ryanc.halo.model.dto.Theme;
-import cc.ryanc.halo.model.enums.BlogPropertiesEnum;
-import cc.ryanc.halo.model.enums.TrueFalseEnum;
-import cc.ryanc.halo.service.OptionsService;
-import cc.ryanc.halo.utils.HaloUtils;
-import cc.ryanc.halo.web.controller.core.BaseController;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.cron.CronUtil;
-import freemarker.template.TemplateModelException;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.context.event.ApplicationStartedEvent;
-import org.springframework.context.ApplicationListener;
-import org.springframework.context.annotation.Configuration;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 
- *     应用启动的时候所执行的方法
- * 
- * - * @author : RYAN0UP - * @date : 2017/12/22 - */ -@Slf4j -@Configuration -public class StartupConfig implements ApplicationListener { - - @Autowired - private OptionsService optionsService; - - @Autowired - private freemarker.template.Configuration configuration; - - @Override - public void onApplicationEvent(ApplicationStartedEvent event) { - try { - this.loadActiveTheme(); - } catch (TemplateModelException e) { - e.printStackTrace(); - } - this.loadOptions(); - this.loadThemes(); - this.loadOwo(); - this.autoBackup(); - } - - /** - * 加载主题设置 - */ - private void loadActiveTheme() throws TemplateModelException { - String themeValue = optionsService.findOneOption(BlogPropertiesEnum.THEME.getProp()); - if (StrUtil.isNotEmpty(themeValue) && !StrUtil.equals(themeValue, null)) { - BaseController.THEME = themeValue; - } else { - //以防万一 - BaseController.THEME = "anatole"; - } - configuration.setSharedVariable("themeName", BaseController.THEME); - } - - /** - * 加载设置选项 - */ - private void loadOptions() { - Map options = optionsService.findAllOptions(); - if (options != null && !options.isEmpty()) { - HaloConst.OPTIONS = options; - } - } - - /** - * 加载所有主题 - */ - private void loadThemes() { - HaloConst.THEMES.clear(); - List themes = HaloUtils.getThemes(); - if (null != themes) { - HaloConst.THEMES = themes; - } - } - - /** - * 启动定时备份 - */ - private void autoBackup() { - String autoBackup = optionsService.findOneOption(BlogPropertiesEnum.AUTO_BACKUP.getProp()); - if (StrUtil.isNotEmpty(autoBackup) && StrUtil.equals(autoBackup, TrueFalseEnum.TRUE.getDesc())) { - //启动定时任务 - CronUtil.start(); - log.info("The scheduled task starts successfully!"); - } - } - - /** - * 加载OwO表情 - */ - private void loadOwo() { - Map map = new HashMap<>(135); - map.put("@[nico]", "nico.png"); - map.put("@[OK]", "OK.png"); - map.put("@[what]", "what.png"); - map.put("@[三道杠]", "三道杠.png"); - map.put("@[不高兴]", "不高兴.png"); - map.put("@[乖]", "乖.png"); - map.put("@[你懂的]", "你懂的.png"); - map.put("@[便便]", "便便.png"); - map.put("@[冷]", "冷.png"); - map.put("@[勉强]", "勉强.png"); - map.put("@[吃瓜]", "吃瓜.png"); - map.put("@[吃翔]", "吃翔.png"); - map.put("@[吐]", "吐.png"); - map.put("@[吐舌]", "吐舌.png"); - map.put("@[呀咩爹]", "呀咩爹.png"); - map.put("@[呵呵]", "呵呵.png"); - map.put("@[呼]", "呼.png"); - map.put("@[咦]", "咦.png"); - map.put("@[哈哈]", "哈哈.png"); - map.put("@[啊]", "啊.png"); - map.put("@[喷]", "喷.png"); - map.put("@[嘚瑟]", "嘚瑟.png"); - map.put("@[大拇指]", "大拇指.png"); - map.put("@[太开心]", "太开心.png"); - map.put("@[太阳]", "太阳.png"); - map.put("@[委屈]", "委屈.png"); - map.put("@[小乖]", "小乖.png"); - map.put("@[小红脸]", "小红脸.png"); - map.put("@[开心]", "开心.png"); - map.put("@[弱]", "弱.png"); - map.put("@[彩虹]", "彩虹.png"); - map.put("@[心碎]", "心碎.png"); - map.put("@[怒]", "怒.png"); - map.put("@[惊哭]", "惊哭.png"); - map.put("@[惊恐]", "惊恐.png"); - map.put("@[惊讶]", "惊讶.png"); - map.put("@[懒得理]", "懒得理.png"); - map.put("@[手纸]", "手纸.png"); - map.put("@[挖鼻]", "挖鼻.png"); - map.put("@[捂嘴笑]", "捂嘴笑.png"); - map.put("@[星星月亮]", "星星月亮.png"); - map.put("@[汗]", "汗.png"); - map.put("@[沙发]", "沙发.png"); - map.put("@[泪]", "泪.png"); - map.put("@[滑稽]", "滑稽.png"); - map.put("@[灯泡]", "灯泡.png"); - map.put("@[爱心]", "爱心.png"); - map.put("@[犀利]", "犀利.png"); - map.put("@[狂汗]", "狂汗.png"); - map.put("@[玫瑰]", "玫瑰.png"); - map.put("@[生气]", "生气.png"); - map.put("@[疑问]", "疑问.png"); - map.put("@[真棒]", "真棒.png"); - map.put("@[睡觉]", "睡觉.png"); - map.put("@[礼物]", "礼物.png"); - map.put("@[笑尿]", "笑尿.png"); - map.put("@[笑眼]", "笑眼.png"); - map.put("@[红领巾]", "红领巾.png"); - map.put("@[胜利]", "胜利.png"); - map.put("@[花心]", "花心.png"); - map.put("@[茶杯]", "茶杯.png"); - map.put("@[药丸]", "药丸.png"); - map.put("@[蛋糕]", "蛋糕.png"); - map.put("@[蜡烛]", "蜡烛.png"); - map.put("@[鄙视]", "鄙视.png"); - map.put("@[酷]", "酷.png"); - map.put("@[酸爽]", "酸爽.png"); - map.put("@[钱]", "钱.png"); - map.put("@[钱币]", "钱币.png"); - map.put("@[阴险]", "阴险.png"); - map.put("@[音乐]", "音乐.png"); - map.put("@[香蕉]", "香蕉.png"); - map.put("@[黑线]", "黑线.png"); - map.put("@(不出所料)", "不出所料.png"); - map.put("@(不说话)", "不说话.png"); - map.put("@(不高兴)", "不高兴.png"); - map.put("@(中刀)", "中刀.png"); - map.put("@(中指)", "中指.png"); - map.put("@(中枪)", "中枪.png"); - map.put("@(亲亲)", "亲亲.png"); - map.put("@(便便)", "便便.png"); - map.put("@(傻笑)", "傻笑.png"); - map.put("@(内伤)", "内伤.png"); - map.put("@(击掌)", "击掌.png"); - map.put("@(口水)", "口水.png"); - map.put("@(吐)", "吐.png"); - map.put("@(吐舌)", "吐舌.png"); - map.put("@(吐血倒地)", "吐血倒地.png"); - map.put("@(呲牙)", "呲牙.png"); - map.put("@(咽气)", "咽气.png"); - map.put("@(哭泣)", "哭泣.png"); - map.put("@(喜极而泣)", "喜极而泣.png"); - map.put("@(喷水)", "喷水.png"); - map.put("@(喷血)", "喷血.png"); - map.put("@(坐等)", "坐等.png"); - map.put("@(大囧)", "大囧.png"); - map.put("@(害羞)", "害羞.png"); - map.put("@(小怒)", "小怒.png"); - map.put("@(小眼睛)", "小眼睛.png"); - map.put("@(尴尬)", "尴尬.png"); - map.put("@(得意)", "得意.png"); - map.put("@(惊喜)", "惊喜.png"); - map.put("@(想一想)", "想一想.png"); - map.put("@(愤怒)", "愤怒.png"); - map.put("@(扇耳光)", "扇耳光.png"); - map.put("@(投降)", "投降.png"); - map.put("@(抠鼻)", "抠鼻.png"); - map.put("@(抽烟)", "抽烟.png"); - map.put("@(无奈)", "无奈.png"); - map.put("@(无所谓)", "无所谓.png"); - map.put("@(无语)", "无语.png"); - map.put("@(暗地观察)", "暗地观察.png"); - map.put("@(期待)", "期待.png"); - map.put("@(欢呼)", "欢呼.png"); - map.put("@(汗)", "汗.png"); - map.put("@(深思)", "深思.png"); - map.put("@(狂汗)", "狂汗.png"); - map.put("@(献花)", "献花.png"); - map.put("@(献黄瓜)", "献黄瓜.png"); - map.put("@(皱眉)", "皱眉.png"); - map.put("@(看不见)", "看不见.png"); - map.put("@(看热闹)", "看热闹.png"); - map.put("@(肿包)", "肿包.png"); - map.put("@(脸红)", "脸红.png"); - map.put("@(蜡烛)", "蜡烛.png"); - map.put("@(装大款)", "装大款.png"); - map.put("@(观察)", "观察.png"); - map.put("@(赞一个)", "赞一个.png"); - map.put("@(邪恶)", "邪恶.png"); - map.put("@(锁眉)", "锁眉.png"); - map.put("@(长草)", "长草.png"); - map.put("@(阴暗)", "阴暗.png"); - map.put("@(高兴)", "高兴.png"); - map.put("@(黑线)", "黑线.png"); - map.put("@(鼓掌)", "鼓掌.png"); - HaloConst.OWO = map; - } -} diff --git a/src/main/java/cc/ryanc/halo/config/MvcConfig.java b/src/main/java/cc/ryanc/halo/config/WebMvcAutoConfiguration.java similarity index 82% rename from src/main/java/cc/ryanc/halo/config/MvcConfig.java rename to src/main/java/cc/ryanc/halo/config/WebMvcAutoConfiguration.java index 001574563..621ffe815 100644 --- a/src/main/java/cc/ryanc/halo/config/MvcConfig.java +++ b/src/main/java/cc/ryanc/halo/config/WebMvcAutoConfiguration.java @@ -30,7 +30,7 @@ import java.util.Locale; @EnableWebMvc @ComponentScan(basePackages = "cc.ryanc.halo.web.controller") @PropertySource(value = "classpath:application.yaml", ignoreResourceNotFound = true, encoding = "UTF-8") -public class MvcConfig implements WebMvcConfigurer { +public class WebMvcAutoConfiguration implements WebMvcConfigurer { @Autowired private LoginInterceptor loginInterceptor; @@ -52,6 +52,7 @@ public class MvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loginInterceptor) + .addPathPatterns("/admin.*") .addPathPatterns("/admin/**") .addPathPatterns("/backup/**") .excludePathPatterns("/admin/login") @@ -65,6 +66,7 @@ public class MvcConfig implements WebMvcConfigurer { registry.addInterceptor(apiInterceptor) .addPathPatterns("/api/**"); registry.addInterceptor(localeInterceptor) + .addPathPatterns("/admin.*") .addPathPatterns("/admin/**") .addPathPatterns("/install"); registry.addInterceptor(localeChangeInterceptor()) @@ -86,7 +88,7 @@ public class MvcConfig implements WebMvcConfigurer { registry.addResourceHandler("/upload/**") .addResourceLocations("file:///" + System.getProperties().getProperty("user.home") + "/halo/upload/"); registry.addResourceHandler("/favicon.ico") - .addResourceLocations("classpath:/static/images/favicon.ico"); + .addResourceLocations("classpath:/static/halo-backend/images/favicon.ico"); registry.addResourceHandler("/backup/**") .addResourceLocations("file:///" + System.getProperties().getProperty("user.home") + "/halo/backup/"); } @@ -98,11 +100,17 @@ public class MvcConfig implements WebMvcConfigurer { */ @Override public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**") - .allowCredentials(true) + registry.addMapping("/api/**") .allowedHeaders("*") .allowedOrigins("*") - .allowedMethods("*"); + .allowedMethods("GET", "POST") + .exposedHeaders("access-control-allow-headers", + "access-control-allow-methods", + "access-control-allow-origin", + "access-control-max-age", + "X-Frame-Options", + "token") + .allowCredentials(false).maxAge(3600); } /** @@ -112,7 +120,7 @@ public class MvcConfig implements WebMvcConfigurer { */ @Bean public LocaleResolver localeResolver() { - SessionLocaleResolver slr = new SessionLocaleResolver(); + final SessionLocaleResolver slr = new SessionLocaleResolver(); slr.setDefaultLocale(Locale.CHINA); return slr; } @@ -124,7 +132,7 @@ public class MvcConfig implements WebMvcConfigurer { */ @Bean public LocaleChangeInterceptor localeChangeInterceptor() { - LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); + final LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); lci.setParamName("lang"); return lci; } diff --git a/src/main/java/cc/ryanc/halo/listener/StartedListener.java b/src/main/java/cc/ryanc/halo/listener/StartedListener.java new file mode 100644 index 000000000..afa2e249e --- /dev/null +++ b/src/main/java/cc/ryanc/halo/listener/StartedListener.java @@ -0,0 +1,232 @@ +package cc.ryanc.halo.listener; + +import cc.ryanc.halo.model.dto.HaloConst; +import cc.ryanc.halo.model.dto.Theme; +import cc.ryanc.halo.model.enums.BlogPropertiesEnum; +import cc.ryanc.halo.service.OptionsService; +import cc.ryanc.halo.utils.HaloUtils; +import cc.ryanc.halo.web.controller.core.BaseController; +import cn.hutool.core.util.StrUtil; +import cn.hutool.cron.CronUtil; +import freemarker.template.TemplateModelException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.context.annotation.Configuration; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + *
+ *     应用启动完成后所执行的方法
+ * 
+ * + * @author : RYAN0UP + * @date : 2018/12/5 + */ +@Slf4j +@Configuration +public class StartedListener implements ApplicationListener { + + @Autowired + private OptionsService optionsService; + + @Autowired + private freemarker.template.Configuration configuration; + + @Override + public void onApplicationEvent(ApplicationStartedEvent event) { + try { + this.loadActiveTheme(); + } catch (TemplateModelException e) { + e.printStackTrace(); + } + this.loadOptions(); + this.loadThemes(); + this.loadOwo(); + //启动定时任务 + CronUtil.start(); + log.info("The scheduled task starts successfully!"); + } + + /** + * 加载主题设置 + */ + private void loadActiveTheme() throws TemplateModelException { + final String themeValue = optionsService.findOneOption(BlogPropertiesEnum.THEME.getProp()); + if (StrUtil.isNotEmpty(themeValue) && !StrUtil.equals(themeValue, null)) { + BaseController.THEME = themeValue; + } else { + //如果没有设置主题,则默认 + BaseController.THEME = "anatole"; + } + configuration.setSharedVariable("themeName", BaseController.THEME); + } + + /** + * 加载设置选项 + */ + private void loadOptions() { + final Map options = optionsService.findAllOptions(); + if (options != null && !options.isEmpty()) { + HaloConst.OPTIONS = options; + } + } + + /** + * 加载所有主题 + */ + private void loadThemes() { + HaloConst.THEMES.clear(); + final List themes = HaloUtils.getThemes(); + if (null != themes) { + HaloConst.THEMES = themes; + } + } + + /** + * 加载OwO表情 + */ + private void loadOwo() { + final Map map = new HashMap<>(135); + map.put("@[nico]", "nico.png"); + map.put("@[OK]", "OK.png"); + map.put("@[what]", "what.png"); + map.put("@[三道杠]", "三道杠.png"); + map.put("@[不高兴]", "不高兴.png"); + map.put("@[乖]", "乖.png"); + map.put("@[你懂的]", "你懂的.png"); + map.put("@[便便]", "便便.png"); + map.put("@[冷]", "冷.png"); + map.put("@[勉强]", "勉强.png"); + map.put("@[吃瓜]", "吃瓜.png"); + map.put("@[吃翔]", "吃翔.png"); + map.put("@[吐]", "吐.png"); + map.put("@[吐舌]", "吐舌.png"); + map.put("@[呀咩爹]", "呀咩爹.png"); + map.put("@[呵呵]", "呵呵.png"); + map.put("@[呼]", "呼.png"); + map.put("@[咦]", "咦.png"); + map.put("@[哈哈]", "哈哈.png"); + map.put("@[啊]", "啊.png"); + map.put("@[喷]", "喷.png"); + map.put("@[嘚瑟]", "嘚瑟.png"); + map.put("@[大拇指]", "大拇指.png"); + map.put("@[太开心]", "太开心.png"); + map.put("@[太阳]", "太阳.png"); + map.put("@[委屈]", "委屈.png"); + map.put("@[小乖]", "小乖.png"); + map.put("@[小红脸]", "小红脸.png"); + map.put("@[开心]", "开心.png"); + map.put("@[弱]", "弱.png"); + map.put("@[彩虹]", "彩虹.png"); + map.put("@[心碎]", "心碎.png"); + map.put("@[怒]", "怒.png"); + map.put("@[惊哭]", "惊哭.png"); + map.put("@[惊恐]", "惊恐.png"); + map.put("@[惊讶]", "惊讶.png"); + map.put("@[懒得理]", "懒得理.png"); + map.put("@[手纸]", "手纸.png"); + map.put("@[挖鼻]", "挖鼻.png"); + map.put("@[捂嘴笑]", "捂嘴笑.png"); + map.put("@[星星月亮]", "星星月亮.png"); + map.put("@[汗]", "汗.png"); + map.put("@[沙发]", "沙发.png"); + map.put("@[泪]", "泪.png"); + map.put("@[滑稽]", "滑稽.png"); + map.put("@[灯泡]", "灯泡.png"); + map.put("@[爱心]", "爱心.png"); + map.put("@[犀利]", "犀利.png"); + map.put("@[狂汗]", "狂汗.png"); + map.put("@[玫瑰]", "玫瑰.png"); + map.put("@[生气]", "生气.png"); + map.put("@[疑问]", "疑问.png"); + map.put("@[真棒]", "真棒.png"); + map.put("@[睡觉]", "睡觉.png"); + map.put("@[礼物]", "礼物.png"); + map.put("@[笑尿]", "笑尿.png"); + map.put("@[笑眼]", "笑眼.png"); + map.put("@[红领巾]", "红领巾.png"); + map.put("@[胜利]", "胜利.png"); + map.put("@[花心]", "花心.png"); + map.put("@[茶杯]", "茶杯.png"); + map.put("@[药丸]", "药丸.png"); + map.put("@[蛋糕]", "蛋糕.png"); + map.put("@[蜡烛]", "蜡烛.png"); + map.put("@[鄙视]", "鄙视.png"); + map.put("@[酷]", "酷.png"); + map.put("@[酸爽]", "酸爽.png"); + map.put("@[钱]", "钱.png"); + map.put("@[钱币]", "钱币.png"); + map.put("@[阴险]", "阴险.png"); + map.put("@[音乐]", "音乐.png"); + map.put("@[香蕉]", "香蕉.png"); + map.put("@[黑线]", "黑线.png"); + map.put("@(不出所料)", "不出所料.png"); + map.put("@(不说话)", "不说话.png"); + map.put("@(不高兴)", "不高兴.png"); + map.put("@(中刀)", "中刀.png"); + map.put("@(中指)", "中指.png"); + map.put("@(中枪)", "中枪.png"); + map.put("@(亲亲)", "亲亲.png"); + map.put("@(便便)", "便便.png"); + map.put("@(傻笑)", "傻笑.png"); + map.put("@(内伤)", "内伤.png"); + map.put("@(击掌)", "击掌.png"); + map.put("@(口水)", "口水.png"); + map.put("@(吐)", "吐.png"); + map.put("@(吐舌)", "吐舌.png"); + map.put("@(吐血倒地)", "吐血倒地.png"); + map.put("@(呲牙)", "呲牙.png"); + map.put("@(咽气)", "咽气.png"); + map.put("@(哭泣)", "哭泣.png"); + map.put("@(喜极而泣)", "喜极而泣.png"); + map.put("@(喷水)", "喷水.png"); + map.put("@(喷血)", "喷血.png"); + map.put("@(坐等)", "坐等.png"); + map.put("@(大囧)", "大囧.png"); + map.put("@(害羞)", "害羞.png"); + map.put("@(小怒)", "小怒.png"); + map.put("@(小眼睛)", "小眼睛.png"); + map.put("@(尴尬)", "尴尬.png"); + map.put("@(得意)", "得意.png"); + map.put("@(惊喜)", "惊喜.png"); + map.put("@(想一想)", "想一想.png"); + map.put("@(愤怒)", "愤怒.png"); + map.put("@(扇耳光)", "扇耳光.png"); + map.put("@(投降)", "投降.png"); + map.put("@(抠鼻)", "抠鼻.png"); + map.put("@(抽烟)", "抽烟.png"); + map.put("@(无奈)", "无奈.png"); + map.put("@(无所谓)", "无所谓.png"); + map.put("@(无语)", "无语.png"); + map.put("@(暗地观察)", "暗地观察.png"); + map.put("@(期待)", "期待.png"); + map.put("@(欢呼)", "欢呼.png"); + map.put("@(汗)", "汗.png"); + map.put("@(深思)", "深思.png"); + map.put("@(狂汗)", "狂汗.png"); + map.put("@(献花)", "献花.png"); + map.put("@(献黄瓜)", "献黄瓜.png"); + map.put("@(皱眉)", "皱眉.png"); + map.put("@(看不见)", "看不见.png"); + map.put("@(看热闹)", "看热闹.png"); + map.put("@(肿包)", "肿包.png"); + map.put("@(脸红)", "脸红.png"); + map.put("@(蜡烛)", "蜡烛.png"); + map.put("@(装大款)", "装大款.png"); + map.put("@(观察)", "观察.png"); + map.put("@(赞一个)", "赞一个.png"); + map.put("@(邪恶)", "邪恶.png"); + map.put("@(锁眉)", "锁眉.png"); + map.put("@(长草)", "长草.png"); + map.put("@(阴暗)", "阴暗.png"); + map.put("@(高兴)", "高兴.png"); + map.put("@(黑线)", "黑线.png"); + map.put("@(鼓掌)", "鼓掌.png"); + HaloConst.OWO = map; + } +} diff --git a/src/main/java/cc/ryanc/halo/model/domain/Attachment.java b/src/main/java/cc/ryanc/halo/model/domain/Attachment.java index f49b84465..b7db4d068 100644 --- a/src/main/java/cc/ryanc/halo/model/domain/Attachment.java +++ b/src/main/java/cc/ryanc/halo/model/domain/Attachment.java @@ -1,11 +1,10 @@ package cc.ryanc.halo.model.domain; import lombok.Data; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; +import javax.persistence.*; import java.io.Serializable; import java.util.Date; @@ -20,6 +19,7 @@ import java.util.Date; @Data @Entity @Table(name = "halo_attachment") +@EntityListeners(AuditingEntityListener.class) public class Attachment implements Serializable { private static final long serialVersionUID = 3060117944880138064L; @@ -59,6 +59,7 @@ public class Attachment implements Serializable { /** * 上传时间 */ + @CreatedDate private Date attachCreated; /** @@ -70,4 +71,14 @@ public class Attachment implements Serializable { * 附件长宽 */ private String attachWh; + + /** + * 附件存储地址 + */ + private String attachLocation; + + /** + * 附件来源,0:上传,1:外部链接 + */ + private Integer attachOrigin = 0; } diff --git a/src/main/java/cc/ryanc/halo/model/domain/Comment.java b/src/main/java/cc/ryanc/halo/model/domain/Comment.java index 8fbc41664..d1dd17b04 100644 --- a/src/main/java/cc/ryanc/halo/model/domain/Comment.java +++ b/src/main/java/cc/ryanc/halo/model/domain/Comment.java @@ -2,6 +2,8 @@ package cc.ryanc.halo.model.domain; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax.persistence.*; import javax.validation.constraints.Email; @@ -21,6 +23,7 @@ import java.util.List; @Data @Entity @Table(name = "halo_comment") +@EntityListeners(AuditingEntityListener.class) public class Comment implements Serializable { private static final long serialVersionUID = -6639021627094260505L; @@ -72,6 +75,7 @@ public class Comment implements Serializable { /** * 评论时间 */ + @CreatedDate private Date commentDate; /** @@ -84,6 +88,7 @@ public class Comment implements Serializable { /** * 评论者ua信息 */ + @Column(length = 512) private String commentAgent; /** diff --git a/src/main/java/cc/ryanc/halo/model/domain/Link.java b/src/main/java/cc/ryanc/halo/model/domain/Link.java index 308a4930a..178aa19d6 100755 --- a/src/main/java/cc/ryanc/halo/model/domain/Link.java +++ b/src/main/java/cc/ryanc/halo/model/domain/Link.java @@ -6,6 +6,7 @@ import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; +import javax.validation.constraints.NotEmpty; import java.io.Serializable; /** @@ -33,11 +34,13 @@ public class Link implements Serializable { /** * 友情链接名称 */ + @NotEmpty(message = "友情链接名称不能为空!") private String linkName; /** * 友情链接地址 */ + @NotEmpty(message = "友情链接地址不能为空!") private String linkUrl; /** diff --git a/src/main/java/cc/ryanc/halo/model/domain/Logs.java b/src/main/java/cc/ryanc/halo/model/domain/Logs.java index be550604a..604f026f3 100644 --- a/src/main/java/cc/ryanc/halo/model/domain/Logs.java +++ b/src/main/java/cc/ryanc/halo/model/domain/Logs.java @@ -1,11 +1,10 @@ package cc.ryanc.halo.model.domain; import lombok.Data; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; +import javax.persistence.*; import java.io.Serializable; import java.util.Date; @@ -20,6 +19,7 @@ import java.util.Date; @Data @Entity @Table(name = "halo_logs") +@EntityListeners(AuditingEntityListener.class) public class Logs implements Serializable { private static final long serialVersionUID = -2571815432301283171L; @@ -49,6 +49,7 @@ public class Logs implements Serializable { /** * 产生的时间 */ + @CreatedDate private Date logCreated; public Logs() { diff --git a/src/main/java/cc/ryanc/halo/model/domain/Menu.java b/src/main/java/cc/ryanc/halo/model/domain/Menu.java index b4850ee7f..aaed95e9e 100644 --- a/src/main/java/cc/ryanc/halo/model/domain/Menu.java +++ b/src/main/java/cc/ryanc/halo/model/domain/Menu.java @@ -6,6 +6,8 @@ import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; import java.io.Serializable; /** @@ -33,16 +35,19 @@ public class Menu implements Serializable { /** * 菜单名称 */ + @NotEmpty(message = "菜单名称不能为空!") private String menuName; /** * 菜单路径 */ + @NotEmpty(message = "菜单路径不能为空!") private String menuUrl; /** * 排序编号 */ + @NotNull(message = "排序编号不能为空!") private Integer menuSort; /** diff --git a/src/main/java/cc/ryanc/halo/model/domain/Post.java b/src/main/java/cc/ryanc/halo/model/domain/Post.java index b3da107be..4f54480e5 100755 --- a/src/main/java/cc/ryanc/halo/model/domain/Post.java +++ b/src/main/java/cc/ryanc/halo/model/domain/Post.java @@ -1,8 +1,10 @@ package cc.ryanc.halo.model.domain; import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax.persistence.*; import java.io.Serializable; @@ -21,6 +23,7 @@ import java.util.List; @Data @Entity @Table(name = "halo_post") +@EntityListeners(AuditingEntityListener.class) public class Post implements Serializable { private static final long serialVersionUID = -6019684584665869629L; @@ -106,11 +109,13 @@ public class Post implements Serializable { /** * 发表日期 */ + @CreatedDate private Date postDate; /** * 最后一次更新时间 */ + @LastModifiedDate private Date postUpdate; /** @@ -130,6 +135,11 @@ public class Post implements Serializable { */ private Integer allowComment = 0; + /** + * 文章访问密码 + */ + private String postPassword; + /** * 指定渲染模板 */ diff --git a/src/main/java/cc/ryanc/halo/model/domain/Tag.java b/src/main/java/cc/ryanc/halo/model/domain/Tag.java index 1bc79b564..4922b3a26 100644 --- a/src/main/java/cc/ryanc/halo/model/domain/Tag.java +++ b/src/main/java/cc/ryanc/halo/model/domain/Tag.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import javax.persistence.*; +import javax.validation.constraints.NotEmpty; import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -33,11 +34,13 @@ public class Tag implements Serializable { /** * 标签名称 */ + @NotEmpty(message = "标签名称不能为空!") private String tagName; /** * 标签路径 */ + @NotEmpty(message = "标签路径不能为空!") private String tagUrl; @ManyToMany(mappedBy = "tags") diff --git a/src/main/java/cc/ryanc/halo/model/dto/HaloConst.java b/src/main/java/cc/ryanc/halo/model/dto/HaloConst.java index c9f1df8ab..6da24ae22 100644 --- a/src/main/java/cc/ryanc/halo/model/dto/HaloConst.java +++ b/src/main/java/cc/ryanc/halo/model/dto/HaloConst.java @@ -34,4 +34,9 @@ public class HaloConst { * user_session */ public static String USER_SESSION_KEY = "user_session"; + + /** + * 文章阅读数缓存 + */ + public static Map POSTS_VIEWS = new HashMap<>(); } diff --git a/src/main/java/cc/ryanc/halo/model/dto/QiNiuPutSet.java b/src/main/java/cc/ryanc/halo/model/dto/QiNiuPutSet.java new file mode 100644 index 000000000..219bdebff --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/dto/QiNiuPutSet.java @@ -0,0 +1,30 @@ +package cc.ryanc.halo.model.dto; + +import lombok.Data; + +/** + *
+ *     七牛上传自定义凭证回调解析
+ * 
+ * + * @author : Yawn + * @date : 2018/12/3 + */ +@Data +public class QiNiuPutSet { + + /** + * 图片大小 + */ + private Long size; + + /** + * 长 + */ + private Integer w; + + /** + * 宽 + */ + private Integer h; +} diff --git a/src/main/java/cc/ryanc/halo/model/enums/AttachLocationEnum.java b/src/main/java/cc/ryanc/halo/model/enums/AttachLocationEnum.java new file mode 100644 index 000000000..280ca29a4 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/enums/AttachLocationEnum.java @@ -0,0 +1,43 @@ +package cc.ryanc.halo.model.enums; + +/** + *
+ *     附件存储地址enum
+ * 
+ * + * @author : Yawn + * @date : 2018/12/4 + */ +public enum AttachLocationEnum { + + /** + * 服务器 + */ + SERVER(0,"server"), + + /** + * 七牛 + */ + QINIU(1,"qiniu"), + + /** + * 又拍云 + */ + UPYUN(2,"upyun"); + + private Integer code; + private String desc; + + AttachLocationEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } +} diff --git a/src/main/java/cc/ryanc/halo/model/enums/BlogPropertiesEnum.java b/src/main/java/cc/ryanc/halo/model/enums/BlogPropertiesEnum.java index 01be00b2b..4a9176b2e 100644 --- a/src/main/java/cc/ryanc/halo/model/enums/BlogPropertiesEnum.java +++ b/src/main/java/cc/ryanc/halo/model/enums/BlogPropertiesEnum.java @@ -138,7 +138,7 @@ public enum BlogPropertiesEnum { /** * 默认缩略图地址 */ - DEFAULT_THUMBNAIL("/static/images/thumbnail/thumbnail.png"), + DEFAULT_THUMBNAIL("/static/halo-frontend/images/thumbnail/thumbnail.png"), /** * 自动备份 @@ -148,7 +148,12 @@ public enum BlogPropertiesEnum { /** * API Token */ - API_TOKEN("api_token"); + API_TOKEN("api_token"), + + /** + * 附件存储位置 + */ + ATTACH_LOC("attach_loc"); private String prop; diff --git a/src/main/java/cc/ryanc/halo/model/freemarker/method/RandomMethod.java b/src/main/java/cc/ryanc/halo/model/freemarker/method/RandomMethod.java new file mode 100644 index 000000000..4673a8445 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/freemarker/method/RandomMethod.java @@ -0,0 +1,33 @@ +package cc.ryanc.halo.model.freemarker.method; + +import cn.hutool.core.util.RandomUtil; +import freemarker.template.SimpleNumber; +import freemarker.template.TemplateMethodModelEx; +import freemarker.template.TemplateModelException; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author : RYAN0UP + * @date : 2018/12/21 + */ +@Component +public class RandomMethod implements TemplateMethodModelEx { + + /** + * 生成随机数 + * + * @param arguments 参数 + * @return Object + * @throws TemplateModelException TemplateModelException + */ + @Override + public Object exec(List arguments) throws TemplateModelException { + SimpleNumber argOne = (SimpleNumber) arguments.get(0); + SimpleNumber argTwo = (SimpleNumber) arguments.get(1); + int start = argOne.getAsNumber().intValue(); + int end = argTwo.getAsNumber().intValue(); + return RandomUtil.randomInt(start, end); + } +} diff --git a/src/main/java/cc/ryanc/halo/model/freemarker/method/RecentCommentsMethod.java b/src/main/java/cc/ryanc/halo/model/freemarker/method/RecentCommentsMethod.java new file mode 100644 index 000000000..e18f1a221 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/freemarker/method/RecentCommentsMethod.java @@ -0,0 +1,35 @@ +package cc.ryanc.halo.model.freemarker.method; + +import cc.ryanc.halo.service.CommentService; +import freemarker.template.SimpleNumber; +import freemarker.template.TemplateMethodModelEx; +import freemarker.template.TemplateModelException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author : RYAN0UP + * @date : 2018/12/31 + */ +@Component +public class RecentCommentsMethod implements TemplateMethodModelEx { + + @Autowired + private CommentService commentService; + + /** + * 获取最近的评论 + * + * @param arguments 参数 + * @return Object + * @throws TemplateModelException TemplateModelException + */ + @Override + public Object exec(List arguments) throws TemplateModelException { + SimpleNumber argOne = (SimpleNumber) arguments.get(0); + int limit = argOne.getAsNumber().intValue(); + return commentService.getRecentComments(limit); + } +} diff --git a/src/main/java/cc/ryanc/halo/model/freemarker/method/RecentPostsMethod.java b/src/main/java/cc/ryanc/halo/model/freemarker/method/RecentPostsMethod.java new file mode 100644 index 000000000..fd4abab81 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/freemarker/method/RecentPostsMethod.java @@ -0,0 +1,35 @@ +package cc.ryanc.halo.model.freemarker.method; + +import cc.ryanc.halo.service.PostService; +import freemarker.template.SimpleNumber; +import freemarker.template.TemplateMethodModelEx; +import freemarker.template.TemplateModelException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author : RYAN0UP + * @date : 2018/12/31 + */ +@Component +public class RecentPostsMethod implements TemplateMethodModelEx { + + @Autowired + private PostService postService; + + /** + * 获取最近的文章 + * + * @param arguments 参数 + * @return Object + * @throws TemplateModelException TemplateModelException + */ + @Override + public Object exec(List arguments) throws TemplateModelException { + SimpleNumber argOne = (SimpleNumber) arguments.get(0); + int limit = argOne.getAsNumber().intValue(); + return postService.getRecentPosts(limit); + } +} diff --git a/src/main/java/cc/ryanc/halo/model/tag/ArticleTagDirective.java b/src/main/java/cc/ryanc/halo/model/freemarker/tag/ArticleTagDirective.java similarity index 92% rename from src/main/java/cc/ryanc/halo/model/tag/ArticleTagDirective.java rename to src/main/java/cc/ryanc/halo/model/freemarker/tag/ArticleTagDirective.java index 2554d315c..93130af48 100644 --- a/src/main/java/cc/ryanc/halo/model/tag/ArticleTagDirective.java +++ b/src/main/java/cc/ryanc/halo/model/freemarker/tag/ArticleTagDirective.java @@ -1,4 +1,4 @@ -package cc.ryanc.halo.model.tag; +package cc.ryanc.halo.model.freemarker.tag; import cc.ryanc.halo.model.enums.PostStatusEnum; import cc.ryanc.halo.model.enums.PostTypeEnum; @@ -29,7 +29,7 @@ public class ArticleTagDirective implements TemplateDirectiveModel { @Override public void execute(Environment environment, Map map, TemplateModel[] templateModels, TemplateDirectiveBody templateDirectiveBody) throws TemplateException, IOException { - DefaultObjectWrapperBuilder builder = new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_25); + final DefaultObjectWrapperBuilder builder = new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_25); if (map.containsKey(METHOD_KEY)) { String method = map.get(METHOD_KEY).toString(); switch (method) { diff --git a/src/main/java/cc/ryanc/halo/model/tag/CommonTagDirective.java b/src/main/java/cc/ryanc/halo/model/freemarker/tag/CommonTagDirective.java similarity index 80% rename from src/main/java/cc/ryanc/halo/model/tag/CommonTagDirective.java rename to src/main/java/cc/ryanc/halo/model/freemarker/tag/CommonTagDirective.java index 71d519271..577d913f4 100644 --- a/src/main/java/cc/ryanc/halo/model/tag/CommonTagDirective.java +++ b/src/main/java/cc/ryanc/halo/model/freemarker/tag/CommonTagDirective.java @@ -1,7 +1,5 @@ -package cc.ryanc.halo.model.tag; +package cc.ryanc.halo.model.freemarker.tag; -import cc.ryanc.halo.model.dto.HaloConst; -import cc.ryanc.halo.model.enums.BlogPropertiesEnum; import cc.ryanc.halo.service.*; import freemarker.core.Environment; import freemarker.template.*; @@ -41,24 +39,24 @@ public class CommonTagDirective implements TemplateDirectiveModel { @Override public void execute(Environment environment, Map map, TemplateModel[] templateModels, TemplateDirectiveBody templateDirectiveBody) throws TemplateException, IOException { - DefaultObjectWrapperBuilder builder = new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_25); + final DefaultObjectWrapperBuilder builder = new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_25); if (map.containsKey(METHOD_KEY)) { String method = map.get(METHOD_KEY).toString(); switch (method) { case "menus": - environment.setVariable("menus", builder.build().wrap(menuService.findAllMenus())); + environment.setVariable("menus", builder.build().wrap(menuService.findAll())); break; case "categories": - environment.setVariable("categories", builder.build().wrap(categoryService.findAllCategories())); + environment.setVariable("categories", builder.build().wrap(categoryService.findAll())); break; case "tags": - environment.setVariable("tags", builder.build().wrap(tagService.findAllTags())); + environment.setVariable("tags", builder.build().wrap(tagService.findAll())); break; case "links": - environment.setVariable("links", builder.build().wrap(linkService.findAllLinks())); + environment.setVariable("links", builder.build().wrap(linkService.findAll())); break; case "newComments": - environment.setVariable("newComments", builder.build().wrap(commentService.findAllComments(1))); + environment.setVariable("newComments", builder.build().wrap(commentService.findAll(1))); break; default: break; diff --git a/src/main/java/cc/ryanc/halo/repository/CategoryRepository.java b/src/main/java/cc/ryanc/halo/repository/CategoryRepository.java index b77ed9708..8c4881403 100755 --- a/src/main/java/cc/ryanc/halo/repository/CategoryRepository.java +++ b/src/main/java/cc/ryanc/halo/repository/CategoryRepository.java @@ -20,4 +20,12 @@ public interface CategoryRepository extends JpaRepository { * @return Category */ Category findCategoryByCateUrl(String cateUrl); + + /** + * 根据分类名称查询 + * + * @param cateName 分类名称 + * @return Category + */ + Category findCategoryByCateName(String cateName); } diff --git a/src/main/java/cc/ryanc/halo/repository/CommentRepository.java b/src/main/java/cc/ryanc/halo/repository/CommentRepository.java index 46b7e64c3..d13ebe3a5 100644 --- a/src/main/java/cc/ryanc/halo/repository/CommentRepository.java +++ b/src/main/java/cc/ryanc/halo/repository/CommentRepository.java @@ -6,6 +6,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import java.util.List; @@ -88,4 +89,13 @@ public interface CommentRepository extends JpaRepository { * @return 评论数量 */ Integer countAllByCommentStatus(Integer status); + + /** + * 获取指定条数的评论 + * + * @param limit 条数 + * @return List + */ + @Query(value = "SELECT * FROM halo_comment WHERE comment_status = 0 ORDER BY comment_date DESC LIMIT :limit",nativeQuery = true) + List getCommentsByLimit(@Param(value = "limit") int limit); } diff --git a/src/main/java/cc/ryanc/halo/repository/PostRepository.java b/src/main/java/cc/ryanc/halo/repository/PostRepository.java index dd79f5df2..e5a10bb95 100644 --- a/src/main/java/cc/ryanc/halo/repository/PostRepository.java +++ b/src/main/java/cc/ryanc/halo/repository/PostRepository.java @@ -27,7 +27,7 @@ public interface PostRepository extends JpaRepository { * * @return List */ - @Query(value = "SELECT * FROM halo_post where post_type='post' ORDER BY post_date DESC LIMIT 5", nativeQuery = true) + @Query(value = "SELECT * FROM halo_post WHERE post_type='post' ORDER BY post_date DESC LIMIT 5", nativeQuery = true) List findTopFive(); /** @@ -38,23 +38,27 @@ public interface PostRepository extends JpaRepository { */ List findPostsByPostType(String postType); - /** - * 分页查询文章 - * - * @param postType post or page - * @param pageable 分页信息 - * @return Page - */ - Page findPostsByPostType(String postType, Pageable pageable); - /** * 模糊查询 * - * @param keyWord keyword - * @param pageable pageable - * @return List + * @param postType0 postType0 + * @param postStatus0 postStatus0 + * @param postTitle postTitle + * @param postType1 postType1 + * @param postStatus1 postStatus1 + * @param postContent postContent + * @param pageable pageable + * @return Page */ - List findByPostTitleLike(String keyWord, Pageable pageable); + Page findByPostTypeAndPostStatusAndPostTitleLikeOrPostTypeAndPostStatusAndPostContentLike( + String postType0, + Integer postStatus0, + String postTitle, + String postType1, + Integer postStatus1, + String postContent, + Pageable pageable + ); /** * 根据文章的状态查询 分页 @@ -94,32 +98,29 @@ public interface PostRepository extends JpaRepository { Post findPostByPostIdAndPostType(Long postId, String postType); /** - * 查询之后文章 + * 查询指定日期之前的文章 * - * @param postDate 发布时间 - * @param postStatus 0,1,2 - * @param postType post or page - * @return List + * @param postDate 日期 + * @return Post */ - List findByPostDateAfterAndPostStatusAndPostTypeOrderByPostDateDesc(Date postDate, Integer postStatus, String postType); - + @Query(value = "SELECT * FROM halo_post WHERE post_status = 0 AND post_type='post' AND post_date < :postDate ORDER BY post_date DESC LIMIT 1", nativeQuery = true) + Post queryPrePost(@Param("postDate") Date postDate); /** - * 查询之前的文章 + * 查询指定日期之后的文章 * - * @param postDate 发布时间 - * @param postStatus 0,1,2 - * @param postType post or page - * @return List + * @param postDate 日期 + * @return Post */ - List findByPostDateBeforeAndPostStatusAndPostTypeOrderByPostDateAsc(Date postDate, Integer postStatus, String postType); + @Query(value = "SELECT * FROM halo_post WHERE post_status = 0 AND post_type='post' AND post_date > :postDate ORDER BY post_date ASC LIMIT 1", nativeQuery = true) + Post queryNextPost(@Param("postDate") Date postDate); /** * 查询文章归档信息 根据年份和月份 * * @return List */ - @Query(value = "select year(post_date) as year,month(post_date) as month,count(*) as count from halo_post where post_status=0 and post_type='post' group by year(post_date),month(post_date) order by year desc,month desc", nativeQuery = true) + @Query(value = "SELECT YEAR(post_date) AS YEAR,MONTH(post_date) AS MONTH,COUNT(*) AS COUNT FROM halo_post WHERE post_status=0 and post_type='post' GROUP BY YEAR(post_date),MONTH(post_date) ORDER BY YEAR DESC,MONTH DESC", nativeQuery = true) List findPostGroupByYearAndMonth(); /** @@ -127,9 +128,31 @@ public interface PostRepository extends JpaRepository { * * @return List */ - @Query(value = "select year(post_date) as year,count(*) as count from halo_post where post_status=0 and post_type='post' group by year(post_date) order by year desc", nativeQuery = true) + @Query(value = "SELECT YEAR(post_date) AS YEAR,COUNT(*) AS COUNT FROM halo_post WHERE post_status=0 AND post_type='post' GROUP BY YEAR(post_date) ORDER BY YEAR DESC", nativeQuery = true) List findPostGroupByYear(); + + /** + * @return List + * @Author Aquan + * @Description 查询文章归档信息 查询所有文章 + * @Date 2019.1.4 11:19 + * @Param + **/ + @Query(value = "SELECT *,YEAR(post_date) AS YEAR FROM halo_post WHERE post_status=0 AND post_type='post' ORDER BY post_date DESC", nativeQuery = true) + List findAllPost(); + + /** + * @return Integer + * @Author Aquan + * @Description 查询文章总数 + * @Date 2019.1.4 15:03 + * @Param + **/ + @Query(value = "SELECT count(1) AS COUNT FROM halo_post WHERE post_status=0 AND post_type='post'", nativeQuery = true) + Integer totalAllPostCount(); + + /** * 根据年份和月份查询文章 * @@ -137,7 +160,7 @@ public interface PostRepository extends JpaRepository { * @param month month * @return List */ - @Query(value = "select *,year(post_date) as year,month(post_date) as month from halo_post where post_status=0 and post_type='post' and year(post_date)=:year and month(post_date)=:month order by post_date desc", nativeQuery = true) + @Query(value = "SELECT *,YEAR(post_date) AS YEAR,MONTH(post_date) AS MONTH FROM halo_post WHERE post_status=0 and post_type='post' AND YEAR(post_date)=:year AND MONTH(post_date)=:month ORDER BY post_date DESC", nativeQuery = true) List findPostByYearAndMonth(@Param("year") String year, @Param("month") String month); /** @@ -146,7 +169,7 @@ public interface PostRepository extends JpaRepository { * @param year year * @return List */ - @Query(value = "select *,year(post_date) as year from halo_post where post_status=0 and post_type='post' and year(post_date)=:year order by post_date desc", nativeQuery = true) + @Query(value = "SELECT *,YEAR(post_date) AS YEAR FROM halo_post WHERE post_status=0 AND post_type='post' AND YEAR(post_date)=:year ORDER BY post_date DESC", nativeQuery = true) List findPostByYear(@Param("year") String year); /** @@ -157,7 +180,7 @@ public interface PostRepository extends JpaRepository { * @param pageable pageable * @return Page */ - @Query(value = "select * from halo_post where post_status=0 and post_type='post' and year(post_date)=:year and month(post_date)=:month order by post_date desc", countQuery = "select count(*) from halo_post where post_status=0 and year(post_date)=:year and month(post_date)=:month", nativeQuery = true) + @Query(value = "SELECT * FROM halo_post WHERE post_status=0 and post_type='post' AND YEAR(post_date)=:year AND MONTH(post_date)=:month ORDER BY post_date DESC", countQuery = "SELECT COUNT(*) FROM halo_post WHERE post_status=0 AND YEAR(post_date)=:year AND MONTH(post_date)=:month", nativeQuery = true) Page findPostByYearAndMonth(@Param("year") String year, @Param("month") String month, Pageable pageable); /** @@ -188,16 +211,6 @@ public interface PostRepository extends JpaRepository { */ List findPostsByTags(Tag tag); - /** - * 模糊查询文章 - * - * @param keyword 关键词 - * @param pageable 分页信息 - * @return Page - */ - @Query(value = "select * from halo_post where post_status = 0 and post_type='post' and post_title like '%=:keyword%' or post_content like '%=:keyword%'", nativeQuery = true) - Page findPostByPostTitleLikeOrPostContentLikeAndPostTypeAndPostStatus(String keyword, Pageable pageable); - /** * 按热度从大到小排序 * @@ -211,7 +224,7 @@ public interface PostRepository extends JpaRepository { * * @return Long */ - @Query(value = "select sum(post_views) from halo_post", nativeQuery = true) + @Query(value = "SELECT SUM(post_views) FROM halo_post", nativeQuery = true) Long getPostViewsSum(); /** @@ -222,4 +235,13 @@ public interface PostRepository extends JpaRepository { * @return 文章数量 */ Integer countAllByPostStatusAndPostType(Integer status, String postType); + + /** + * 获取指定条数的文章 + * + * @param limit 条数 + * @return List + */ + @Query(value = "SELECT * FROM halo_post WHERE post_status = 0 AND post_type = 'post' ORDER BY post_date DESC LIMIT :limit", nativeQuery = true) + List getPostsByLimit(@Param(value = "limit") int limit); } diff --git a/src/main/java/cc/ryanc/halo/service/AttachmentService.java b/src/main/java/cc/ryanc/halo/service/AttachmentService.java index a59ed44fb..c5c724b99 100644 --- a/src/main/java/cc/ryanc/halo/service/AttachmentService.java +++ b/src/main/java/cc/ryanc/halo/service/AttachmentService.java @@ -3,8 +3,11 @@ package cc.ryanc.halo.service; import cc.ryanc.halo.model.domain.Attachment; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; import java.util.List; +import java.util.Map; import java.util.Optional; /** @@ -23,14 +26,14 @@ public interface AttachmentService { * @param attachment attachment * @return Attachment */ - Attachment saveByAttachment(Attachment attachment); + Attachment save(Attachment attachment); /** * 查询所有附件信息 * * @return List */ - List findAllAttachments(); + List findAll(); /** * 查询所有附件,分页 @@ -38,7 +41,7 @@ public interface AttachmentService { * @param pageable pageable * @return Page */ - Page findAllAttachments(Pageable pageable); + Page findAll(Pageable pageable); /** * 根据编号查询 @@ -54,5 +57,64 @@ public interface AttachmentService { * @param attachId attachId * @return Attachment */ - Attachment removeByAttachId(Long attachId); + Attachment remove(Long attachId); + + /** + * 上传转发 + * + * @param file file + * @param request request + * @return Map + */ + Map upload(MultipartFile file, HttpServletRequest request); + + /** + * 原生服务器上传 + * + * @param file file + * @param request request + * @return Map + */ + Map attachUpload(MultipartFile file, HttpServletRequest request); + + /** + * 七牛云上传 + * + * @param file file + * @param request request + * @return Map + */ + Map attachQiNiuUpload(MultipartFile file, HttpServletRequest request); + + /** + * 又拍云上传 + * + * @param file file + * @param request request + * @return Map + */ + Map attachUpYunUpload(MultipartFile file, HttpServletRequest request); + + /** + * 七牛云删除附件 + * + * @param key key + * @return boolean + */ + boolean deleteQiNiuAttachment(String key); + + /** + * 又拍云删除附件 + * + * @param fileName fileName + * @return boolean + */ + boolean deleteUpYunAttachment(String fileName); + + /** + * 获取附件总数 + * + * @return Long + */ + Long getCount(); } diff --git a/src/main/java/cc/ryanc/halo/service/CategoryService.java b/src/main/java/cc/ryanc/halo/service/CategoryService.java index 6055be016..0e481fa9f 100755 --- a/src/main/java/cc/ryanc/halo/service/CategoryService.java +++ b/src/main/java/cc/ryanc/halo/service/CategoryService.java @@ -21,7 +21,7 @@ public interface CategoryService { * @param category 分类目录 * @return 如果插入成功,返回分类目录对象 */ - Category saveByCategory(Category category); + Category save(Category category); /** * 根据编号删除分类目录 @@ -29,14 +29,14 @@ public interface CategoryService { * @param cateId 分类目录编号 * @return category */ - Category removeByCateId(Long cateId); + Category remove(Long cateId); /** * 获取所有分类目录 * * @return 返回List集合 */ - List findAllCategories(); + List findAll(); /** * 根据编号查询单个分类 @@ -54,6 +54,14 @@ public interface CategoryService { */ Category findByCateUrl(String cateUrl); + /** + * 根据分类名称查询 + * + * @param cateName 分类名称 + * @return Category + */ + Category findByCateName(String cateName); + /** * 将分类字符串集合转化为Category泛型集合 * diff --git a/src/main/java/cc/ryanc/halo/service/CommentService.java b/src/main/java/cc/ryanc/halo/service/CommentService.java index 4500ceece..0314ca294 100644 --- a/src/main/java/cc/ryanc/halo/service/CommentService.java +++ b/src/main/java/cc/ryanc/halo/service/CommentService.java @@ -23,7 +23,7 @@ public interface CommentService { * * @param comment comment */ - void saveByComment(Comment comment); + void save(Comment comment); /** * 删除评论 @@ -31,7 +31,7 @@ public interface CommentService { * @param commentId commentId * @return Optional */ - Optional removeByCommentId(Long commentId); + Optional remove(Long commentId); /** * 查询所有的评论,用于后台管理 @@ -40,7 +40,7 @@ public interface CommentService { * @param pageable pageable * @return Page */ - Page findAllComments(Integer status, Pageable pageable); + Page findAll(Integer status, Pageable pageable); /** * 根据评论状态查询评论 @@ -48,14 +48,14 @@ public interface CommentService { * @param status 评论状态 * @return List */ - List findAllComments(Integer status); + List findAll(Integer status); /** * 查询所有评论,不分页 * * @return List */ - List findAllComments(); + List findAll(); /** * 更改评论的状态 @@ -125,4 +125,19 @@ public interface CommentService { * @return 评论数量 */ Integer getCountByStatus(Integer status); + + /** + * 查询评论总数 + * + * @return Long + */ + Long getCount(); + + /** + * 获取最近的评论 + * + * @param limit limit + * @return List + */ + List getRecentComments(int limit); } diff --git a/src/main/java/cc/ryanc/halo/service/GalleryService.java b/src/main/java/cc/ryanc/halo/service/GalleryService.java index 87672b73e..30879d9df 100644 --- a/src/main/java/cc/ryanc/halo/service/GalleryService.java +++ b/src/main/java/cc/ryanc/halo/service/GalleryService.java @@ -23,7 +23,7 @@ public interface GalleryService { * @param gallery gallery * @return Gallery */ - Gallery saveByGallery(Gallery gallery); + Gallery save(Gallery gallery); /** * 根据编号删除图片 @@ -31,15 +31,7 @@ public interface GalleryService { * @param galleryId galleryId * @return Gallery */ - Gallery removeByGalleryId(Long galleryId); - - /** - * 修改图片信息 - * - * @param gallery gallery - * @return Gallery - */ - Gallery updateByGallery(Gallery gallery); + Gallery remove(Long galleryId); /** * 查询所有图片 分页 @@ -47,14 +39,14 @@ public interface GalleryService { * @param pageable pageable * @return Page */ - Page findAllGalleries(Pageable pageable); + Page findAll(Pageable pageable); /** * 查询所有图片 不分页 * * @return List */ - List findAllGalleries(); + List findAll(); /** * 根据编号查询图片信息 diff --git a/src/main/java/cc/ryanc/halo/service/LinkService.java b/src/main/java/cc/ryanc/halo/service/LinkService.java index 030b6922b..be35a639a 100755 --- a/src/main/java/cc/ryanc/halo/service/LinkService.java +++ b/src/main/java/cc/ryanc/halo/service/LinkService.java @@ -21,7 +21,7 @@ public interface LinkService { * @param link link * @return Link */ - Link saveByLink(Link link); + Link save(Link link); /** * 根据编号删除 @@ -29,14 +29,14 @@ public interface LinkService { * @param linkId linkId * @return Link */ - Link removeByLinkId(Long linkId); + Link remove(Long linkId); /** * 查询所有 * * @return List */ - List findAllLinks(); + List findAll(); /** * 根据编号查询单个链接 diff --git a/src/main/java/cc/ryanc/halo/service/LogsService.java b/src/main/java/cc/ryanc/halo/service/LogsService.java index 750d5bd1e..f8698b2b8 100644 --- a/src/main/java/cc/ryanc/halo/service/LogsService.java +++ b/src/main/java/cc/ryanc/halo/service/LogsService.java @@ -4,8 +4,8 @@ import cc.ryanc.halo.model.domain.Logs; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import javax.servlet.http.HttpServletRequest; import java.util.List; -import java.util.Optional; /** *
@@ -20,22 +20,16 @@ public interface LogsService {
     /**
      * 保存日志
      *
-     * @param logs logs
-     * @return Logs
+     * @param logTitle   logTitle
+     * @param logContent logContent
+     * @param request    request
      */
-    Logs saveByLogs(Logs logs);
-
-    /**
-     * 根据编号移除
-     *
-     * @param logsId logsId
-     */
-    void removeByLogsId(Long logsId);
+    void save(String logTitle, String logContent, HttpServletRequest request);
 
     /**
      * 移除所有日志
      */
-    void removeAllLogs();
+    void removeAll();
 
     /**
      * 查询所有日志并分页
@@ -43,7 +37,7 @@ public interface LogsService {
      * @param pageable pageable
      * @return Page
      */
-    Page findAllLogs(Pageable pageable);
+    Page findAll(Pageable pageable);
 
     /**
      * 查询最新的五条日志
@@ -51,12 +45,4 @@ public interface LogsService {
      * @return List
      */
     List findLogsLatest();
-
-    /**
-     * 根据编号查询
-     *
-     * @param logsId logsId
-     * @return Optional
-     */
-    Optional findLogsByLogsId(Long logsId);
 }
diff --git a/src/main/java/cc/ryanc/halo/service/MenuService.java b/src/main/java/cc/ryanc/halo/service/MenuService.java
index 2d67f5f77..759ec2a8b 100644
--- a/src/main/java/cc/ryanc/halo/service/MenuService.java
+++ b/src/main/java/cc/ryanc/halo/service/MenuService.java
@@ -21,14 +21,14 @@ public interface MenuService {
      * @param menu menu
      * @return Menu
      */
-    Menu saveByMenu(Menu menu);
+    Menu save(Menu menu);
 
     /**
      * 查询所有菜单
      *
      * @return List
      */
-    List findAllMenus();
+    List findAll();
 
     /**
      * 删除菜单
@@ -36,7 +36,7 @@ public interface MenuService {
      * @param menuId menuId
      * @return Menu
      */
-    Menu removeByMenuId(Long menuId);
+    Menu remove(Long menuId);
 
     /**
      * 根据编号查询菜单
diff --git a/src/main/java/cc/ryanc/halo/service/PostService.java b/src/main/java/cc/ryanc/halo/service/PostService.java
index 452285ba3..2a5bd1131 100755
--- a/src/main/java/cc/ryanc/halo/service/PostService.java
+++ b/src/main/java/cc/ryanc/halo/service/PostService.java
@@ -6,6 +6,7 @@ import cc.ryanc.halo.model.domain.Tag;
 import cc.ryanc.halo.model.dto.Archive;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.Date;
 import java.util.List;
@@ -27,7 +28,7 @@ public interface PostService {
      * @param post Post
      * @return Post
      */
-    Post saveByPost(Post post);
+    Post save(Post post);
 
     /**
      * 根据编号删除文章
@@ -35,7 +36,7 @@ public interface PostService {
      * @param postId postId
      * @return Post
      */
-    Post removeByPostId(Long postId);
+    Post remove(Long postId);
 
     /**
      * 修改文章状态
@@ -46,13 +47,6 @@ public interface PostService {
      */
     Post updatePostStatus(Long postId, Integer status);
 
-    /**
-     * 修改文章阅读量
-     *
-     * @param post post
-     */
-    void updatePostView(Post post);
-
     /**
      * 批量修改摘要
      *
@@ -60,31 +54,24 @@ public interface PostService {
      */
     void updateAllSummary(Integer postSummary);
 
-    /**
-     * 获取文章列表 分页
-     *
-     * @param postType post or page
-     * @param pageable 分页信息
-     * @return Page
-     */
-    Page findAllPosts(String postType, Pageable pageable);
-
     /**
      * 获取文章列表 不分页
      *
      * @param postType post or page
      * @return List
      */
-    List findAllPosts(String postType);
+    List findAll(String postType);
 
     /**
      * 模糊查询文章
      *
-     * @param keyWord  keyword
-     * @param pageable pageable
-     * @return List
+     * @param keyword    关键词
+     * @param postType   文章类型
+     * @param postStatus 文章状态
+     * @param pageable   分页信息
+     * @return Page
      */
-    List searchPosts(String keyWord, Pageable pageable);
+    Page searchPosts(String keyword, String postType, Integer postStatus, Pageable pageable);
 
     /**
      * 根据文章状态查询 分页,用于后台管理
@@ -147,20 +134,20 @@ public interface PostService {
     List findPostLatest();
 
     /**
-     * 查询Id之后的文章
+     * 获取下一篇文章 较新
      *
      * @param postDate postDate
-     * @return List
+     * @return Post
      */
-    List findByPostDateAfter(Date postDate);
+    Post getNextPost(Date postDate);
 
     /**
-     * 查询Id之前的文章
+     * 获取下一篇文章 较老
      *
      * @param postDate postDate
-     * @return List
+     * @return Post
      */
-    List findByPostDateBefore(Date postDate);
+    Post getPrePost(Date postDate);
 
     /**
      * 查询归档信息 根据年份和月份
@@ -176,6 +163,16 @@ public interface PostService {
      */
     List findPostGroupByYear();
 
+    /**
+     * @return List
+     * @Author Aquan
+     * @Description 查询归档信息 查看所有文章
+     * @Date 2019.1.4 11:14
+     * @Param
+     **/
+    List findAllPost();
+
+
     /**
      * 根据年份和月份查询文章
      *
@@ -221,15 +218,6 @@ public interface PostService {
      */
     Page findPostsByTags(Tag tag, Pageable pageable);
 
-    /**
-     * 搜索文章
-     *
-     * @param keyword  关键词
-     * @param pageable 分页信息
-     * @return Page
-     */
-    Page searchByKeywords(String keyword, Pageable pageable);
-
     /**
      * 热门文章
      *
@@ -275,4 +263,29 @@ public interface PostService {
      * @return String
      */
     String buildSiteMap(List posts);
+
+    /**
+     * 缓存阅读数
+     *
+     * @param postId postId
+     */
+    void cacheViews(Long postId);
+
+    /**
+     * 组装分类目录和标签
+     *
+     * @param post     post
+     * @param cateList cateList
+     * @param tagList  tagList
+     * @return Post Post
+     */
+    Post buildCategoriesAndTags(Post post, List cateList, @RequestParam("tagList") String tagList);
+
+    /**
+     * 获取最近的文章
+     *
+     * @param limit 条数
+     * @return List
+     */
+    List getRecentPosts(int limit);
 }
diff --git a/src/main/java/cc/ryanc/halo/service/TagService.java b/src/main/java/cc/ryanc/halo/service/TagService.java
index c6c5991fb..af334a3e7 100644
--- a/src/main/java/cc/ryanc/halo/service/TagService.java
+++ b/src/main/java/cc/ryanc/halo/service/TagService.java
@@ -21,7 +21,7 @@ public interface TagService {
      * @param tag tag
      * @return Tag
      */
-    Tag saveByTag(Tag tag);
+    Tag save(Tag tag);
 
     /**
      * 根据编号移除标签
@@ -29,14 +29,14 @@ public interface TagService {
      * @param tagId tagId
      * @return Tag
      */
-    Tag removeByTagId(Long tagId);
+    Tag remove(Long tagId);
 
     /**
      * 获取所有标签
      *
      * @return List
      */
-    List findAllTags();
+    List findAll();
 
     /**
      * 根据编号查询标签
diff --git a/src/main/java/cc/ryanc/halo/service/UserService.java b/src/main/java/cc/ryanc/halo/service/UserService.java
index 273454d9c..e65c6be86 100755
--- a/src/main/java/cc/ryanc/halo/service/UserService.java
+++ b/src/main/java/cc/ryanc/halo/service/UserService.java
@@ -19,7 +19,7 @@ public interface UserService {
      *
      * @param user user
      */
-    void saveByUser(User user);
+    void save(User user);
 
     /**
      * 根据用户名和密码查询,用于登录
diff --git a/src/main/java/cc/ryanc/halo/service/impl/AttachmentServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/AttachmentServiceImpl.java
index 2eee54a03..2431be8c8 100644
--- a/src/main/java/cc/ryanc/halo/service/impl/AttachmentServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/AttachmentServiceImpl.java
@@ -1,17 +1,46 @@
 package cc.ryanc.halo.service.impl;
 
 import cc.ryanc.halo.model.domain.Attachment;
+import cc.ryanc.halo.model.dto.HaloConst;
+import cc.ryanc.halo.model.dto.QiNiuPutSet;
+import cc.ryanc.halo.model.enums.AttachLocationEnum;
+import cc.ryanc.halo.model.enums.BlogPropertiesEnum;
 import cc.ryanc.halo.repository.AttachmentRepository;
 import cc.ryanc.halo.service.AttachmentService;
+import cc.ryanc.halo.utils.HaloUtils;
+import cc.ryanc.halo.utils.Md5Util;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.text.StrBuilder;
+import cn.hutool.core.util.StrUtil;
+import com.UpYun;
+import com.google.gson.Gson;
+import com.google.gson.JsonSyntaxException;
+import com.qiniu.common.QiniuException;
+import com.qiniu.common.Zone;
+import com.qiniu.http.Response;
+import com.qiniu.storage.BucketManager;
+import com.qiniu.storage.Configuration;
+import com.qiniu.storage.UploadManager;
+import com.qiniu.storage.persistent.FileRecorder;
+import com.qiniu.util.Auth;
+import com.qiniu.util.StringMap;
+import com.upyun.UpException;
+import net.coobird.thumbnailator.Thumbnails;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
-import java.util.List;
-import java.util.Optional;
+import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletRequest;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Paths;
+import java.util.*;
 
 /**
  * 
@@ -37,7 +66,7 @@ public class AttachmentServiceImpl implements AttachmentService {
      */
     @Override
     @CacheEvict(value = ATTACHMENTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
-    public Attachment saveByAttachment(Attachment attachment) {
+    public Attachment save(Attachment attachment) {
         return attachmentRepository.save(attachment);
     }
 
@@ -48,7 +77,7 @@ public class AttachmentServiceImpl implements AttachmentService {
      */
     @Override
     @Cacheable(value = ATTACHMENTS_CACHE_NAME, key = "'attachment'")
-    public List findAllAttachments() {
+    public List findAll() {
         return attachmentRepository.findAll();
     }
 
@@ -59,7 +88,7 @@ public class AttachmentServiceImpl implements AttachmentService {
      * @return Page
      */
     @Override
-    public Page findAllAttachments(Pageable pageable) {
+    public Page findAll(Pageable pageable) {
         return attachmentRepository.findAll(pageable);
     }
 
@@ -82,9 +111,307 @@ public class AttachmentServiceImpl implements AttachmentService {
      */
     @Override
     @CacheEvict(value = ATTACHMENTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
-    public Attachment removeByAttachId(Long attachId) {
+    public Attachment remove(Long attachId) {
         Optional attachment = this.findByAttachId(attachId);
-        attachmentRepository.delete(attachment.get());
-        return attachment.get();
+        attachmentRepository.delete(attachment.orElse(null));
+        return attachment.orElse(null);
+    }
+
+    /**
+     * 上传转发
+     *
+     * @param file    file
+     * @param request request
+     * @return Map
+     */
+    @Override
+    public Map upload(MultipartFile file, HttpServletRequest request) {
+        Map resultMap;
+        String attachLoc = HaloConst.OPTIONS.get(BlogPropertiesEnum.ATTACH_LOC.getProp());
+        if (StrUtil.isEmpty(attachLoc)) {
+            attachLoc = "server";
+        }
+        switch (attachLoc) {
+            case "server":
+                resultMap = this.attachUpload(file, request);
+                break;
+            case "qiniu":
+                resultMap = this.attachQiNiuUpload(file, request);
+                break;
+            case "upyun":
+                resultMap = this.attachUpYunUpload(file, request);
+                break;
+            default:
+                resultMap = this.attachUpload(file, request);
+                break;
+        }
+        return resultMap;
+    }
+
+    /**
+     * 原生服务器上传
+     *
+     * @param file    file
+     * @param request request
+     * @return Map
+     */
+    @Override
+    public Map attachUpload(MultipartFile file, HttpServletRequest request) {
+        final Map resultMap = new HashMap<>(6);
+        final String dateString = DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss");
+        try {
+            //用户目录
+            final StrBuilder uploadPath = new StrBuilder(System.getProperties().getProperty("user.home"));
+            uploadPath.append("/halo/");
+            uploadPath.append("upload/");
+
+            //获取当前年月以创建目录,如果没有该目录则创建
+            uploadPath.append(DateUtil.thisYear()).append("/").append(DateUtil.thisMonth()).append("/");
+            final File mediaPath = new File(uploadPath.toString());
+            if (!mediaPath.exists()) {
+                if (!mediaPath.mkdirs()) {
+                    resultMap.put("success", "0");
+                    return resultMap;
+                }
+            }
+
+            //不带后缀
+            final StrBuilder nameWithOutSuffix = new StrBuilder(file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf('.')).replaceAll(" ", "_").replaceAll(",", ""));
+            nameWithOutSuffix.append(dateString);
+            nameWithOutSuffix.append(new Random().nextInt(1000));
+
+            //文件后缀
+            final String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf('.') + 1);
+
+            //带后缀
+            final StrBuilder fileName = new StrBuilder(nameWithOutSuffix);
+            fileName.append(".");
+            fileName.append(fileSuffix);
+
+            file.transferTo(new File(mediaPath.getAbsoluteFile(), fileName.toString()));
+
+            //文件原路径
+            final StrBuilder fullPath = new StrBuilder(mediaPath.getAbsolutePath());
+            fullPath.append("/");
+            fullPath.append(fileName);
+
+            //压缩文件路径
+            final StrBuilder fullSmallPath = new StrBuilder(mediaPath.getAbsolutePath());
+            fullSmallPath.append("/");
+            fullSmallPath.append(nameWithOutSuffix);
+            fullSmallPath.append("_small.");
+            fullSmallPath.append(fileSuffix);
+
+            //压缩图片
+            Thumbnails.of(fullPath.toString()).size(256, 256).keepAspectRatio(false).toFile(fullSmallPath.toString());
+
+            //映射路径
+            final StrBuilder filePath = new StrBuilder("/upload/");
+            filePath.append(DateUtil.thisYear());
+            filePath.append("/");
+            filePath.append(DateUtil.thisMonth());
+            filePath.append("/");
+            filePath.append(fileName);
+
+            //缩略图映射路径
+            final StrBuilder fileSmallPath = new StrBuilder("/upload/");
+            fileSmallPath.append(DateUtil.thisYear());
+            fileSmallPath.append("/");
+            fileSmallPath.append(DateUtil.thisMonth());
+            fileSmallPath.append("/");
+            fileSmallPath.append(nameWithOutSuffix);
+            fileSmallPath.append("_small.");
+            fileSmallPath.append(fileSuffix);
+
+            final String size = HaloUtils.parseSize(new File(fullPath.toString()).length());
+            final String wh = HaloUtils.getImageWh(new File(fullPath.toString()));
+
+            resultMap.put("fileName", fileName.toString());
+            resultMap.put("filePath", filePath.toString());
+            resultMap.put("smallPath", fileSmallPath.toString());
+            resultMap.put("suffix", fileSuffix);
+            resultMap.put("size", size);
+            resultMap.put("wh", wh);
+            resultMap.put("location", AttachLocationEnum.SERVER.getDesc());
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return resultMap;
+    }
+
+    /**
+     * 七牛云上传
+     *
+     * @param file    file
+     * @param request request
+     * @return Map
+     */
+    @Override
+    public Map attachQiNiuUpload(MultipartFile file, HttpServletRequest request) {
+        final Map resultMap = new HashMap<>(6);
+        try {
+            final Configuration cfg = new Configuration(Zone.zone0());
+            final String key = Md5Util.getMD5Checksum(file);
+            final String accessKey = HaloConst.OPTIONS.get("qiniu_access_key");
+            final String secretKey = HaloConst.OPTIONS.get("qiniu_secret_key");
+            final String domain = HaloConst.OPTIONS.get("qiniu_domain");
+            final String bucket = HaloConst.OPTIONS.get("qiniu_bucket");
+            final String smallUrl = HaloConst.OPTIONS.get("qiniu_small_url");
+            if (StrUtil.isEmpty(accessKey) || StrUtil.isEmpty(secretKey) || StrUtil.isEmpty(domain) || StrUtil.isEmpty(bucket)) {
+                return resultMap;
+            }
+            final Auth auth = Auth.create(accessKey, secretKey);
+            final StringMap putPolicy = new StringMap();
+            putPolicy.put("returnBody", "{\"size\":$(fsize),\"w\":$(imageInfo.width),\"h\":$(imageInfo.height)}");
+            final String upToken = auth.uploadToken(bucket, null, 3600, putPolicy);
+            final String localTempDir = Paths.get(System.getenv("java.io.tmpdir"), bucket).toString();
+            QiNiuPutSet putSet = new QiNiuPutSet();
+            try {
+                final FileRecorder fileRecorder = new FileRecorder(localTempDir);
+                final UploadManager uploadManager = new UploadManager(cfg, fileRecorder);
+                final Response response = uploadManager.put(file.getInputStream(), key, upToken, null, null);
+                //解析上传成功的结果
+                putSet = new Gson().fromJson(response.bodyString(), QiNiuPutSet.class);
+            } catch (QiniuException e) {
+                final Response r = e.response;
+                System.err.println(r.toString());
+                try {
+                    System.err.println(r.bodyString());
+                } catch (QiniuException ex2) {
+                    //ignore
+                }
+            } catch (JsonSyntaxException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            final String filePath = domain.trim() + "/" + key;
+            resultMap.put("fileName", file.getOriginalFilename());
+            resultMap.put("filePath", filePath.trim());
+            resultMap.put("smallPath", smallUrl == null ? filePath.trim() : (filePath + smallUrl).trim());
+            resultMap.put("suffix", file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf('.')));
+            resultMap.put("size", HaloUtils.parseSize(file.getSize()));
+            resultMap.put("wh", putSet.getW() + "x" + putSet.getH());
+            resultMap.put("location", AttachLocationEnum.QINIU.getDesc());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return resultMap;
+    }
+
+    /**
+     * 又拍云上传
+     *
+     * @param file    file
+     * @param request request
+     * @return Map
+     */
+    @Override
+    public Map attachUpYunUpload(MultipartFile file, HttpServletRequest request) {
+        final Map resultMap = new HashMap<>(6);
+        try {
+            final String key = Md5Util.getMD5Checksum(file);
+            final String ossSrc = HaloConst.OPTIONS.get("upyun_oss_src");
+            final String ossPwd = HaloConst.OPTIONS.get("upyun_oss_pwd");
+            final String bucket = HaloConst.OPTIONS.get("upyun_oss_bucket");
+            final String domain = HaloConst.OPTIONS.get("upyun_oss_domain");
+            final String operator = HaloConst.OPTIONS.get("upyun_oss_operator");
+            final String smallUrl = HaloConst.OPTIONS.get("upyun_oss_small");
+            if (StrUtil.isEmpty(ossSrc) || StrUtil.isEmpty(ossPwd) || StrUtil.isEmpty(domain) || StrUtil.isEmpty(bucket) || StrUtil.isEmpty(operator)) {
+                return resultMap;
+            }
+            final String fileName = file.getOriginalFilename();
+            final String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf('.'));
+            final UpYun upYun = new UpYun(bucket, operator, ossPwd);
+            upYun.setTimeout(60);
+            upYun.setApiDomain(UpYun.ED_AUTO);
+            upYun.setDebug(true);
+            upYun.writeFile(ossSrc + key + fileSuffix, file.getBytes(), true, null);
+            final String filePath = domain.trim() + ossSrc + key + fileSuffix;
+            String smallPath = filePath;
+            if (smallUrl != null) {
+                smallPath += smallUrl;
+            }
+            final BufferedImage image = ImageIO.read(file.getInputStream());
+            if (image != null) {
+                resultMap.put("wh", image.getWidth() + "x" + image.getHeight());
+            }
+            resultMap.put("fileName", fileName);
+            resultMap.put("filePath", filePath.trim());
+            resultMap.put("smallPath", smallPath.trim());
+            resultMap.put("suffix", fileSuffix);
+            resultMap.put("size", HaloUtils.parseSize(file.getSize()));
+            resultMap.put("location", AttachLocationEnum.UPYUN.getDesc());
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return resultMap;
+    }
+
+    /**
+     * 七牛云删除附件
+     *
+     * @param key key
+     * @return boolean
+     */
+    @Override
+    public boolean deleteQiNiuAttachment(String key) {
+        boolean flag = true;
+        final Configuration cfg = new Configuration(Zone.zone0());
+        final String accessKey = HaloConst.OPTIONS.get("qiniu_access_key");
+        final String secretKey = HaloConst.OPTIONS.get("qiniu_secret_key");
+        final String bucket = HaloConst.OPTIONS.get("qiniu_bucket");
+        if (StrUtil.isEmpty(accessKey) || StrUtil.isEmpty(secretKey) || StrUtil.isEmpty(bucket)) {
+            return false;
+        }
+        final Auth auth = Auth.create(accessKey, secretKey);
+        final BucketManager bucketManager = new BucketManager(auth, cfg);
+        try {
+            bucketManager.delete(bucket, key);
+        } catch (QiniuException ex) {
+            System.err.println(ex.code());
+            System.err.println(ex.response.toString());
+            flag = false;
+        }
+        return flag;
+    }
+
+    /**
+     * 又拍云删除附件
+     *
+     * @param fileName fileName
+     * @return boolean
+     */
+    @Override
+    public boolean deleteUpYunAttachment(String fileName) {
+        boolean flag = true;
+        final String ossSrc = HaloConst.OPTIONS.get("upyun_oss_src");
+        final String ossPwd = HaloConst.OPTIONS.get("upyun_oss_pwd");
+        final String bucket = HaloConst.OPTIONS.get("upyun_oss_bucket");
+        final String operator = HaloConst.OPTIONS.get("upyun_oss_operator");
+        if (StrUtil.isEmpty(ossSrc) || StrUtil.isEmpty(ossPwd) || StrUtil.isEmpty(bucket) || StrUtil.isEmpty(operator)) {
+            return false;
+        }
+        final UpYun upYun = new UpYun(bucket, operator, ossPwd);
+        upYun.setApiDomain(UpYun.ED_AUTO);
+        try {
+            flag = upYun.deleteFile(ossSrc + fileName);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (UpException e) {
+            e.printStackTrace();
+        }
+        return flag;
+    }
+
+    /**
+     * 获取附件总数
+     *
+     * @return Long
+     */
+    @Override
+    public Long getCount() {
+        return attachmentRepository.count();
     }
 }
diff --git a/src/main/java/cc/ryanc/halo/service/impl/CategoryServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/CategoryServiceImpl.java
index 1fc046db5..bcc692e41 100755
--- a/src/main/java/cc/ryanc/halo/service/impl/CategoryServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/CategoryServiceImpl.java
@@ -4,6 +4,7 @@ import cc.ryanc.halo.model.domain.Category;
 import cc.ryanc.halo.repository.CategoryRepository;
 import cc.ryanc.halo.service.CategoryService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -21,6 +22,8 @@ import java.util.Optional;
 @Service
 public class CategoryServiceImpl implements CategoryService {
 
+    private static final String POSTS_CACHE_NAME = "posts";
+
     @Autowired
     private CategoryRepository categoryRepository;
 
@@ -31,7 +34,8 @@ public class CategoryServiceImpl implements CategoryService {
      * @return Category
      */
     @Override
-    public Category saveByCategory(Category category) {
+    @CacheEvict(value = POSTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
+    public Category save(Category category) {
         return categoryRepository.save(category);
     }
 
@@ -42,10 +46,11 @@ public class CategoryServiceImpl implements CategoryService {
      * @return Category
      */
     @Override
-    public Category removeByCateId(Long cateId) {
-        Optional category = this.findByCateId(cateId);
-        categoryRepository.delete(category.get());
-        return category.get();
+    @CacheEvict(value = POSTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
+    public Category remove(Long cateId) {
+        final Optional category = this.findByCateId(cateId);
+        categoryRepository.delete(category.orElse(null));
+        return category.orElse(null);
     }
 
     /**
@@ -54,7 +59,7 @@ public class CategoryServiceImpl implements CategoryService {
      * @return List
      */
     @Override
-    public List findAllCategories() {
+    public List findAll() {
         return categoryRepository.findAll();
     }
 
@@ -80,6 +85,17 @@ public class CategoryServiceImpl implements CategoryService {
         return categoryRepository.findCategoryByCateUrl(cateUrl);
     }
 
+    /**
+     * 根据分类名称查询
+     *
+     * @param cateName 分类名称
+     * @return Category
+     */
+    @Override
+    public Category findByCateName(String cateName) {
+        return categoryRepository.findCategoryByCateName(cateName);
+    }
+
     /**
      * 将分类字符串集合转化为Category泛型集合
      *
@@ -91,7 +107,7 @@ public class CategoryServiceImpl implements CategoryService {
         if (null == strings) {
             return null;
         }
-        List categories = new ArrayList<>();
+        final List categories = new ArrayList<>();
         Optional category = null;
         for (String str : strings) {
             category = findByCateId(Long.parseLong(str));
diff --git a/src/main/java/cc/ryanc/halo/service/impl/CommentServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/CommentServiceImpl.java
index 27465fb0a..8f4a7f145 100644
--- a/src/main/java/cc/ryanc/halo/service/impl/CommentServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/CommentServiceImpl.java
@@ -40,7 +40,7 @@ public class CommentServiceImpl implements CommentService {
      */
     @Override
     @CacheEvict(value = {COMMENTS_CACHE_NAME, POSTS_CACHE_NAME}, allEntries = true, beforeInvocation = true)
-    public void saveByComment(Comment comment) {
+    public void save(Comment comment) {
         commentRepository.save(comment);
     }
 
@@ -52,9 +52,9 @@ public class CommentServiceImpl implements CommentService {
      */
     @Override
     @CacheEvict(value = {COMMENTS_CACHE_NAME, POSTS_CACHE_NAME}, allEntries = true, beforeInvocation = true)
-    public Optional removeByCommentId(Long commentId) {
-        Optional comment = this.findCommentById(commentId);
-        commentRepository.delete(comment.get());
+    public Optional remove(Long commentId) {
+        final Optional comment = this.findCommentById(commentId);
+        commentRepository.delete(comment.orElse(null));
         return comment;
     }
 
@@ -65,7 +65,7 @@ public class CommentServiceImpl implements CommentService {
      * @return Page
      */
     @Override
-    public Page findAllComments(Integer status, Pageable pageable) {
+    public Page findAll(Integer status, Pageable pageable) {
         return commentRepository.findCommentsByCommentStatus(status, pageable);
     }
 
@@ -77,7 +77,7 @@ public class CommentServiceImpl implements CommentService {
      */
     @Override
     @CachePut(value = COMMENTS_CACHE_NAME, key = "'comments_status_'+#status")
-    public List findAllComments(Integer status) {
+    public List findAll(Integer status) {
         return commentRepository.findCommentsByCommentStatus(status);
     }
 
@@ -88,7 +88,7 @@ public class CommentServiceImpl implements CommentService {
      */
     @Override
     @Cacheable(value = COMMENTS_CACHE_NAME, key = "'comment'")
-    public List findAllComments() {
+    public List findAll() {
         return commentRepository.findAll();
     }
 
@@ -102,7 +102,7 @@ public class CommentServiceImpl implements CommentService {
     @Override
     @CacheEvict(value = COMMENTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Comment updateCommentStatus(Long commentId, Integer status) {
-        Optional comment = findCommentById(commentId);
+        final Optional comment = findCommentById(commentId);
         comment.get().setCommentStatus(status);
         return commentRepository.save(comment.get());
     }
@@ -188,4 +188,25 @@ public class CommentServiceImpl implements CommentService {
     public Integer getCountByStatus(Integer status) {
         return commentRepository.countAllByCommentStatus(status);
     }
+
+    /**
+     * 查询评论总数
+     *
+     * @return Long
+     */
+    @Override
+    public Long getCount() {
+        return commentRepository.count();
+    }
+
+    /**
+     * 获取最近的评论
+     *
+     * @param limit limit
+     * @return List
+     */
+    @Override
+    public List getRecentComments(int limit) {
+        return commentRepository.getCommentsByLimit(limit);
+    }
 }
diff --git a/src/main/java/cc/ryanc/halo/service/impl/GalleryServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/GalleryServiceImpl.java
index afe3ec669..e58625fd4 100644
--- a/src/main/java/cc/ryanc/halo/service/impl/GalleryServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/GalleryServiceImpl.java
@@ -37,7 +37,7 @@ public class GalleryServiceImpl implements GalleryService {
      */
     @Override
     @CacheEvict(value = GALLERIES_CACHE_NAME, allEntries = true, beforeInvocation = true)
-    public Gallery saveByGallery(Gallery gallery) {
+    public Gallery save(Gallery gallery) {
         return galleryRepository.save(gallery);
     }
 
@@ -49,24 +49,12 @@ public class GalleryServiceImpl implements GalleryService {
      */
     @Override
     @CacheEvict(value = GALLERIES_CACHE_NAME, allEntries = true, beforeInvocation = true)
-    public Gallery removeByGalleryId(Long galleryId) {
-        Optional gallery = this.findByGalleryId(galleryId);
+    public Gallery remove(Long galleryId) {
+        final Optional gallery = this.findByGalleryId(galleryId);
         galleryRepository.delete(gallery.get());
         return gallery.get();
     }
 
-    /**
-     * 修改图片信息
-     *
-     * @param gallery gallery
-     * @return Gallery
-     */
-    @Override
-    @CacheEvict(value = GALLERIES_CACHE_NAME, allEntries = true, beforeInvocation = true)
-    public Gallery updateByGallery(Gallery gallery) {
-        return galleryRepository.save(gallery);
-    }
-
     /**
      * 查询所有图片 分页
      *
@@ -74,7 +62,7 @@ public class GalleryServiceImpl implements GalleryService {
      * @return Page
      */
     @Override
-    public Page findAllGalleries(Pageable pageable) {
+    public Page findAll(Pageable pageable) {
         return galleryRepository.findAll(pageable);
     }
 
@@ -85,7 +73,7 @@ public class GalleryServiceImpl implements GalleryService {
      */
     @Override
     @Cacheable(value = GALLERIES_CACHE_NAME, key = "'gallery'")
-    public List findAllGalleries() {
+    public List findAll() {
         return galleryRepository.findAll();
     }
 
diff --git a/src/main/java/cc/ryanc/halo/service/impl/LinkServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/LinkServiceImpl.java
index c33b5bcd1..8ac598757 100755
--- a/src/main/java/cc/ryanc/halo/service/impl/LinkServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/LinkServiceImpl.java
@@ -37,7 +37,7 @@ public class LinkServiceImpl implements LinkService {
      */
     @Override
     @CacheEvict(value = LINKS_CACHE_NAME, allEntries = true, beforeInvocation = true)
-    public Link saveByLink(Link link) {
+    public Link save(Link link) {
         return linkRepository.save(link);
     }
 
@@ -49,8 +49,8 @@ public class LinkServiceImpl implements LinkService {
      */
     @Override
     @CacheEvict(value = LINKS_CACHE_NAME, allEntries = true, beforeInvocation = true)
-    public Link removeByLinkId(Long linkId) {
-        Optional link = this.findByLinkId(linkId);
+    public Link remove(Long linkId) {
+        final Optional link = this.findByLinkId(linkId);
         linkRepository.delete(link.get());
         return link.get();
     }
@@ -62,7 +62,7 @@ public class LinkServiceImpl implements LinkService {
      */
     @Override
     @Cacheable(value = LINKS_CACHE_NAME, key = LINKS_CACHE_KEY)
-    public List findAllLinks() {
+    public List findAll() {
         return linkRepository.findAll();
     }
 
diff --git a/src/main/java/cc/ryanc/halo/service/impl/LogsServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/LogsServiceImpl.java
index 7148bbfca..cf0cd042d 100644
--- a/src/main/java/cc/ryanc/halo/service/impl/LogsServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/LogsServiceImpl.java
@@ -3,13 +3,15 @@ package cc.ryanc.halo.service.impl;
 import cc.ryanc.halo.model.domain.Logs;
 import cc.ryanc.halo.repository.LogsRepository;
 import cc.ryanc.halo.service.LogsService;
+import cn.hutool.extra.servlet.ServletUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
 import java.util.List;
-import java.util.Optional;
 
 /**
  * 
@@ -28,30 +30,24 @@ public class LogsServiceImpl implements LogsService {
     /**
      * 保存日志
      *
-     * @param logs logs
-     * @return Logs
+     * @param logTitle   logTitle
+     * @param logContent logContent
+     * @param request    request
      */
     @Override
-    public Logs saveByLogs(Logs logs) {
-        return logsRepository.save(logs);
-    }
-
-    /**
-     * 根据编号移除
-     *
-     * @param logsId logsId
-     */
-    @Override
-    public void removeByLogsId(Long logsId) {
-        Optional logs = this.findLogsByLogsId(logsId);
-        logsRepository.delete(logs.get());
+    public void save(String logTitle, String logContent, HttpServletRequest request) {
+        final Logs logs = new Logs();
+        logs.setLogTitle(logTitle);
+        logs.setLogContent(logContent);
+        logs.setLogIp(ServletUtil.getClientIP(request));
+        logsRepository.save(logs);
     }
 
     /**
      * 移除所有日志
      */
     @Override
-    public void removeAllLogs() {
+    public void removeAll() {
         logsRepository.deleteAll();
     }
 
@@ -62,7 +58,7 @@ public class LogsServiceImpl implements LogsService {
      * @return Page
      */
     @Override
-    public Page findAllLogs(Pageable pageable) {
+    public Page findAll(Pageable pageable) {
         return logsRepository.findAll(pageable);
     }
 
@@ -75,15 +71,4 @@ public class LogsServiceImpl implements LogsService {
     public List findLogsLatest() {
         return logsRepository.findTopFive();
     }
-
-    /**
-     * 根据编号查询
-     *
-     * @param logsId logsId
-     * @return Optional
-     */
-    @Override
-    public Optional findLogsByLogsId(Long logsId) {
-        return logsRepository.findById(logsId);
-    }
 }
diff --git a/src/main/java/cc/ryanc/halo/service/impl/MailServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/MailServiceImpl.java
index caed6d170..56e69011f 100644
--- a/src/main/java/cc/ryanc/halo/service/impl/MailServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/MailServiceImpl.java
@@ -4,6 +4,7 @@ import cc.ryanc.halo.model.dto.HaloConst;
 import cc.ryanc.halo.model.enums.BlogPropertiesEnum;
 import cc.ryanc.halo.service.MailService;
 import cc.ryanc.halo.utils.HaloUtils;
+import cn.hutool.core.text.StrBuilder;
 import freemarker.template.Template;
 import io.github.biezhi.ome.OhMyEmail;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -68,14 +69,14 @@ public class MailServiceImpl implements MailService {
                 HaloConst.OPTIONS.get(BlogPropertiesEnum.MAIL_SMTP_HOST.getProp()),
                 HaloConst.OPTIONS.get(BlogPropertiesEnum.MAIL_SMTP_USERNAME.getProp()),
                 HaloConst.OPTIONS.get(BlogPropertiesEnum.MAIL_SMTP_PASSWORD.getProp()));
-        String text = "";
+        StrBuilder text = new StrBuilder();
         try {
-            Template template = freeMarker.getConfiguration().getTemplate(templateName);
-            text = FreeMarkerTemplateUtils.processTemplateIntoString(template, content);
+            final Template template = freeMarker.getConfiguration().getTemplate(templateName);
+            text.append(FreeMarkerTemplateUtils.processTemplateIntoString(template, content));
             OhMyEmail.subject(subject)
                     .from(HaloConst.OPTIONS.get(BlogPropertiesEnum.MAIL_FROM_NAME.getProp()))
                     .to(to)
-                    .html(text)
+                    .html(text.toString())
                     .send();
         } catch (Exception e) {
             e.printStackTrace();
@@ -99,14 +100,14 @@ public class MailServiceImpl implements MailService {
                 HaloConst.OPTIONS.get(BlogPropertiesEnum.MAIL_SMTP_USERNAME.getProp()),
                 HaloConst.OPTIONS.get(BlogPropertiesEnum.MAIL_SMTP_PASSWORD.getProp()));
         File file = new File(attachSrc);
-        String text = "";
+        StrBuilder text = new StrBuilder();
         try {
-            Template template = freeMarker.getConfiguration().getTemplate(templateName);
-            text = FreeMarkerTemplateUtils.processTemplateIntoString(template, content);
+            final Template template = freeMarker.getConfiguration().getTemplate(templateName);
+            text.append(FreeMarkerTemplateUtils.processTemplateIntoString(template, content));
             OhMyEmail.subject(subject)
                     .from(HaloConst.OPTIONS.get(BlogPropertiesEnum.MAIL_FROM_NAME.getProp()))
                     .to(to)
-                    .html(text)
+                    .html(text.toString())
                     .attach(file, file.getName())
                     .send();
         } catch (Exception e) {
diff --git a/src/main/java/cc/ryanc/halo/service/impl/MenuServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/MenuServiceImpl.java
index d81ead43c..1463b3fe7 100644
--- a/src/main/java/cc/ryanc/halo/service/impl/MenuServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/MenuServiceImpl.java
@@ -36,7 +36,7 @@ public class MenuServiceImpl implements MenuService {
      */
     @Override
     @Cacheable(value = MENUS_CACHE_NAME, key = MENUS_CACHE_KEY)
-    public List findAllMenus() {
+    public List findAll() {
         return menuRepository.findAll();
     }
 
@@ -48,7 +48,7 @@ public class MenuServiceImpl implements MenuService {
      */
     @Override
     @CacheEvict(value = MENUS_CACHE_NAME, allEntries = true, beforeInvocation = true)
-    public Menu saveByMenu(Menu menu) {
+    public Menu save(Menu menu) {
         return menuRepository.save(menu);
     }
 
@@ -60,10 +60,10 @@ public class MenuServiceImpl implements MenuService {
      */
     @Override
     @CacheEvict(value = MENUS_CACHE_NAME, allEntries = true, beforeInvocation = true)
-    public Menu removeByMenuId(Long menuId) {
-        Optional menu = this.findByMenuId(menuId);
-        menuRepository.delete(menu.get());
-        return menu.get();
+    public Menu remove(Long menuId) {
+        final Optional menu = this.findByMenuId(menuId);
+        menuRepository.delete(menu.orElse(null));
+        return menu.orElse(null);
     }
 
     /**
diff --git a/src/main/java/cc/ryanc/halo/service/impl/OptionsServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/OptionsServiceImpl.java
index 358287e31..b806cb4aa 100755
--- a/src/main/java/cc/ryanc/halo/service/impl/OptionsServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/OptionsServiceImpl.java
@@ -5,6 +5,7 @@ import cc.ryanc.halo.repository.OptionsRepository;
 import cc.ryanc.halo.service.OptionsService;
 import cn.hutool.core.util.StrUtil;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
@@ -25,12 +26,15 @@ public class OptionsServiceImpl implements OptionsService {
     @Autowired
     private OptionsRepository optionsRepository;
 
+    private static final String POSTS_CACHE_NAME = "posts";
+
     /**
      * 批量保存设置
      *
      * @param options options
      */
     @Override
+    @CacheEvict(value = POSTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public void saveOptions(Map options) {
         if (null != options && !options.isEmpty()) {
             options.forEach((k, v) -> saveOption(k, v));
@@ -84,8 +88,8 @@ public class OptionsServiceImpl implements OptionsService {
      */
     @Override
     public Map findAllOptions() {
-        Map options = new HashMap<>();
-        List optionsList = optionsRepository.findAll();
+        final Map options = new HashMap<>();
+        final List optionsList = optionsRepository.findAll();
         if (null != optionsList) {
             optionsList.forEach(option -> options.put(option.getOptionName(), option.getOptionValue()));
         }
@@ -100,7 +104,7 @@ public class OptionsServiceImpl implements OptionsService {
      */
     @Override
     public String findOneOption(String key) {
-        Options options = optionsRepository.findOptionsByOptionName(key);
+        final Options options = optionsRepository.findOptionsByOptionName(key);
         if (null != options) {
             return options.getOptionValue();
         }
diff --git a/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java
index 9b621e104..8671464ff 100755
--- a/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java
@@ -4,11 +4,16 @@ import cc.ryanc.halo.model.domain.Category;
 import cc.ryanc.halo.model.domain.Post;
 import cc.ryanc.halo.model.domain.Tag;
 import cc.ryanc.halo.model.dto.Archive;
+import cc.ryanc.halo.model.dto.HaloConst;
+import cc.ryanc.halo.model.enums.BlogPropertiesEnum;
 import cc.ryanc.halo.model.enums.PostStatusEnum;
 import cc.ryanc.halo.model.enums.PostTypeEnum;
 import cc.ryanc.halo.repository.PostRepository;
+import cc.ryanc.halo.service.CategoryService;
 import cc.ryanc.halo.service.PostService;
+import cc.ryanc.halo.service.TagService;
 import cc.ryanc.halo.utils.HaloUtils;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.HtmlUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,6 +47,12 @@ public class PostServiceImpl implements PostService {
     @Autowired
     private PostRepository postRepository;
 
+    @Autowired
+    private CategoryService categoryService;
+
+    @Autowired
+    private TagService tagService;
+
     /**
      * 保存文章
      *
@@ -50,7 +61,18 @@ public class PostServiceImpl implements PostService {
      */
     @Override
     @CacheEvict(value = {POSTS_CACHE_NAME, COMMENTS_CACHE_NAME}, allEntries = true, beforeInvocation = true)
-    public Post saveByPost(Post post) {
+    public Post save(Post post) {
+        int postSummary = 50;
+        if (StrUtil.isNotEmpty(HaloConst.OPTIONS.get(BlogPropertiesEnum.POST_SUMMARY.getProp()))) {
+            postSummary = Integer.parseInt(HaloConst.OPTIONS.get(BlogPropertiesEnum.POST_SUMMARY.getProp()));
+        }
+        final String summaryText = StrUtil.cleanBlank(HtmlUtil.cleanHtmlTag(post.getPostContent()));
+        if (summaryText.length() > postSummary) {
+            final String summary = summaryText.substring(0, postSummary);
+            post.setPostSummary(summary);
+        } else {
+            post.setPostSummary(summaryText);
+        }
         return postRepository.save(post);
     }
 
@@ -62,8 +84,8 @@ public class PostServiceImpl implements PostService {
      */
     @Override
     @CacheEvict(value = {POSTS_CACHE_NAME, COMMENTS_CACHE_NAME}, allEntries = true, beforeInvocation = true)
-    public Post removeByPostId(Long postId) {
-        Optional post = this.findByPostId(postId);
+    public Post remove(Long postId) {
+        final Optional post = this.findByPostId(postId);
         postRepository.delete(post.get());
         return post.get();
     }
@@ -78,22 +100,11 @@ public class PostServiceImpl implements PostService {
     @Override
     @CacheEvict(value = POSTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Post updatePostStatus(Long postId, Integer status) {
-        Optional post = this.findByPostId(postId);
+        final Optional post = this.findByPostId(postId);
         post.get().setPostStatus(status);
         return postRepository.save(post.get());
     }
 
-    /**
-     * 修改文章阅读量
-     *
-     * @param post post
-     */
-    @Override
-    public void updatePostView(Post post) {
-        post.setPostViews(post.getPostViews() + 1);
-        postRepository.save(post);
-    }
-
     /**
      * 批量更新文章摘要
      *
@@ -102,9 +113,9 @@ public class PostServiceImpl implements PostService {
     @Override
     @CacheEvict(value = POSTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public void updateAllSummary(Integer postSummary) {
-        List posts = this.findAllPosts(PostTypeEnum.POST_TYPE_POST.getDesc());
+        final List posts = this.findAll(PostTypeEnum.POST_TYPE_POST.getDesc());
         for (Post post : posts) {
-            String text = StrUtil.trim(HtmlUtil.cleanHtmlTag(post.getPostContent()));
+            String text = StrUtil.cleanBlank(HtmlUtil.cleanHtmlTag(post.getPostContent()));
             if (text.length() > postSummary) {
                 post.setPostSummary(text.substring(0, postSummary));
             } else {
@@ -114,18 +125,6 @@ public class PostServiceImpl implements PostService {
         }
     }
 
-    /**
-     * 获取文章列表 分页
-     *
-     * @param postType post or page
-     * @param pageable 分页信息
-     * @return Page
-     */
-    @Override
-    public Page findAllPosts(String postType, Pageable pageable) {
-        return postRepository.findPostsByPostType(postType, pageable);
-    }
-
     /**
      * 获取文章列表 不分页
      *
@@ -134,20 +133,36 @@ public class PostServiceImpl implements PostService {
      */
     @Override
     @Cacheable(value = POSTS_CACHE_NAME, key = "'posts_type_'+#postType")
-    public List findAllPosts(String postType) {
+    public List findAll(String postType) {
         return postRepository.findPostsByPostType(postType);
     }
 
     /**
      * 模糊查询文章
      *
-     * @param keyWord  keyword
-     * @param pageable pageable
-     * @return List
+     * @param keyword    关键词
+     * @param postType   文章类型
+     * @param postStatus 文章状态
+     * @param pageable   分页信息
+     * @return Page
      */
     @Override
-    public List searchPosts(String keyWord, Pageable pageable) {
-        return postRepository.findByPostTitleLike(keyWord, pageable);
+    public Page searchPosts(String keyword, String postType, Integer postStatus, Pageable pageable) {
+        Page posts = postRepository.findByPostTypeAndPostStatusAndPostTitleLikeOrPostTypeAndPostStatusAndPostContentLike(
+                postType,
+                postStatus,
+                "%" + keyword + "%",
+                postType,
+                postStatus,
+                "%" + keyword + "%",
+                pageable
+        );
+        for (Post post : posts.getContent()) {
+            if (StrUtil.isNotEmpty(post.getPostPassword())) {
+                post.setPostSummary("该文章为加密文章");
+            }
+        }
+        return posts;
     }
 
     /**
@@ -160,7 +175,13 @@ public class PostServiceImpl implements PostService {
      */
     @Override
     public Page findPostByStatus(Integer status, String postType, Pageable pageable) {
-        return postRepository.findPostsByPostStatusAndPostType(status, postType, pageable);
+        Page posts = postRepository.findPostsByPostStatusAndPostType(status, postType, pageable);
+        for (Post post : posts.getContent()) {
+            if (StrUtil.isNotEmpty(post.getPostPassword())) {
+                post.setPostSummary("该文章为加密文章");
+            }
+        }
+        return posts;
     }
 
     /**
@@ -172,7 +193,13 @@ public class PostServiceImpl implements PostService {
     @Override
     @Cacheable(value = POSTS_CACHE_NAME, key = "'posts_page_'+#pageable.pageNumber")
     public Page findPostByStatus(Pageable pageable) {
-        return postRepository.findPostsByPostStatusAndPostType(PostStatusEnum.PUBLISHED.getCode(), PostTypeEnum.POST_TYPE_POST.getDesc(), pageable);
+        Page posts = postRepository.findPostsByPostStatusAndPostType(PostStatusEnum.PUBLISHED.getCode(), PostTypeEnum.POST_TYPE_POST.getDesc(), pageable);
+        for (Post post : posts.getContent()) {
+            if (StrUtil.isNotEmpty(post.getPostPassword())) {
+                post.setPostSummary("该文章为加密文章");
+            }
+        }
+        return posts;
     }
 
     /**
@@ -235,28 +262,27 @@ public class PostServiceImpl implements PostService {
     }
 
     /**
-     * 查询之后的文章
+     * 获取下一篇文章 较新
      *
-     * @param postDate 发布时间
-     * @return List
+     * @param postDate postDate
+     * @return Post
      */
     @Override
-    public List findByPostDateAfter(Date postDate) {
-        return postRepository.findByPostDateAfterAndPostStatusAndPostTypeOrderByPostDateDesc(postDate, PostStatusEnum.PUBLISHED.getCode(), PostTypeEnum.POST_TYPE_POST.getDesc());
+    public Post getNextPost(Date postDate) {
+        return postRepository.queryNextPost(postDate);
     }
 
     /**
-     * 查询Id之前的文章
+     * 获取下一篇文章 较老
      *
-     * @param postDate 发布时间
-     * @return List
+     * @param postDate postDate
+     * @return Post
      */
     @Override
-    public List findByPostDateBefore(Date postDate) {
-        return postRepository.findByPostDateBeforeAndPostStatusAndPostTypeOrderByPostDateAsc(postDate, PostStatusEnum.PUBLISHED.getCode(), PostTypeEnum.POST_TYPE_POST.getDesc());
+    public Post getPrePost(Date postDate) {
+        return postRepository.queryPrePost(postDate);
     }
 
-
     /**
      * 查询归档信息 根据年份和月份
      *
@@ -265,8 +291,8 @@ public class PostServiceImpl implements PostService {
     @Override
     @Cacheable(value = POSTS_CACHE_NAME, key = "'archives_year_month'")
     public List findPostGroupByYearAndMonth() {
-        List objects = postRepository.findPostGroupByYearAndMonth();
-        List archives = new ArrayList<>();
+        final List objects = postRepository.findPostGroupByYearAndMonth();
+        final List archives = new ArrayList<>();
         Archive archive = null;
         for (Object[] obj : objects) {
             archive = new Archive();
@@ -287,8 +313,8 @@ public class PostServiceImpl implements PostService {
     @Override
     @Cacheable(value = POSTS_CACHE_NAME, key = "'archives_year'")
     public List findPostGroupByYear() {
-        List objects = postRepository.findPostGroupByYear();
-        List archives = new ArrayList<>();
+        final List objects = postRepository.findPostGroupByYear();
+        final List archives = new ArrayList<>();
         Archive archive = null;
         for (Object[] obj : objects) {
             archive = new Archive();
@@ -300,6 +326,29 @@ public class PostServiceImpl implements PostService {
         return archives;
     }
 
+    /**
+     * @return List
+     * @Author Aquan
+     * @Description 查询归档信息 返回所有文章
+     * @Date 2019.1.4 11:16
+     * @Param
+     **/
+    @Override
+    @Cacheable(value = POSTS_CACHE_NAME, key = "'archives_all'")
+    public List findAllPost() {
+        final List posts = postRepository.findAllPost();
+        final Integer count = postRepository.totalAllPostCount();
+        final List archives = new ArrayList<>();
+        Archive archive = null;
+        archive = new Archive();
+        archive.setCount(String.valueOf(count));
+        archive.setPosts(posts);
+        archives.add(archive);
+
+        return archives;
+    }
+
+
     /**
      * 根据年份和月份查询文章
      *
@@ -335,7 +384,13 @@ public class PostServiceImpl implements PostService {
      */
     @Override
     public Page findPostByYearAndMonth(String year, String month, Pageable pageable) {
-        return postRepository.findPostByYearAndMonth(year, month, null);
+        Page posts = postRepository.findPostByYearAndMonth(year, month, null);
+        for (Post post : posts.getContent()) {
+            if (StrUtil.isNotEmpty(post.getPostPassword())) {
+                post.setPostSummary("该文章为加密文章");
+            }
+        }
+        return posts;
     }
 
     /**
@@ -349,7 +404,13 @@ public class PostServiceImpl implements PostService {
     @Override
     @CachePut(value = POSTS_CACHE_NAME, key = "'posts_category_'+#category.cateId+'_'+#pageable.pageNumber")
     public Page findPostByCategories(Category category, Pageable pageable) {
-        return postRepository.findPostByCategoriesAndPostStatus(category, PostStatusEnum.PUBLISHED.getCode(), pageable);
+        Page posts = postRepository.findPostByCategoriesAndPostStatus(category, PostStatusEnum.PUBLISHED.getCode(), pageable);
+        for (Post post : posts.getContent()) {
+            if (StrUtil.isNotEmpty(post.getPostPassword())) {
+                post.setPostSummary("该文章为加密文章");
+            }
+        }
+        return posts;
     }
 
     /**
@@ -363,19 +424,13 @@ public class PostServiceImpl implements PostService {
     @Override
     @CachePut(value = POSTS_CACHE_NAME, key = "'posts_tag_'+#tag.tagId+'_'+#pageable.pageNumber")
     public Page findPostsByTags(Tag tag, Pageable pageable) {
-        return postRepository.findPostsByTagsAndPostStatus(tag, PostStatusEnum.PUBLISHED.getCode(), pageable);
-    }
-
-    /**
-     * 搜索文章
-     *
-     * @param keyword  关键词
-     * @param pageable 分页信息
-     * @return Page
-     */
-    @Override
-    public Page searchByKeywords(String keyword, Pageable pageable) {
-        return postRepository.findPostByPostTitleLikeOrPostContentLikeAndPostTypeAndPostStatus(keyword, pageable);
+        Page posts = postRepository.findPostsByTagsAndPostStatus(tag, PostStatusEnum.PUBLISHED.getCode(), pageable);
+        for (Post post : posts.getContent()) {
+            if (StrUtil.isNotEmpty(post.getPostPassword())) {
+                post.setPostSummary("该文章为加密文章");
+            }
+        }
+        return posts;
     }
 
     /**
@@ -399,15 +454,15 @@ public class PostServiceImpl implements PostService {
     @CachePut(value = POSTS_CACHE_NAME, key = "'posts_related_'+#post.getPostId()")
     public List relatedPosts(Post post) {
         //获取当前文章的所有标签
-        List tags = post.getTags();
-        List tempPosts = new ArrayList<>();
+        final List tags = post.getTags();
+        final List tempPosts = new ArrayList<>();
         for (Tag tag : tags) {
             tempPosts.addAll(postRepository.findPostsByTags(tag));
         }
         //去掉当前的文章
         tempPosts.remove(post);
         //去掉重复的文章
-        List allPosts = new ArrayList<>();
+        final List allPosts = new ArrayList<>();
         for (int i = 0; i < tempPosts.size(); i++) {
             if (!allPosts.contains(tempPosts.get(i))) {
                 allPosts.add(tempPosts.get(i));
@@ -464,4 +519,48 @@ public class PostServiceImpl implements PostService {
     public String buildSiteMap(List posts) {
         return HaloUtils.getSiteMap(posts);
     }
+
+    /**
+     * 缓存阅读数
+     *
+     * @param postId postId
+     */
+    @Override
+    public void cacheViews(Long postId) {
+        if (null != HaloConst.POSTS_VIEWS.get(postId)) {
+            HaloConst.POSTS_VIEWS.put(postId, HaloConst.POSTS_VIEWS.get(postId) + 1);
+        } else {
+            HaloConst.POSTS_VIEWS.put(postId, 1L);
+        }
+    }
+
+    /**
+     * 组装分类目录和标签
+     *
+     * @param post     post
+     * @param cateList cateList
+     * @param tagList  tagList
+     * @return Post Post
+     */
+    @Override
+    public Post buildCategoriesAndTags(Post post, List cateList, String tagList) {
+        final List categories = categoryService.strListToCateList(cateList);
+        post.setCategories(categories);
+        if (StrUtil.isNotEmpty(tagList)) {
+            final List tags = tagService.strListToTagList(StrUtil.trim(tagList));
+            post.setTags(tags);
+        }
+        return post;
+    }
+
+    /**
+     * 获取最近的文章
+     *
+     * @param limit 条数
+     * @return List
+     */
+    @Override
+    public List getRecentPosts(int limit) {
+        return postRepository.getPostsByLimit(limit);
+    }
 }
diff --git a/src/main/java/cc/ryanc/halo/service/impl/TagServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/TagServiceImpl.java
index 14b43a6f8..711beb20c 100644
--- a/src/main/java/cc/ryanc/halo/service/impl/TagServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/TagServiceImpl.java
@@ -4,6 +4,7 @@ import cc.ryanc.halo.model.domain.Tag;
 import cc.ryanc.halo.repository.TagRepository;
 import cc.ryanc.halo.service.TagService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -21,6 +22,8 @@ import java.util.Optional;
 @Service
 public class TagServiceImpl implements TagService {
 
+    private static final String POSTS_CACHE_NAME = "posts";
+
     @Autowired
     private TagRepository tagRepository;
 
@@ -31,7 +34,8 @@ public class TagServiceImpl implements TagService {
      * @return Tag
      */
     @Override
-    public Tag saveByTag(Tag tag) {
+    @CacheEvict(value = POSTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
+    public Tag save(Tag tag) {
         return tagRepository.save(tag);
     }
 
@@ -42,8 +46,9 @@ public class TagServiceImpl implements TagService {
      * @return Tag
      */
     @Override
-    public Tag removeByTagId(Long tagId) {
-        Optional tag = findByTagId(tagId);
+    @CacheEvict(value = POSTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
+    public Tag remove(Long tagId) {
+        final Optional tag = findByTagId(tagId);
         tagRepository.delete(tag.get());
         return tag.get();
     }
@@ -54,7 +59,7 @@ public class TagServiceImpl implements TagService {
      * @return List
      */
     @Override
-    public List findAllTags() {
+    public List findAll() {
         return tagRepository.findAll();
     }
 
@@ -99,10 +104,10 @@ public class TagServiceImpl implements TagService {
      */
     @Override
     public List strListToTagList(String tagList) {
-        String[] tags = tagList.split(",");
-        List tagsList = new ArrayList<>();
+        final String[] tags = tagList.split(",");
+        final List tagsList = new ArrayList<>();
         for (String tag : tags) {
-            Tag t = findTagByTagName(tag);
+            final Tag t = findTagByTagName(tag);
             Tag nt = null;
             if (null != t) {
                 tagsList.add(t);
@@ -110,7 +115,7 @@ public class TagServiceImpl implements TagService {
                 nt = new Tag();
                 nt.setTagName(tag);
                 nt.setTagUrl(tag);
-                tagsList.add(saveByTag(nt));
+                tagsList.add(save(nt));
             }
         }
         return tagsList;
diff --git a/src/main/java/cc/ryanc/halo/service/impl/UserServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/UserServiceImpl.java
index fb96e0895..710e6722d 100755
--- a/src/main/java/cc/ryanc/halo/service/impl/UserServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/UserServiceImpl.java
@@ -30,7 +30,7 @@ public class UserServiceImpl implements UserService {
      * @param user user
      */
     @Override
-    public void saveByUser(User user) {
+    public void save(User user) {
         userRepository.save(user);
     }
 
@@ -65,7 +65,7 @@ public class UserServiceImpl implements UserService {
      */
     @Override
     public User findUser() {
-        List users = userRepository.findAll();
+        final List users = userRepository.findAll();
         if (users != null && users.size() > 0) {
             return users.get(0);
         } else {
@@ -92,7 +92,8 @@ public class UserServiceImpl implements UserService {
      */
     @Override
     public void updateUserLoginEnable(String enable) {
-        User user = this.findUser();
+        final User user = this.findUser();
+        user.setLoginError(0);
         user.setLoginEnable(enable);
         userRepository.save(user);
     }
@@ -105,7 +106,7 @@ public class UserServiceImpl implements UserService {
      */
     @Override
     public User updateUserLoginLast(Date lastDate) {
-        User user = this.findUser();
+        final User user = this.findUser();
         user.setLoginLast(lastDate);
         userRepository.save(user);
         return user;
@@ -118,7 +119,7 @@ public class UserServiceImpl implements UserService {
      */
     @Override
     public Integer updateUserLoginError() {
-        User user = this.findUser();
+        final User user = this.findUser();
         user.setLoginError((user.getLoginError() == null ? 0 : user.getLoginError()) + 1);
         userRepository.save(user);
         return user.getLoginError();
@@ -131,7 +132,7 @@ public class UserServiceImpl implements UserService {
      */
     @Override
     public User updateUserNormal() {
-        User user = this.findUser();
+        final User user = this.findUser();
         user.setLoginEnable(TrueFalseEnum.TRUE.getDesc());
         user.setLoginError(0);
         user.setLoginLast(new Date());
diff --git a/src/main/java/cc/ryanc/halo/task/PostSyncTask.java b/src/main/java/cc/ryanc/halo/task/PostSyncTask.java
new file mode 100644
index 000000000..bb01797eb
--- /dev/null
+++ b/src/main/java/cc/ryanc/halo/task/PostSyncTask.java
@@ -0,0 +1,34 @@
+package cc.ryanc.halo.task;
+
+import cc.ryanc.halo.model.domain.Post;
+import cc.ryanc.halo.model.dto.HaloConst;
+import cc.ryanc.halo.service.PostService;
+import cc.ryanc.halo.utils.SpringUtil;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @author : RYAN0UP
+ * @date : 2018/12/5
+ */
+@Slf4j
+public class PostSyncTask {
+
+    /**
+     * 将缓存的图文浏览数写入数据库
+     */
+    public void postSync() {
+        final PostService postService = SpringUtil.getBean(PostService.class);
+        Post post = null;
+        int count = 0;
+        for (Long key : HaloConst.POSTS_VIEWS.keySet()) {
+            post = postService.findByPostId(key).orElse(null);
+            if (null != post) {
+                post.setPostViews(post.getPostViews() + HaloConst.POSTS_VIEWS.get(key));
+                postService.save(post);
+                count++;
+            }
+        }
+        log.info("The number of visits to {} posts has been updated", count);
+        HaloConst.POSTS_VIEWS.clear();
+    }
+}
diff --git a/src/main/java/cc/ryanc/halo/utils/CommentUtil.java b/src/main/java/cc/ryanc/halo/utils/CommentUtil.java
index 44db0792b..bc4d99917 100644
--- a/src/main/java/cc/ryanc/halo/utils/CommentUtil.java
+++ b/src/main/java/cc/ryanc/halo/utils/CommentUtil.java
@@ -1,14 +1,13 @@
 package cc.ryanc.halo.utils;
 
+import cc.ryanc.halo.model.domain.Comment;
+import org.springframework.util.Assert;
+import org.springframework.util.CollectionUtils;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-import org.springframework.util.Assert;
-import org.springframework.util.CollectionUtils;
-
-import cc.ryanc.halo.model.domain.Comment;
-
 /**
  * 
  * 拼装评论
@@ -30,7 +29,7 @@ public class CommentUtil {
             return Collections.emptyList();
         }
 
-        List commentsResult = new ArrayList<>();
+        final List commentsResult = new ArrayList<>();
 
         for (Comment comment : commentsRoot) {
             if (comment.getCommentParent() == 0) {
@@ -60,7 +59,7 @@ public class CommentUtil {
             return null;
         }
 
-        List commentsChild = new ArrayList<>();
+        final List commentsChild = new ArrayList<>();
         for (Comment comment : commentsRoot) {
             if (comment.getCommentParent() != 0) {
                 if (comment.getCommentParent().equals(id)) {
diff --git a/src/main/java/cc/ryanc/halo/utils/HaloUtils.java b/src/main/java/cc/ryanc/halo/utils/HaloUtils.java
index 1d1a2796f..d11273f71 100755
--- a/src/main/java/cc/ryanc/halo/utils/HaloUtils.java
+++ b/src/main/java/cc/ryanc/halo/utils/HaloUtils.java
@@ -8,6 +8,7 @@ import cc.ryanc.halo.model.enums.BlogPropertiesEnum;
 import cc.ryanc.halo.model.enums.CommonParamsEnum;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.text.StrBuilder;
 import cn.hutool.core.util.StrUtil;
 import com.sun.syndication.feed.rss.Channel;
 import com.sun.syndication.feed.rss.Content;
@@ -16,14 +17,12 @@ import com.sun.syndication.io.FeedException;
 import com.sun.syndication.io.WireFeedOutput;
 import io.github.biezhi.ome.OhMyEmail;
 import lombok.extern.slf4j.Slf4j;
-
 import org.springframework.util.Assert;
 import org.springframework.util.ResourceUtils;
 
 import javax.imageio.ImageIO;
 import java.awt.image.BufferedImage;
 import java.io.*;
-import java.net.URI;
 import java.net.URL;
 import java.net.URLConnection;
 import java.nio.file.Files;
@@ -49,13 +48,16 @@ public class HaloUtils {
      * 获取备份文件信息
      *
      * @param dir dir
+     *
      * @return List
      */
     public static List getBackUps(String dir) {
-        String srcPathStr = System.getProperties().getProperty("user.home") + "/halo/backup/" + dir;
-        File srcPath = new File(srcPathStr);
-        File[] files = srcPath.listFiles();
-        List backupDtos = new ArrayList<>();
+        final StrBuilder srcPathStr = new StrBuilder(System.getProperties().getProperty("user.home"));
+        srcPathStr.append("/halo/backup/");
+        srcPathStr.append(dir);
+        final File srcPath = new File(srcPathStr.toString());
+        final File[] files = srcPath.listFiles();
+        final List backupDtos = new ArrayList<>();
         BackupDto backupDto = null;
         // 遍历文件
         if (null != files) {
@@ -81,25 +83,26 @@ public class HaloUtils {
      * 转换文件大小
      *
      * @param size size
+     *
      * @return String
      */
     public static String parseSize(long size) {
-        if (size < CommonParamsEnum.NOT_FOUND.getValue()) {
-            return String.valueOf(size) + "B";
+        if (size < CommonParamsEnum.BYTE.getValue()) {
+            return size + "B";
         } else {
             size = size / 1024;
         }
-        if (size < CommonParamsEnum.NOT_FOUND.getValue()) {
-            return String.valueOf(size) + "KB";
+        if (size < CommonParamsEnum.BYTE.getValue()) {
+            return size + "KB";
         } else {
             size = size / 1024;
         }
-        if (size < CommonParamsEnum.NOT_FOUND.getValue()) {
+        if (size < CommonParamsEnum.BYTE.getValue()) {
             size = size * 100;
-            return String.valueOf((size / 100)) + "." + String.valueOf((size % 100)) + "MB";
+            return size / 100 + "." + size % 100 + "MB";
         } else {
             size = size * 100 / 1024;
-            return String.valueOf((size / 100)) + "." + String.valueOf((size % 100)) + "GB";
+            return size / 100 + "." + size % 100 + "GB";
         }
     }
 
@@ -107,21 +110,21 @@ public class HaloUtils {
      * 获取文件创建时间
      *
      * @param srcPath 文件绝对路径
+     *
      * @return 时间
      */
     public static Date getCreateTime(String srcPath) {
-        Path path = Paths.get(srcPath);
-        BasicFileAttributeView basicview = Files.getFileAttributeView(path, BasicFileAttributeView.class,
-                LinkOption.NOFOLLOW_LINKS);
+        final Path path = Paths.get(srcPath);
+        final BasicFileAttributeView basicview = Files.getFileAttributeView(path, BasicFileAttributeView.class, LinkOption.NOFOLLOW_LINKS);
         BasicFileAttributes attr;
         try {
             attr = basicview.readAttributes();
-            Date createDate = new Date(attr.creationTime().toMillis());
+            final Date createDate = new Date(attr.creationTime().toMillis());
             return createDate;
         } catch (Exception e) {
             e.printStackTrace();
         }
-        Calendar cal = Calendar.getInstance();
+        final Calendar cal = Calendar.getInstance();
         cal.set(1970, 0, 1, 0, 0, 0);
         return cal.getTime();
     }
@@ -130,11 +133,12 @@ public class HaloUtils {
      * 获取文件长和宽
      *
      * @param file file
+     *
      * @return String
      */
     public static String getImageWh(File file) {
         try {
-            BufferedImage image = ImageIO.read(new FileInputStream(file));
+            final BufferedImage image = ImageIO.read(new FileInputStream(file));
             return image.getWidth() + "x" + image.getHeight();
         } catch (Exception e) {
             e.printStackTrace();
@@ -148,13 +152,13 @@ public class HaloUtils {
      * @return List
      */
     public static List getThemes() {
-        List themes = new ArrayList<>();
+        final List themes = new ArrayList<>();
         try {
             // 获取项目根路径
-            File basePath = new File(ResourceUtils.getURL("classpath:").getPath());
+            final File basePath = new File(ResourceUtils.getURL("classpath:").getPath());
             // 获取主题路径
-            File themesPath = new File(basePath.getAbsolutePath(), "templates/themes");
-            File[] files = themesPath.listFiles();
+            final File themesPath = new File(basePath.getAbsolutePath(), "templates/themes");
+            final File[] files = themesPath.listFiles();
             if (null != files) {
                 Theme theme = null;
                 for (File file : files) {
@@ -191,18 +195,19 @@ public class HaloUtils {
      * 获取主题下的模板文件名
      *
      * @param theme theme
+     *
      * @return List
      */
     public static List getTplName(String theme) {
-        List tpls = new ArrayList<>();
+        final List tpls = new ArrayList<>();
         try {
             // 获取项目根路径
-            File basePath = new File(ResourceUtils.getURL("classpath:").getPath());
+            final File basePath = new File(ResourceUtils.getURL("classpath:").getPath());
             // 获取主题路径
-            File themesPath = new File(basePath.getAbsolutePath(), "templates/themes/" + theme);
-            File modulePath = new File(themesPath.getAbsolutePath(), "module");
-            File[] baseFiles = themesPath.listFiles();
-            File[] moduleFiles = modulePath.listFiles();
+            final File themesPath = new File(basePath.getAbsolutePath(), "templates/themes/" + theme);
+            final File modulePath = new File(themesPath.getAbsolutePath(), "module");
+            final File[] baseFiles = themesPath.listFiles();
+            final File[] moduleFiles = modulePath.listFiles();
             if (null != moduleFiles) {
                 for (File file : moduleFiles) {
                     if (file.isFile() && file.getName().endsWith(".ftl")) {
@@ -229,12 +234,12 @@ public class HaloUtils {
      * @return List
      */
     public static List getCustomTpl(String theme) {
-        List tpls = new ArrayList<>();
+        final List tpls = new ArrayList<>();
         try {
-            File basePath = new File(ResourceUtils.getURL("classpath:").getPath());
+            final File basePath = new File(ResourceUtils.getURL("classpath:").getPath());
             // 获取主题路径
-            File themePath = new File(basePath.getAbsolutePath(), "templates/themes/" + theme);
-            File[] themeFiles = themePath.listFiles();
+            final File themePath = new File(basePath.getAbsolutePath(), "templates/themes/" + theme);
+            final File[] themeFiles = themePath.listFiles();
             if (null != themeFiles && themeFiles.length > 0) {
                 for (File file : themeFiles) {
                     String[] split = StrUtil.removeSuffix(file.getName(), ".ftl").split("_");
@@ -260,7 +265,7 @@ public class HaloUtils {
         FileWriter fileWriter = null;
         BufferedWriter bufferedWriter = null;
         try {
-            File file = new File(filePath);
+            final File file = new File(filePath);
             if (!file.exists()) {
                 file.mkdirs();
             }
@@ -283,13 +288,15 @@ public class HaloUtils {
      * 生成rss
      *
      * @param posts posts
+     *
      * @return String
-     * @throws FeedException
+     *
+     * @throws FeedException FeedException
      */
     public static String getRss(List posts) throws FeedException {
         Assert.notEmpty(posts, "posts must not be empty");
 
-        Channel channel = new Channel("rss_2.0");
+        final Channel channel = new Channel("rss_2.0");
         if (null == HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_TITLE.getProp())) {
             channel.setTitle("");
         } else {
@@ -306,13 +313,13 @@ public class HaloUtils {
             channel.setDescription(HaloConst.OPTIONS.get(BlogPropertiesEnum.SEO_DESC.getProp()));
         }
         channel.setLanguage("zh-CN");
-        List items = new ArrayList<>();
+        final List items = new ArrayList<>();
         for (Post post : posts) {
-            Item item = new Item();
+            final Item item = new Item();
             item.setTitle(post.getPostTitle());
-            Content content = new Content();
+            final Content content = new Content();
             String value = post.getPostContent();
-            char[] xmlChar = value.toCharArray();
+            final char[] xmlChar = value.toCharArray();
             for (int i = 0; i < xmlChar.length; ++i) {
                 if (xmlChar[i] > 0xFFFD) {
                     xmlChar[i] = ' ';
@@ -323,13 +330,12 @@ public class HaloUtils {
             value = new String(xmlChar);
             content.setValue(value);
             item.setContent(content);
-            item.setLink(
-                    HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()) + "/archives/" + post.getPostUrl());
+            item.setLink(HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()) + "/archives/" + post.getPostUrl());
             item.setPubDate(post.getPostDate());
             items.add(item);
         }
         channel.setItems(items);
-        WireFeedOutput out = new WireFeedOutput();
+        final WireFeedOutput out = new WireFeedOutput();
         return out.outputString(channel);
     }
 
@@ -337,21 +343,23 @@ public class HaloUtils {
      * 获取sitemap
      *
      * @param posts posts
+     *
      * @return String
      */
     public static String getSiteMap(List posts) {
         Assert.notEmpty(posts, "post mut not be empty");
-
-        String head = "\n";
-        String urlBody = "";
-        String urlItem;
-        String urlPath = HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()) + "/archives/";
+        final StrBuilder head = new StrBuilder("\n");
+        final StrBuilder urlBody = new StrBuilder();
+        final String urlPath = HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()) + "/archives/";
         for (Post post : posts) {
-            urlItem = "" + urlPath + post.getPostUrl() + ""
-                    + DateUtil.format(post.getPostDate(), "yyyy-MM-dd'T'HH:mm:ss.SSSXXX") + "" + "";
-            urlBody += urlItem;
+            urlBody.append("");
+            urlBody.append(urlPath);
+            urlBody.append(post.getPostUrl());
+            urlBody.append("");
+            urlBody.append(DateUtil.format(post.getPostDate(), "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"));
+            urlBody.append("");
         }
-        return head + urlBody + "";
+        return head.append(urlBody).append("").toString();
     }
 
     /**
@@ -362,57 +370,18 @@ public class HaloUtils {
      * @param password password
      */
     public static void configMail(String smtpHost, String userName, String password) {
-        Properties properties = OhMyEmail.defaultConfig(false);
+        final Properties properties = OhMyEmail.defaultConfig(false);
         properties.setProperty("mail.smtp.host", smtpHost);
         OhMyEmail.config(properties, userName, password);
     }
 
-    /**
-     * 访问路径获取json数据
-     *
-     * @param enterUrl 路径
-     * @return String
-     */
-    public static String getHttpResponse(String enterUrl) {
-        Assert.hasText(enterUrl, "enter url must not be blank");
-
-        BufferedReader in = null;
-        StringBuffer result = null;
-        try {
-            URI uri = new URI(enterUrl);
-            URL url = uri.toURL();
-            URLConnection connection = url.openConnection();
-            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
-            connection.setRequestProperty("Charset", "utf-8");
-            connection.connect();
-            result = new StringBuffer();
-            in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
-            String line;
-            while ((line = in.readLine()) != null) {
-                result.append(line);
-            }
-            return result.toString();
-
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            try {
-                if (in != null) {
-                    in.close();
-                }
-            } catch (Exception e2) {
-                e2.printStackTrace();
-            }
-        }
-        return null;
-    }
-
     /**
      * 百度主动推送
      *
      * @param blogUrl 博客地址
      * @param token   百度推送token
      * @param urls    文章路径
+     *
      * @return String
      */
     public static String baiduPost(String blogUrl, String token, String urls) {
@@ -420,13 +389,17 @@ public class HaloUtils {
         Assert.hasText(token, "token must not be blank");
         Assert.hasText(urls, "urls must not be blank");
 
-        String url = "http://data.zz.baidu.com/urls?site=" + blogUrl + "&token=" + token;
-        String result = "";
+        final StrBuilder url = new StrBuilder("http://data.zz.baidu.com/urls?site=");
+        url.append(blogUrl);
+        url.append("&token=");
+        url.append(token);
+
+        final StrBuilder result = new StrBuilder();
         PrintWriter out = null;
         BufferedReader in = null;
         try {
             // 建立URL之间的连接
-            URLConnection conn = new URL(url).openConnection();
+            final URLConnection conn = new URL(url.toString()).openConnection();
             // 设置通用的请求属性
             conn.setRequestProperty("Host", "data.zz.baidu.com");
             conn.setRequestProperty("User-Agent", "curl/7.12.1");
@@ -446,7 +419,7 @@ public class HaloUtils {
             in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
             String line;
             while ((line = in.readLine()) != null) {
-                result += line;
+                result.append(line);
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -462,7 +435,7 @@ public class HaloUtils {
                 ex.printStackTrace();
             }
         }
-        return result;
+        return result.toString();
     }
 
 }
diff --git a/src/main/java/cc/ryanc/halo/utils/MarkdownUtils.java b/src/main/java/cc/ryanc/halo/utils/MarkdownUtils.java
new file mode 100644
index 000000000..96e149dd4
--- /dev/null
+++ b/src/main/java/cc/ryanc/halo/utils/MarkdownUtils.java
@@ -0,0 +1,67 @@
+package cc.ryanc.halo.utils;
+
+import org.commonmark.Extension;
+import org.commonmark.ext.front.matter.YamlFrontMatterExtension;
+import org.commonmark.ext.front.matter.YamlFrontMatterVisitor;
+import org.commonmark.ext.gfm.tables.TablesExtension;
+import org.commonmark.node.Node;
+import org.commonmark.parser.Parser;
+import org.commonmark.renderer.html.HtmlRenderer;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author : RYAN0UP
+ * @date : 2018/11/14
+ */
+public class MarkdownUtils {
+
+    /**
+     * Front-matter插件
+     */
+    private static final Set EXTENSIONS_YAML = Collections.singleton(YamlFrontMatterExtension.create());
+
+    /**
+     * Table插件
+     */
+    private static final Set EXTENSIONS_TABLE = Collections.singleton(TablesExtension.create());
+
+    /**
+     * 解析Markdown文档
+     */
+    private static final Parser PARSER = Parser.builder().extensions(EXTENSIONS_YAML).extensions(EXTENSIONS_TABLE).build();
+
+    /**
+     * 渲染HTML文档
+     */
+    private static final HtmlRenderer RENDERER = HtmlRenderer.builder().extensions(EXTENSIONS_YAML).extensions(EXTENSIONS_TABLE).build();
+
+    /**
+     * 渲染Markdown
+     *
+     * @param content content
+     *
+     * @return String
+     */
+    public static String renderMarkdown(String content) {
+        final Node document = PARSER.parse(content);
+        return RENDERER.render(document);
+    }
+
+    /**
+     * 获取元数据
+     *
+     * @param content content
+     *
+     * @return Map
+     */
+    public static Map> getFrontMatter(String content) {
+        final YamlFrontMatterVisitor visitor = new YamlFrontMatterVisitor();
+        final Node document = PARSER.parse(content);
+        document.accept(visitor);
+        return visitor.getData();
+    }
+}
diff --git a/src/main/java/cc/ryanc/halo/utils/Md5Util.java b/src/main/java/cc/ryanc/halo/utils/Md5Util.java
new file mode 100644
index 000000000..75b36be9b
--- /dev/null
+++ b/src/main/java/cc/ryanc/halo/utils/Md5Util.java
@@ -0,0 +1,64 @@
+package cc.ryanc.halo.utils;
+
+import cn.hutool.core.text.StrBuilder;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
+import java.security.MessageDigest;
+
+/**
+ * 
+ *      获取文件hash
+ * 
+ * + * @author : Yawn + * @date : 2018/12/04 + */ +public class Md5Util { + + /** + * 计算文件MD5编码 + * + * @param file file + * + * @return byte + * + * @throws Exception Exception + */ + private static byte[] createChecksum(MultipartFile file) throws Exception { + final InputStream fis = file.getInputStream(); + + final byte[] buffer = new byte[1024]; + final MessageDigest complete = MessageDigest.getInstance("MD5"); + int numRead; + + do { + numRead = fis.read(buffer); + if (numRead > 0) { + complete.update(buffer, 0, numRead); + } + } while (numRead != -1); + + fis.close(); + return complete.digest(); + } + + /** + * 生成文件hash值 + * + * @param file file + * + * @return String + * + * @throws Exception Exception + */ + public static String getMD5Checksum(MultipartFile file) throws Exception { + final byte[] b = createChecksum(file); + StrBuilder result = new StrBuilder(); + + for (int i = 0; i < b.length; i++) { + result.append(Integer.toString((b[i] & 0xff) + 0x100, 16).substring(1)); + } + return result.toString(); + } +} diff --git a/src/main/java/cc/ryanc/halo/utils/SpringUtil.java b/src/main/java/cc/ryanc/halo/utils/SpringUtil.java new file mode 100644 index 000000000..aaaea82bf --- /dev/null +++ b/src/main/java/cc/ryanc/halo/utils/SpringUtil.java @@ -0,0 +1,53 @@ +package cc.ryanc.halo.utils; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +/** + * @author : RYAN0UP + * @date : 2018/12/5 + */ +@Component +public class SpringUtil implements ApplicationContextAware { + + private static ApplicationContext applicationContext; + + /** + * 获取applicationContext + * + * @return ApplicationContext + */ + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + if (SpringUtil.applicationContext == null) { + SpringUtil.applicationContext = applicationContext; + } + } + + /** + * 通过name获取 Bean. + * + * @param name name + * @return Object + */ + public static Object getBean(String name) { + return getApplicationContext().getBean(name); + } + + /** + * 通过class获取Bean + * + * @param clazz clazz + * @param + * @return T + */ + public static T getBean(Class clazz) { + return getApplicationContext().getBean(clazz); + } +} diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/AdminController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/AdminController.java index 1acbfead7..6069aabbb 100755 --- a/src/main/java/cc/ryanc/halo/web/controller/admin/AdminController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/admin/AdminController.java @@ -1,26 +1,21 @@ package cc.ryanc.halo.web.controller.admin; -import cc.ryanc.halo.model.domain.Comment; -import cc.ryanc.halo.model.domain.Logs; -import cc.ryanc.halo.model.domain.Post; -import cc.ryanc.halo.model.domain.User; +import cc.ryanc.halo.model.domain.*; import cc.ryanc.halo.model.dto.HaloConst; import cc.ryanc.halo.model.dto.JsonResult; import cc.ryanc.halo.model.dto.LogsRecord; -import cc.ryanc.halo.model.enums.CommonParamsEnum; -import cc.ryanc.halo.model.enums.ResponseStatusEnum; -import cc.ryanc.halo.model.enums.ResultCodeEnum; -import cc.ryanc.halo.model.enums.TrueFalseEnum; +import cc.ryanc.halo.model.enums.*; import cc.ryanc.halo.service.*; import cc.ryanc.halo.utils.LocaleMessageUtil; +import cc.ryanc.halo.utils.MarkdownUtils; import cc.ryanc.halo.web.controller.core.BaseController; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Validator; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; -import cn.hutool.extra.servlet.ServletUtil; import cn.hutool.http.HtmlUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -31,12 +26,12 @@ import org.springframework.data.domain.Sort; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; -import java.util.Date; -import java.util.List; -import java.util.Random; +import java.io.IOException; +import java.util.*; /** *
@@ -69,6 +64,12 @@ public class AdminController extends BaseController {
     @Autowired
     private AttachmentService attachmentService;
 
+    @Autowired
+    private CategoryService categoryService;
+
+    @Autowired
+    private TagService tagService;
+
     @Autowired
     private LocaleMessageUtil localeMessageUtil;
 
@@ -83,27 +84,32 @@ public class AdminController extends BaseController {
     public String index(Model model) {
 
         //查询评论的条数
-        Integer commentCount = commentService.findAllComments().size();
+        final Long commentCount = commentService.getCount();
         model.addAttribute("commentCount", commentCount);
 
         //查询最新的文章
-        List postsLatest = postService.findPostLatest();
+        final List postsLatest = postService.findPostLatest();
         model.addAttribute("postTopFive", postsLatest);
 
         //查询最新的日志
-        List logsLatest = logsService.findLogsLatest();
+        final List logsLatest = logsService.findLogsLatest();
         model.addAttribute("logs", logsLatest);
 
         //查询最新的评论
-        List comments = commentService.findCommentsLatest();
+        final List comments = commentService.findCommentsLatest();
         model.addAttribute("comments", comments);
 
         //附件数量
-        model.addAttribute("mediaCount", attachmentService.findAllAttachments().size());
+        model.addAttribute("mediaCount", attachmentService.getCount());
 
         //文章阅读总数
-        Long postViewsSum = postService.getPostViews();
+        final Long postViewsSum = postService.getPostViews();
         model.addAttribute("postViewsSum", postViewsSum);
+
+        //成立天数
+        final Date blogStart = DateUtil.parse(HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_START.getProp()));
+        final long hadDays = DateUtil.between(blogStart, DateUtil.date(), DateUnit.DAY);
+        model.addAttribute("hadDays", hadDays);
         return "admin/admin_index";
     }
 
@@ -115,7 +121,7 @@ public class AdminController extends BaseController {
      */
     @GetMapping(value = "/login")
     public String login(HttpSession session) {
-        User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY);
+        final User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY);
         //如果session存在,跳转到后台首页
         if (null != user) {
             return "redirect:/admin";
@@ -137,13 +143,13 @@ public class AdminController extends BaseController {
                                @ModelAttribute("loginPwd") String loginPwd,
                                HttpSession session) {
         //已注册账号,单用户,只有一个
-        User aUser = userService.findUser();
+        final User aUser = userService.findUser();
         //首先判断是否已经被禁用已经是否已经过了10分钟
         Date loginLast = DateUtil.date();
         if (null != aUser.getLoginLast()) {
             loginLast = aUser.getLoginLast();
         }
-        Long between = DateUtil.between(loginLast, DateUtil.date(), DateUnit.MINUTE);
+        final Long between = DateUtil.between(loginLast, DateUtil.date(), DateUnit.MINUTE);
         if (StrUtil.equals(aUser.getLoginEnable(), TrueFalseEnum.FALSE.getDesc()) && (between < CommonParamsEnum.TEN.getValue())) {
             return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.login.disabled"));
         }
@@ -160,25 +166,18 @@ public class AdminController extends BaseController {
             session.setAttribute(HaloConst.USER_SESSION_KEY, aUser);
             //重置用户的登录状态为正常
             userService.updateUserNormal();
-            logsService.saveByLogs(new Logs(LogsRecord.LOGIN, LogsRecord.LOGIN_SUCCESS, ServletUtil.getClientIP(request), DateUtil.date()));
+            logsService.save(LogsRecord.LOGIN, LogsRecord.LOGIN_SUCCESS, request);
             log.info("User {} login succeeded.", aUser.getUserDisplayName());
             return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.login.success"));
         } else {
             //更新失败次数
-            Integer errorCount = userService.updateUserLoginError();
+            final Integer errorCount = userService.updateUserLoginError();
             //超过五次禁用账户
             if (errorCount >= CommonParamsEnum.FIVE.getValue()) {
                 userService.updateUserLoginEnable(TrueFalseEnum.FALSE.getDesc());
             }
-            logsService.saveByLogs(
-                    new Logs(
-                            LogsRecord.LOGIN,
-                            LogsRecord.LOGIN_ERROR + "[" + HtmlUtil.escape(loginName) + "," + HtmlUtil.escape(loginPwd) + "]",
-                            ServletUtil.getClientIP(request),
-                            DateUtil.date()
-                    )
-            );
-            Object[] args = {(5 - errorCount)};
+            logsService.save(LogsRecord.LOGIN, LogsRecord.LOGIN_ERROR + "[" + HtmlUtil.escape(loginName) + "," + HtmlUtil.escape(loginPwd) + "]", request);
+            final Object[] args = {(5 - errorCount)};
             return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.login.failed", args));
         }
     }
@@ -191,9 +190,9 @@ public class AdminController extends BaseController {
      */
     @GetMapping(value = "/logOut")
     public String logOut(HttpSession session) {
-        User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY);
+        final User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY);
         session.removeAttribute(HaloConst.USER_SESSION_KEY);
-        logsService.saveByLogs(new Logs(LogsRecord.LOGOUT, user.getUserName(), ServletUtil.getClientIP(request), DateUtil.date()));
+        logsService.save(LogsRecord.LOGOUT, user.getUserName(), request);
         log.info("User {} has logged out", user.getUserName());
         return "redirect:/admin/login";
     }
@@ -210,9 +209,9 @@ public class AdminController extends BaseController {
     public String logs(Model model,
                        @RequestParam(value = "page", defaultValue = "0") Integer page,
                        @RequestParam(value = "size", defaultValue = "10") Integer size) {
-        Sort sort = new Sort(Sort.Direction.DESC, "logId");
-        Pageable pageable = PageRequest.of(page, size, sort);
-        Page logs = logsService.findAllLogs(pageable);
+        final Sort sort = new Sort(Sort.Direction.DESC, "logId");
+        final Pageable pageable = PageRequest.of(page, size, sort);
+        final Page logs = logsService.findAll(pageable);
         model.addAttribute("logs", logs);
         return "admin/widget/_logs-all";
     }
@@ -225,7 +224,7 @@ public class AdminController extends BaseController {
     @GetMapping(value = "/logs/clear")
     public String logsClear() {
         try {
-            logsService.removeAllLogs();
+            logsService.removeAll();
         } catch (Exception e) {
             log.error("Clear log failed:{}" + e.getMessage());
         }
@@ -233,7 +232,7 @@ public class AdminController extends BaseController {
     }
 
     /**
-     * 不可描述的页面
+     * Halo关于页面
      *
      * @return 模板路径admin/admin_halo
      */
@@ -250,7 +249,105 @@ public class AdminController extends BaseController {
     @GetMapping(value = "/getToken")
     @ResponseBody
     public JsonResult getToken() {
-        String token = (System.currentTimeMillis() + new Random().nextInt(999999999)) + "";
+        final String token = (System.currentTimeMillis() + new Random().nextInt(999999999)) + "";
         return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), SecureUtil.md5(token));
     }
+
+
+    /**
+     * 小工具
+     *
+     * @return String
+     */
+    @GetMapping(value = "/tools")
+    public String tools() {
+        return "admin/admin_tools";
+    }
+
+    /**
+     * Markdown 导入页面
+     *
+     * @return String
+     */
+    @GetMapping(value = "/tools/markdownImport")
+    public String markdownImport() {
+        return "admin/widget/_markdown_import";
+    }
+
+    /**
+     * Markdown 导入
+     *
+     * @param file    file
+     * @param request request
+     * @return JsonResult
+     */
+    @PostMapping(value = "/tools/markdownImport")
+    @ResponseBody
+    public JsonResult markdownImport(@RequestParam("file") MultipartFile file,
+                                     HttpServletRequest request,
+                                     HttpSession session) throws IOException {
+        final User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY);
+        final String markdown = IoUtil.read(file.getInputStream(), "UTF-8");
+        final String content = MarkdownUtils.renderMarkdown(markdown);
+        final Map> frontMatters = MarkdownUtils.getFrontMatter(markdown);
+        final Post post = new Post();
+        List elementValue = null;
+        final List tags = new ArrayList<>();
+        final List categories = new ArrayList<>();
+        Tag tag = null;
+        Category category = null;
+        if (frontMatters.size() > 0) {
+            for (String key : frontMatters.keySet()) {
+                elementValue = frontMatters.get(key);
+                for (String ele : elementValue) {
+                    if ("title".equals(key)) {
+                        post.setPostTitle(ele);
+                    } else if ("date".equals(key)) {
+                        post.setPostDate(DateUtil.parse(ele));
+                    } else if ("updated".equals(key)) {
+                        post.setPostUpdate(DateUtil.parse(ele));
+                    } else if ("tags".equals(key)) {
+                        tag = tagService.findTagByTagName(ele);
+                        if (null == tag) {
+                            tag = new Tag();
+                            tag.setTagName(ele);
+                            tag.setTagUrl(ele);
+                            tag = tagService.save(tag);
+                        }
+                        tags.add(tag);
+                    } else if ("categories".equals(key)) {
+                        category = categoryService.findByCateName(ele);
+                        if (null == category) {
+                            category = new Category();
+                            category.setCateName(ele);
+                            category.setCateUrl(ele);
+                            category.setCateDesc(ele);
+                            category = categoryService.save(category);
+                        }
+                        categories.add(category);
+                    }
+                }
+            }
+        } else {
+            post.setPostDate(new Date());
+            post.setPostUpdate(new Date());
+            post.setPostTitle(file.getOriginalFilename());
+        }
+        post.setPostContentMd(markdown);
+        post.setPostContent(content);
+        post.setPostType(PostTypeEnum.POST_TYPE_POST.getDesc());
+        post.setAllowComment(AllowCommentEnum.ALLOW.getCode());
+        post.setUser(user);
+        post.setTags(tags);
+        post.setCategories(categories);
+        post.setPostUrl(StrUtil.removeSuffix(file.getOriginalFilename(), ".md"));
+        if (null == post.getPostDate()) {
+            post.setPostDate(new Date());
+        }
+        if (null == post.getPostUpdate()) {
+            post.setPostUpdate(new Date());
+        }
+        postService.save(post);
+        return new JsonResult(ResultCodeEnum.SUCCESS.getCode());
+    }
 }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/AttachmentController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/AttachmentController.java
index 392caaf85..ff9ded0b3 100755
--- a/src/main/java/cc/ryanc/halo/web/controller/admin/AttachmentController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/admin/AttachmentController.java
@@ -1,20 +1,16 @@
 package cc.ryanc.halo.web.controller.admin;
 
 import cc.ryanc.halo.model.domain.Attachment;
-import cc.ryanc.halo.model.domain.Logs;
 import cc.ryanc.halo.model.dto.JsonResult;
 import cc.ryanc.halo.model.dto.LogsRecord;
 import cc.ryanc.halo.model.enums.PostTypeEnum;
 import cc.ryanc.halo.model.enums.ResultCodeEnum;
 import cc.ryanc.halo.service.AttachmentService;
 import cc.ryanc.halo.service.LogsService;
-import cc.ryanc.halo.utils.HaloUtils;
 import cc.ryanc.halo.utils.LocaleMessageUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
-import cn.hutool.extra.servlet.ServletUtil;
 import lombok.extern.slf4j.Slf4j;
-import net.coobird.thumbnailator.Thumbnails;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
@@ -27,11 +23,11 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.File;
-import java.text.SimpleDateFormat;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
-import java.util.Random;
+
+import static cc.ryanc.halo.model.enums.AttachLocationEnum.*;
 
 /**
  * 
@@ -56,18 +52,19 @@ public class AttachmentController {
     private LocaleMessageUtil localeMessageUtil;
 
     /**
-     * 获取upload的所有图片资源并渲染页面
+     * 复印件列表
      *
      * @param model model
+     *
      * @return 模板路径admin/admin_attachment
      */
     @GetMapping
     public String attachments(Model model,
                               @RequestParam(value = "page", defaultValue = "0") Integer page,
                               @RequestParam(value = "size", defaultValue = "18") Integer size) {
-        Sort sort = new Sort(Sort.Direction.DESC, "attachId");
-        Pageable pageable = PageRequest.of(page, size, sort);
-        Page attachments = attachmentService.findAllAttachments(pageable);
+        final Sort sort = new Sort(Sort.Direction.DESC, "attachId");
+        final Pageable pageable = PageRequest.of(page, size, sort);
+        final Page attachments = attachmentService.findAll(pageable);
         model.addAttribute("attachments", attachments);
         return "admin/admin_attachment";
     }
@@ -77,6 +74,7 @@ public class AttachmentController {
      *
      * @param model model
      * @param page  page 当前页码
+     *
      * @return 模板路径admin/widget/_attachment-select
      */
     @GetMapping(value = "/select")
@@ -84,9 +82,9 @@ public class AttachmentController {
                                    @RequestParam(value = "page", defaultValue = "0") Integer page,
                                    @RequestParam(value = "id", defaultValue = "none") String id,
                                    @RequestParam(value = "type", defaultValue = "normal") String type) {
-        Sort sort = new Sort(Sort.Direction.DESC, "attachId");
-        Pageable pageable = PageRequest.of(page, 18, sort);
-        Page attachments = attachmentService.findAllAttachments(pageable);
+        final Sort sort = new Sort(Sort.Direction.DESC, "attachId");
+        final Pageable pageable = PageRequest.of(page, 18, sort);
+        final Page attachments = attachmentService.findAll(pageable);
         model.addAttribute("attachments", attachments);
         model.addAttribute("id", id);
         if (StrUtil.equals(type, PostTypeEnum.POST_TYPE_POST.getDesc())) {
@@ -95,88 +93,59 @@ public class AttachmentController {
         return "admin/widget/_attachment-select";
     }
 
+
+    /**
+     * 上传附件窗口
+     *
+     * @return String
+     */
+    @GetMapping(value = "/uploadModal")
+    public String uploadModal() {
+        return "admin/widget/_attachment-upload";
+    }
+
     /**
      * 上传附件
      *
      * @param file    file
      * @param request request
+     *
      * @return Map
      */
     @PostMapping(value = "/upload", produces = {"application/json;charset=UTF-8"})
     @ResponseBody
     public Map upload(@RequestParam("file") MultipartFile file,
                                       HttpServletRequest request) {
-        return uploadAttachment(file, request);
-    }
-
-    /**
-     * editor.md上传图片
-     *
-     * @param file    file
-     * @param request request
-     * @return Map
-     */
-    @PostMapping(value = "/upload/editor", produces = {"application/json;charset=UTF-8"})
-    @ResponseBody
-    public Map editorUpload(@RequestParam("editormd-image-file") MultipartFile file,
-                                            HttpServletRequest request) {
-        return uploadAttachment(file, request);
-    }
-
-
-    /**
-     * 上传图片
-     *
-     * @param file    file
-     * @param request request
-     * @return Map
-     */
-    private Map uploadAttachment(MultipartFile file, HttpServletRequest request) {
-        Map result = new HashMap<>(3);
+        final Map result = new HashMap<>(3);
         if (!file.isEmpty()) {
             try {
-                //用户目录
-                String userPath = System.getProperties().getProperty("user.home") + "/halo";
-                //upload的路径
-                StringBuffer sbMedia = new StringBuffer("upload/");
-                //获取当前年月以创建目录,如果没有该目录则创建
-                sbMedia.append(DateUtil.thisYear()).append("/").append(DateUtil.thisMonth()).append("/");
-                File mediaPath = new File(userPath, sbMedia.toString());
-                if (!mediaPath.exists()) {
-                    mediaPath.mkdirs();
+                final Map resultMap = attachmentService.upload(file, request);
+                if (resultMap == null || resultMap.isEmpty()) {
+                    log.error("File upload failed");
+                    result.put("success", ResultCodeEnum.FAIL.getCode());
+                    result.put("message", localeMessageUtil.getMessage("code.admin.attachment.upload-failed"));
+                    return result;
                 }
-                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
-                String nameWithOutSuffix = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf('.')).replaceAll(" ", "_").replaceAll(",", "") + dateFormat.format(DateUtil.date()) + new Random().nextInt(1000);
-                String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf('.') + 1);
-                String fileName = nameWithOutSuffix + "." + fileSuffix;
-                file.transferTo(new File(mediaPath.getAbsoluteFile(), fileName));
-
-                //压缩图片
-                Thumbnails.of(new StringBuffer(mediaPath.getAbsolutePath()).append("/").append(fileName).toString()).size(256, 256).keepAspectRatio(false).toFile(new StringBuffer(mediaPath.getAbsolutePath()).append("/").append(nameWithOutSuffix).append("_small.").append(fileSuffix).toString());
-                String filePath = new StringBuffer("/upload/").append(DateUtil.thisYear()).append("/").append(DateUtil.thisMonth()).append("/").append(fileName).toString();
                 //保存在数据库
                 Attachment attachment = new Attachment();
-                attachment.setAttachName(fileName);
-                attachment.setAttachPath(filePath);
-                attachment.setAttachSmallPath(new StringBuffer("/upload/").append(DateUtil.thisYear()).append("/").append(DateUtil.thisMonth()).append("/").append(nameWithOutSuffix).append("_small.").append(fileSuffix).toString());
+                attachment.setAttachName(resultMap.get("fileName"));
+                attachment.setAttachPath(resultMap.get("filePath"));
+                attachment.setAttachSmallPath(resultMap.get("smallPath"));
                 attachment.setAttachType(file.getContentType());
-                attachment.setAttachSuffix(new StringBuffer(".").append(fileSuffix).toString());
-                attachment.setAttachCreated(DateUtil.date());
-                attachment.setAttachSize(HaloUtils.parseSize(new File(mediaPath, fileName).length()));
-                attachment.setAttachWh(HaloUtils.getImageWh(new File(mediaPath, fileName)));
-                attachmentService.saveByAttachment(attachment);
-                log.info("Upload file {} to {} successfully", fileName, mediaPath.getAbsolutePath());
-                logsService.saveByLogs(
-                        new Logs(LogsRecord.UPLOAD_FILE, fileName, ServletUtil.getClientIP(request), DateUtil.date())
-                );
-
-                result.put("success", 1);
+                attachment.setAttachSuffix(resultMap.get("suffix"));
+                attachment.setAttachSize(resultMap.get("size"));
+                attachment.setAttachWh(resultMap.get("wh"));
+                attachment.setAttachLocation(resultMap.get("location"));
+                attachmentService.save(attachment);
+                log.info("Upload file {} to {} successfully", resultMap.get("fileName"), resultMap.get("filePath"));
+                result.put("success", ResultCodeEnum.SUCCESS.getCode());
                 result.put("message", localeMessageUtil.getMessage("code.admin.attachment.upload-success"));
                 result.put("url", attachment.getAttachPath());
-                result.put("filename", filePath);
+                result.put("filename", resultMap.get("filePath"));
+                logsService.save(LogsRecord.UPLOAD_FILE, resultMap.get("fileName"), request);
             } catch (Exception e) {
                 log.error("Upload file failed:{}", e.getMessage());
-                result.put("success", 0);
+                result.put("success", ResultCodeEnum.FAIL.getCode());
                 result.put("message", localeMessageUtil.getMessage("code.admin.attachment.upload-failed"));
             }
         } else {
@@ -190,12 +159,13 @@ public class AttachmentController {
      *
      * @param model    model
      * @param attachId 附件编号
+     *
      * @return 模板路径admin/widget/_attachment-detail
      */
     @GetMapping(value = "/attachment")
     public String attachmentDetail(Model model, @RequestParam("attachId") Long attachId) {
-        Optional attachment = attachmentService.findByAttachId(attachId);
-        model.addAttribute("attachment", attachment.get());
+        final Optional attachment = attachmentService.findByAttachId(attachId);
+        model.addAttribute("attachment", attachment.orElse(new Attachment()));
         return "admin/widget/_attachment-detail";
     }
 
@@ -204,6 +174,7 @@ public class AttachmentController {
      *
      * @param attachId 附件编号
      * @param request  request
+     *
      * @return JsonResult
      */
     @GetMapping(value = "/remove")
@@ -211,28 +182,46 @@ public class AttachmentController {
     public JsonResult removeAttachment(@RequestParam("attachId") Long attachId,
                                        HttpServletRequest request) {
         Optional attachment = attachmentService.findByAttachId(attachId);
+        String attachLocation = attachment.get().getAttachLocation();
         String delFileName = attachment.get().getAttachName();
-        String delSmallFileName = delFileName.substring(0, delFileName.lastIndexOf('.')) + "_small" + attachment.get().getAttachSuffix();
+        boolean flag = true;
         try {
             //删除数据库中的内容
-            attachmentService.removeByAttachId(attachId);
-            //删除文件
-            String userPath = System.getProperties().getProperty("user.home") + "/halo";
-            File mediaPath = new File(userPath, attachment.get().getAttachPath().substring(0, attachment.get().getAttachPath().lastIndexOf('/')));
-            File delFile = new File(new StringBuffer(mediaPath.getAbsolutePath()).append("/").append(delFileName).toString());
-            File delSmallFile = new File(new StringBuffer(mediaPath.getAbsolutePath()).append("/").append(delSmallFileName).toString());
-            if (delFile.exists() && delFile.isFile()) {
-                if (delFile.delete() && delSmallFile.delete()) {
-                    log.info("Delete file {} successfully!", delFileName);
-                    logsService.saveByLogs(
-                            new Logs(LogsRecord.REMOVE_FILE, delFileName, ServletUtil.getClientIP(request), DateUtil.date())
-                    );
+            attachmentService.remove(attachId);
+            if (attachLocation != null) {
+                if (attachLocation.equals(SERVER.getDesc())) {
+                    String delSmallFileName = delFileName.substring(0, delFileName.lastIndexOf('.')) + "_small" + attachment.get().getAttachSuffix();
+                    //删除文件
+                    String userPath = System.getProperties().getProperty("user.home") + "/halo";
+                    File mediaPath = new File(userPath, attachment.get().getAttachPath().substring(0, attachment.get().getAttachPath().lastIndexOf('/')));
+                    File delFile = new File(new StringBuffer(mediaPath.getAbsolutePath()).append("/").append(delFileName).toString());
+                    File delSmallFile = new File(new StringBuffer(mediaPath.getAbsolutePath()).append("/").append(delSmallFileName).toString());
+                    if (delFile.exists() && delFile.isFile()) {
+                        flag = delFile.delete() && delSmallFile.delete();
+                    }
+                } else if (attachLocation.equals(QINIU.getDesc())) {
+                    //七牛删除
+                    String attachPath = attachment.get().getAttachPath();
+                    String key = attachPath.substring(attachPath.lastIndexOf("/") + 1);
+                    flag = attachmentService.deleteQiNiuAttachment(key);
+                } else if (attachLocation.equals(UPYUN.getDesc())) {
+                    //又拍删除
+                    String attachPath = attachment.get().getAttachPath();
+                    String fileName = attachPath.substring(attachPath.lastIndexOf("/") + 1);
+                    flag = attachmentService.deleteUpYunAttachment(fileName);
                 } else {
-                    log.error("Deleting attachment {} failed!", delFileName);
-                    return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.delete-failed"));
+                    //..
                 }
             }
+            if (flag) {
+                log.info("Delete file {} successfully!", delFileName);
+                logsService.save(LogsRecord.REMOVE_FILE, delFileName, request);
+            } else {
+                log.error("Deleting attachment {} failed!", delFileName);
+                return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.delete-failed"));
+            }
         } catch (Exception e) {
+            e.printStackTrace();
             log.error("Deleting attachment {} failed: {}", delFileName, e.getMessage());
             return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.delete-failed"));
         }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/BackupController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/BackupController.java
index 9225aa2dd..4162489ba 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/admin/BackupController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/admin/BackupController.java
@@ -1,29 +1,31 @@
 package cc.ryanc.halo.web.controller.admin;
 
+import cc.ryanc.halo.model.domain.Category;
 import cc.ryanc.halo.model.domain.Post;
+import cc.ryanc.halo.model.domain.Tag;
 import cc.ryanc.halo.model.domain.User;
 import cc.ryanc.halo.model.dto.BackupDto;
 import cc.ryanc.halo.model.dto.HaloConst;
 import cc.ryanc.halo.model.dto.JsonResult;
 import cc.ryanc.halo.model.enums.*;
 import cc.ryanc.halo.service.MailService;
-import cc.ryanc.halo.service.OptionsService;
 import cc.ryanc.halo.service.PostService;
 import cc.ryanc.halo.utils.HaloUtils;
 import cc.ryanc.halo.utils.LocaleMessageUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.text.StrBuilder;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.ZipUtil;
-import cn.hutool.cron.CronUtil;
-import freemarker.template.Configuration;
-import freemarker.template.TemplateModelException;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.util.ResourceUtils;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpSession;
 import java.io.File;
@@ -54,16 +56,11 @@ public class BackupController {
     @Autowired
     private LocaleMessageUtil localeMessageUtil;
 
-    @Autowired
-    private OptionsService optionsService;
-
-    @Autowired
-    private Configuration configuration;
-
     /**
      * 渲染备份页面
      *
      * @param model model
+     *
      * @return 模板路径admin/admin_backup
      */
     @GetMapping
@@ -87,6 +84,7 @@ public class BackupController {
      * 执行备份
      *
      * @param type 备份类型
+     *
      * @return JsonResult
      */
     @GetMapping(value = "doBackup")
@@ -108,13 +106,13 @@ public class BackupController {
      *
      * @return 重定向到/admin/backup
      */
-    public JsonResult backupDatabase() {
+    private JsonResult backupDatabase() {
         try {
             if (HaloUtils.getBackUps(BackupTypeEnum.DATABASES.getDesc()).size() > CommonParamsEnum.TEN.getValue()) {
                 FileUtil.del(System.getProperties().getProperty("user.home") + "/halo/backup/databases/");
             }
-            String srcPath = System.getProperties().getProperty("user.home") + "/halo/";
-            String distName = "databases_backup_" + DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss");
+            final String srcPath = System.getProperties().getProperty("user.home") + "/halo/";
+            final String distName = "databases_backup_" + DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss");
             //压缩文件
             ZipUtil.zip(srcPath + "halo.mv.db", System.getProperties().getProperty("user.home") + "/halo/backup/databases/" + distName + ".zip");
             log.info("Current time: {}, database backup was performed.", DateUtil.now());
@@ -126,18 +124,18 @@ public class BackupController {
     }
 
     /**
-     * 备份资源文件 重要
+     * 备份资源文件
      *
      * @return JsonResult
      */
-    public JsonResult backupResources() {
+    private JsonResult backupResources() {
         try {
             if (HaloUtils.getBackUps(BackupTypeEnum.RESOURCES.getDesc()).size() > CommonParamsEnum.TEN.getValue()) {
                 FileUtil.del(System.getProperties().getProperty("user.home") + "/halo/backup/resources/");
             }
-            File path = new File(ResourceUtils.getURL("classpath:").getPath());
-            String srcPath = path.getAbsolutePath();
-            String distName = "resources_backup_" + DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss");
+            final File path = new File(ResourceUtils.getURL("classpath:").getPath());
+            final String srcPath = path.getAbsolutePath();
+            final String distName = "resources_backup_" + DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss");
             //执行打包
             ZipUtil.zip(srcPath, System.getProperties().getProperty("user.home") + "/halo/backup/resources/" + distName + ".zip");
             log.info("Current time: {}, the resource file backup was performed.", DateUtil.now());
@@ -153,22 +151,48 @@ public class BackupController {
      *
      * @return JsonResult
      */
-    public JsonResult backupPosts() {
-        List posts = postService.findAllPosts(PostTypeEnum.POST_TYPE_POST.getDesc());
-        posts.addAll(postService.findAllPosts(PostTypeEnum.POST_TYPE_PAGE.getDesc()));
+    private JsonResult backupPosts() {
+        final List posts = postService.findAll(PostTypeEnum.POST_TYPE_POST.getDesc());
+        posts.addAll(postService.findAll(PostTypeEnum.POST_TYPE_PAGE.getDesc()));
         try {
+            final StrBuilder rootDir = new StrBuilder(System.getProperties().getProperty("user.home"));
+            rootDir.append("/halo/backup/posts/");
             if (HaloUtils.getBackUps(BackupTypeEnum.POSTS.getDesc()).size() > CommonParamsEnum.TEN.getValue()) {
-                FileUtil.del(System.getProperties().getProperty("user.home") + "/halo/backup/posts/");
+                FileUtil.del(rootDir.toString());
             }
             //打包好的文件名
-            String distName = "posts_backup_" + DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss");
-            String srcPath = System.getProperties().getProperty("user.home") + "/halo/backup/posts/" + distName;
+            final StrBuilder distName = new StrBuilder("posts_backup_");
+            distName.append(DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss"));
+            final StrBuilder srcPath = rootDir.append(distName);
+            final StrBuilder content = new StrBuilder("---\n");
             for (Post post : posts) {
-                HaloUtils.postToFile(post.getPostContentMd(), srcPath, post.getPostTitle() + ".md");
+                content.append("title: ").append(post.getPostTitle()).append("\n");
+                content.append("date: ").append(post.getPostDate()).append("\n");
+                content.append("updated: ").append(post.getPostUpdate()).append("\n");
+                content.append("thumbnail: ").append(post.getPostThumbnail()).append("\n");
+                if(post.getTags().size()>0){
+                    content.append("tags:").append("\n");
+                    final List tags = post.getTags();
+                    for (Tag tag : tags) {
+                        content.append("  - ").append(tag.getTagName()).append("\n");
+                    }
+                }
+                if(post.getCategories().size()>0){
+                    content.append("categories:").append("\n");
+                    final List categories = post.getCategories();
+                    for (Category category : categories) {
+                        content.append("  - ").append(category.getCateName()).append("\n");
+                    }
+                }
+                content.append("---\n\n");
+                content.append(post.getPostContentMd());
+                HaloUtils.postToFile(content.toString(), srcPath.toString(), post.getPostTitle() + ".md");
+                content.clear();
+                content.append("---\n");
             }
             //打包导出好的文章
-            ZipUtil.zip(srcPath, srcPath + ".zip");
-            FileUtil.del(srcPath);
+            ZipUtil.zip(srcPath.toString(), srcPath.toString() + ".zip");
+            FileUtil.del(srcPath.toString());
             log.info("Current time: {}, performed an article backup.", DateUtil.now());
             return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.backup.backup-success"));
         } catch (Exception e) {
@@ -182,13 +206,14 @@ public class BackupController {
      *
      * @param fileName 文件名
      * @param type     备份类型
+     *
      * @return JsonResult
      */
     @GetMapping(value = "delBackup")
     @ResponseBody
     public JsonResult delBackup(@RequestParam("fileName") String fileName,
                                 @RequestParam("type") String type) {
-        String srcPath = System.getProperties().getProperty("user.home") + "/halo/backup/" + type + "/" + fileName;
+        final String srcPath = System.getProperties().getProperty("user.home") + "/halo/backup/" + type + "/" + fileName;
         try {
             FileUtil.del(srcPath);
             return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.delete-success"));
@@ -197,38 +222,12 @@ public class BackupController {
         }
     }
 
-    /**
-     * 备份设置
-     *
-     * @param autoBackup autoBackup
-     * @return 重定向到/admin/backup
-     */
-    @PostMapping(value = "backupOption")
-    public String backupOption(@RequestParam("auto_backup") String autoBackup) throws TemplateModelException {
-        if (StrUtil.equals(autoBackup, TrueFalseEnum.TRUE.getDesc())) {
-            if (StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.AUTO_BACKUP.getProp()), TrueFalseEnum.FALSE.getDesc())) {
-                CronUtil.start();
-                log.info("The scheduled task starts successfully!");
-            }
-            optionsService.saveOption("auto_backup", TrueFalseEnum.TRUE.getDesc());
-        } else {
-            if (StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.AUTO_BACKUP.getProp()), TrueFalseEnum.TRUE.getDesc())) {
-                CronUtil.stop();
-                log.info("The scheduled task stops successfully!");
-            }
-            optionsService.saveOption("auto_backup", TrueFalseEnum.FALSE.getDesc());
-        }
-        configuration.setSharedVariable("options", optionsService.findAllOptions());
-        HaloConst.OPTIONS.clear();
-        HaloConst.OPTIONS = optionsService.findAllOptions();
-        return "redirect:/admin/backup";
-    }
-
     /**
      * 将备份发送到邮箱
      *
      * @param fileName 文件名
      * @param type     备份类型
+     *
      * @return JsonResult
      */
     @GetMapping(value = "sendToEmail")
@@ -236,9 +235,9 @@ public class BackupController {
     public JsonResult sendToEmail(@RequestParam("fileName") String fileName,
                                   @RequestParam("type") String type,
                                   HttpSession session) {
-        String srcPath = System.getProperties().getProperty("user.home") + "/halo/backup/" + type + "/" + fileName;
-        User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY);
-        if (null == user.getUserEmail() || StrUtil.equals(user.getUserEmail(), "")) {
+        final String srcPath = System.getProperties().getProperty("user.home") + "/halo/backup/" + type + "/" + fileName;
+        final User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY);
+        if (null == user.getUserEmail() || StrUtil.isEmpty(user.getUserEmail())) {
             return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.backup.no-email"));
         }
         if (StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.SMTP_EMAIL_ENABLE.getProp()), TrueFalseEnum.FALSE.getDesc())) {
@@ -262,8 +261,8 @@ public class BackupController {
 
         @Override
         public void run() {
-            File file = new File(srcPath);
-            Map content = new HashMap<>(3);
+            final File file = new File(srcPath);
+            final Map content = new HashMap<>(3);
             try {
                 content.put("fileName", file.getName());
                 content.put("createAt", HaloUtils.getCreateTime(srcPath));
diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/CategoryController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/CategoryController.java
index 46705f15b..34c577262 100755
--- a/src/main/java/cc/ryanc/halo/web/controller/admin/CategoryController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/admin/CategoryController.java
@@ -9,8 +9,11 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.ObjectError;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
 import java.util.Optional;
 
 /**
@@ -46,45 +49,45 @@ public class CategoryController {
      * 新增/修改分类目录
      *
      * @param category category对象
-     * @return 重定向到/admin/category
-     */
-    @PostMapping(value = "/save")
-    public String saveCategory(@ModelAttribute Category category) {
-
-        try {
-            categoryService.saveByCategory(category);
-        } catch (Exception e) {
-            log.error("Modify category failed: {}", e.getMessage());
-        }
-        return "redirect:/admin/category";
-    }
-
-    /**
-     * 验证分类目录路径是否已经存在
      *
-     * @param cateUrl 分类路径
      * @return JsonResult
      */
-    @GetMapping(value = "/checkUrl")
+    @PostMapping(value = "/save")
     @ResponseBody
-    public JsonResult checkCateUrlExists(@RequestParam("cateUrl") String cateUrl) {
-        Category category = categoryService.findByCateUrl(cateUrl);
-        if (null != category) {
-            return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.url-is-exists"));
+    public JsonResult saveCategory(@Valid Category category, BindingResult result) {
+        if (result.hasErrors()) {
+            for (ObjectError error : result.getAllErrors()) {
+                return new JsonResult(ResultCodeEnum.FAIL.getCode(), error.getDefaultMessage());
+            }
         }
-        return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), "");
+        final Category tempCategory = categoryService.findByCateUrl(category.getCateUrl());
+        if (null != category.getCateId()) {
+            if (null != tempCategory && !category.getCateId().equals(tempCategory.getCateId())) {
+                return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.url-is-exists"));
+            }
+        } else {
+            if (null != tempCategory) {
+                return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.url-is-exists"));
+            }
+        }
+        category = categoryService.save(category);
+        if (null == category) {
+            return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.save-failed"));
+        }
+        return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.save-success"));
     }
 
     /**
      * 处理删除分类目录的请求
      *
      * @param cateId cateId
+     *
      * @return 重定向到/admin/category
      */
     @GetMapping(value = "/remove")
     public String removeCategory(@RequestParam("cateId") Long cateId) {
         try {
-            categoryService.removeByCateId(cateId);
+            categoryService.remove(cateId);
         } catch (Exception e) {
             log.error("Delete category failed: {}", e.getMessage());
         }
@@ -96,12 +99,13 @@ public class CategoryController {
      *
      * @param cateId cateId
      * @param model  model
+     *
      * @return 模板路径admin/admin_category
      */
     @GetMapping(value = "/edit")
     public String toEditCategory(Model model, @RequestParam("cateId") Long cateId) {
-        Optional category = categoryService.findByCateId(cateId);
-        model.addAttribute("updateCategory", category.get());
+        final Optional category = categoryService.findByCateId(cateId);
+        model.addAttribute("updateCategory", category.orElse(new Category()));
         return "admin/admin_category";
     }
 }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/CommentController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/CommentController.java
index a50d22ac4..dedd8f2ca 100755
--- a/src/main/java/cc/ryanc/halo/web/controller/admin/CommentController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/admin/CommentController.java
@@ -1,283 +1,309 @@
-package cc.ryanc.halo.web.controller.admin;
-
-import cc.ryanc.halo.model.domain.Comment;
-import cc.ryanc.halo.model.domain.Post;
-import cc.ryanc.halo.model.domain.User;
-import cc.ryanc.halo.model.dto.HaloConst;
-import cc.ryanc.halo.model.dto.JsonResult;
-import cc.ryanc.halo.model.enums.*;
-import cc.ryanc.halo.service.CommentService;
-import cc.ryanc.halo.service.MailService;
-import cc.ryanc.halo.service.PostService;
-import cc.ryanc.halo.utils.OwoUtil;
-import cc.ryanc.halo.web.controller.core.BaseController;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.lang.Validator;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.crypto.SecureUtil;
-import cn.hutool.extra.servlet.ServletUtil;
-import cn.hutool.http.HtmlUtil;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.domain.Sort;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 
- *     后台评论管理控制器
- * 
- * - * @author : RYAN0UP - * @date : 2017/12/10 - */ -@Slf4j -@Controller -@RequestMapping(value = "/admin/comments") -public class CommentController extends BaseController { - - @Autowired - private CommentService commentService; - - @Autowired - private MailService mailService; - - @Autowired - private PostService postService; - - /** - * 渲染评论管理页面 - * - * @param model model - * @param status status 评论状态 - * @param page page 当前页码 - * @param size size 每页显示条数 - * @return 模板路径admin/admin_comment - */ - @GetMapping - public String comments(Model model, - @RequestParam(value = "status", defaultValue = "0") Integer status, - @RequestParam(value = "page", defaultValue = "0") Integer page, - @RequestParam(value = "size", defaultValue = "10") Integer size) { - Sort sort = new Sort(Sort.Direction.DESC, "commentDate"); - Pageable pageable = PageRequest.of(page, size, sort); - Page comments = commentService.findAllComments(status, pageable); - model.addAttribute("comments", comments); - model.addAttribute("publicCount", commentService.getCountByStatus(CommentStatusEnum.PUBLISHED.getCode())); - model.addAttribute("checkCount", commentService.getCountByStatus(CommentStatusEnum.CHECKING.getCode())); - model.addAttribute("trashCount", commentService.getCountByStatus(CommentStatusEnum.RECYCLE.getCode())); - model.addAttribute("status", status); - return "admin/admin_comment"; - } - - /** - * 将评论移到回收站 - * - * @param commentId 评论编号 - * @param status 评论状态 - * @return 重定向到/admin/comments - */ - @GetMapping(value = "/throw") - public String moveToTrash(@RequestParam("commentId") Long commentId, - @RequestParam("status") String status, - @RequestParam(value = "page", defaultValue = "0") Integer page) { - try { - commentService.updateCommentStatus(commentId, CommentStatusEnum.RECYCLE.getCode()); - } catch (Exception e) { - log.error("Delete comment failed: {}", e.getMessage()); - } - return "redirect:/admin/comments?status=" + status + "&page=" + page; - } - - /** - * 将评论改变为发布状态 - * - * @param commentId 评论编号 - * @param status 评论状态 - * @param session session - * @return 重定向到/admin/comments - */ - @GetMapping(value = "/revert") - public String moveToPublish(@RequestParam("commentId") Long commentId, - @RequestParam("status") Integer status, - HttpSession session) { - Comment comment = commentService.updateCommentStatus(commentId, CommentStatusEnum.PUBLISHED.getCode()); - Post post = comment.getPost(); - User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY); - - //判断是否启用邮件服务 - new NoticeToAuthor(comment, post, user, status).start(); - return "redirect:/admin/comments?status=" + status; - } - - /** - * 删除评论 - * - * @param commentId commentId 评论编号 - * @param status status 评论状态 - * @param page 当前页码 - * @return string 重定向到/admin/comments - */ - @GetMapping(value = "/remove") - public String moveToAway(@RequestParam("commentId") Long commentId, - @RequestParam("status") Integer status, - @RequestParam(value = "page", defaultValue = "0") Integer page) { - try { - commentService.removeByCommentId(commentId); - } catch (Exception e) { - log.error("Delete comment failed: {}", e.getMessage()); - } - return "redirect:/admin/comments?status=" + status + "&page=" + page; - } - - - /** - * 管理员回复评论 - * - * @param commentId 被回复的评论 - * @param commentContent 回复的内容 - * @return JsonResult - */ - @PostMapping(value = "/reply") - @ResponseBody - public JsonResult replyComment(@RequestParam("commentId") Long commentId, - @RequestParam("postId") Long postId, - @RequestParam("commentContent") String commentContent, - @RequestParam("userAgent") String userAgent, - HttpServletRequest request, - HttpSession session) { - try { - Post post = postService.findByPostId(postId).get(); - - //博主信息 - User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY); - - //被回复的评论 - Comment lastComment = commentService.findCommentById(commentId).get(); - - //修改被回复的评论的状态 - lastComment.setCommentStatus(CommentStatusEnum.PUBLISHED.getCode()); - commentService.saveByComment(lastComment); - - //保存评论 - Comment comment = new Comment(); - comment.setPost(post); - comment.setCommentAuthor(user.getUserDisplayName()); - comment.setCommentAuthorEmail(user.getUserEmail()); - comment.setCommentAuthorUrl(HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp())); - comment.setCommentAuthorIp(ServletUtil.getClientIP(request)); - comment.setCommentAuthorAvatarMd5(SecureUtil.md5(user.getUserEmail())); - comment.setCommentDate(DateUtil.date()); - String lastContent = "@" + lastComment.getCommentAuthor() + " "; - comment.setCommentContent(lastContent + OwoUtil.markToImg(HtmlUtil.escape(commentContent).replace("<br/>", "
"))); - comment.setCommentAgent(userAgent); - comment.setCommentParent(commentId); - comment.setCommentStatus(CommentStatusEnum.PUBLISHED.getCode()); - comment.setIsAdmin(1); - commentService.saveByComment(comment); - - //邮件通知 - new EmailToAuthor(comment, lastComment, post, user, commentContent).start(); - return new JsonResult(ResultCodeEnum.SUCCESS.getCode()); - } catch (Exception e) { - log.error("Reply to comment failed: {}", e.getMessage()); - return new JsonResult(ResultCodeEnum.FAIL.getCode()); - } - } - - /** - * 异步发送邮件回复给评论者 - */ - class EmailToAuthor extends Thread { - - private Comment comment; - private Comment lastComment; - private Post post; - private User user; - private String commentContent; - - private EmailToAuthor(Comment comment, Comment lastComment, Post post, User user, String commentContent) { - this.comment = comment; - this.lastComment = lastComment; - this.post = post; - this.user = user; - this.commentContent = commentContent; - } - - @Override - public void run() { - if (StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.SMTP_EMAIL_ENABLE.getProp()), TrueFalseEnum.TRUE.getDesc()) && StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.COMMENT_REPLY_NOTICE.getProp()), TrueFalseEnum.TRUE.getDesc())) { - if (Validator.isEmail(lastComment.getCommentAuthorEmail())) { - Map map = new HashMap<>(8); - map.put("blogTitle", HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_TITLE.getProp())); - map.put("commentAuthor", lastComment.getCommentAuthor()); - map.put("pageName", lastComment.getPost().getPostTitle()); - if (StrUtil.equals(post.getPostType(), PostTypeEnum.POST_TYPE_POST.getDesc())) { - map.put("pageUrl", HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()) + "/archives/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId()); - } else { - map.put("pageUrl", HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()) + "/p/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId()); - } - map.put("commentContent", lastComment.getCommentContent()); - map.put("replyAuthor", user.getUserDisplayName()); - map.put("replyContent", commentContent); - map.put("blogUrl", HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp())); - mailService.sendTemplateMail( - lastComment.getCommentAuthorEmail(), "您在" + HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()) + "的评论有了新回复", map, "common/mail_template/mail_reply.ftl"); - } - } - } - } - - /** - * 异步通知评论者审核通过 - */ - class NoticeToAuthor extends Thread { - - private Comment comment; - private Post post; - private User user; - private Integer status; - - private NoticeToAuthor(Comment comment, Post post, User user, Integer status) { - this.comment = comment; - this.post = post; - this.user = user; - this.status = status; - } - - @Override - public void run() { - if (StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.SMTP_EMAIL_ENABLE.getProp()), TrueFalseEnum.TRUE.getDesc()) && StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.COMMENT_REPLY_NOTICE.getProp()), TrueFalseEnum.TRUE.getDesc())) { - try { - if (status == 1 && Validator.isEmail(comment.getCommentAuthorEmail())) { - Map map = new HashMap<>(6); - if (StrUtil.equals(post.getPostType(), PostTypeEnum.POST_TYPE_POST.getDesc())) { - map.put("pageUrl", HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()) + "/archives/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId()); - } else { - map.put("pageUrl", HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()) + "/p/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId()); - } - map.put("pageName", post.getPostTitle()); - map.put("commentContent", comment.getCommentContent()); - map.put("blogUrl", HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp())); - map.put("blogTitle", HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_TITLE.getProp())); - map.put("author", user.getUserDisplayName()); - mailService.sendTemplateMail( - comment.getCommentAuthorEmail(), - "您在" + HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()) + "的评论已审核通过!", map, "common/mail_template/mail_passed.ftl"); - } - } catch (Exception e) { - log.error("Mail server not configured: {}", e.getMessage()); - } - } - } - } -} +package cc.ryanc.halo.web.controller.admin; + +import cc.ryanc.halo.model.domain.Comment; +import cc.ryanc.halo.model.domain.Post; +import cc.ryanc.halo.model.domain.User; +import cc.ryanc.halo.model.dto.HaloConst; +import cc.ryanc.halo.model.dto.JsonResult; +import cc.ryanc.halo.model.enums.*; +import cc.ryanc.halo.service.CommentService; +import cc.ryanc.halo.service.MailService; +import cc.ryanc.halo.service.PostService; +import cc.ryanc.halo.utils.OwoUtil; +import cc.ryanc.halo.web.controller.core.BaseController; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Validator; +import cn.hutool.core.text.StrBuilder; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.extra.servlet.ServletUtil; +import cn.hutool.http.HtmlUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +/** + *
+ *     后台评论管理控制器
+ * 
+ * + * @author : RYAN0UP + * @date : 2017/12/10 + */ +@Slf4j +@Controller +@RequestMapping(value = "/admin/comments") +public class CommentController extends BaseController { + + @Autowired + private CommentService commentService; + + @Autowired + private MailService mailService; + + @Autowired + private PostService postService; + + /** + * 渲染评论管理页面 + * + * @param model model + * @param status status 评论状态 + * @param page page 当前页码 + * @param size size 每页显示条数 + * + * @return 模板路径admin/admin_comment + */ + @GetMapping + public String comments(Model model, + @RequestParam(value = "status", defaultValue = "0") Integer status, + @RequestParam(value = "page", defaultValue = "0") Integer page, + @RequestParam(value = "size", defaultValue = "10") Integer size) { + final Sort sort = new Sort(Sort.Direction.DESC, "commentDate"); + final Pageable pageable = PageRequest.of(page, size, sort); + final Page comments = commentService.findAll(status, pageable); + model.addAttribute("comments", comments); + model.addAttribute("publicCount", commentService.getCountByStatus(CommentStatusEnum.PUBLISHED.getCode())); + model.addAttribute("checkCount", commentService.getCountByStatus(CommentStatusEnum.CHECKING.getCode())); + model.addAttribute("trashCount", commentService.getCountByStatus(CommentStatusEnum.RECYCLE.getCode())); + model.addAttribute("status", status); + return "admin/admin_comment"; + } + + /** + * 将评论移到回收站 + * + * @param commentId 评论编号 + * @param status 评论状态 + * + * @return 重定向到/admin/comments + */ + @GetMapping(value = "/throw") + public String moveToTrash(@RequestParam("commentId") Long commentId, + @RequestParam("status") String status, + @RequestParam(value = "page", defaultValue = "0") Integer page) { + try { + commentService.updateCommentStatus(commentId, CommentStatusEnum.RECYCLE.getCode()); + } catch (Exception e) { + log.error("Delete comment failed: {}", e.getMessage()); + } + return "redirect:/admin/comments?status=" + status + "&page=" + page; + } + + /** + * 将评论改变为发布状态 + * + * @param commentId 评论编号 + * @param status 评论状态 + * @param session session + * + * @return 重定向到/admin/comments + */ + @GetMapping(value = "/revert") + public String moveToPublish(@RequestParam("commentId") Long commentId, + @RequestParam("status") Integer status, + HttpSession session) { + final Comment comment = commentService.updateCommentStatus(commentId, CommentStatusEnum.PUBLISHED.getCode()); + final Post post = comment.getPost(); + final User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY); + + //判断是否启用邮件服务 + new NoticeToAuthor(comment, post, user, status).start(); + return "redirect:/admin/comments?status=" + status; + } + + /** + * 删除评论 + * + * @param commentId commentId 评论编号 + * @param status status 评论状态 + * @param page 当前页码 + * + * @return string 重定向到/admin/comments + */ + @GetMapping(value = "/remove") + public String moveToAway(@RequestParam("commentId") Long commentId, + @RequestParam("status") Integer status, + @RequestParam(value = "page", defaultValue = "0") Integer page) { + try { + commentService.remove(commentId); + } catch (Exception e) { + log.error("Delete comment failed: {}", e.getMessage()); + } + return "redirect:/admin/comments?status=" + status + "&page=" + page; + } + + + /** + * 管理员回复评论 + * + * @param commentId 被回复的评论 + * @param commentContent 回复的内容 + * + * @return JsonResult + */ + @PostMapping(value = "/reply") + @ResponseBody + public JsonResult replyComment(@RequestParam("commentId") Long commentId, + @RequestParam("postId") Long postId, + @RequestParam("commentContent") String commentContent, + @RequestParam("userAgent") String userAgent, + HttpServletRequest request, + HttpSession session) { + try { + final Post post = postService.findByPostId(postId).orElse(new Post()); + + //博主信息 + final User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY); + + //被回复的评论 + final Comment lastComment = commentService.findCommentById(commentId).orElse(new Comment()); + + //修改被回复的评论的状态 + lastComment.setCommentStatus(CommentStatusEnum.PUBLISHED.getCode()); + commentService.save(lastComment); + + //保存评论 + final Comment comment = new Comment(); + comment.setPost(post); + comment.setCommentAuthor(user.getUserDisplayName()); + comment.setCommentAuthorEmail(user.getUserEmail()); + comment.setCommentAuthorUrl(HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp())); + comment.setCommentAuthorIp(ServletUtil.getClientIP(request)); + comment.setCommentAuthorAvatarMd5(SecureUtil.md5(user.getUserEmail())); + + final StrBuilder buildContent = new StrBuilder("@"); + buildContent.append(lastComment.getCommentAuthor()); + buildContent.append(" "); + buildContent.append(OwoUtil.markToImg(HtmlUtil.escape(commentContent).replace("<br/>", "
"))); + + comment.setCommentContent(buildContent.toString()); + comment.setCommentAgent(userAgent); + comment.setCommentParent(commentId); + comment.setCommentStatus(CommentStatusEnum.PUBLISHED.getCode()); + comment.setIsAdmin(1); + commentService.save(comment); + + //邮件通知 + new EmailToAuthor(comment, lastComment, post, user, commentContent).start(); + return new JsonResult(ResultCodeEnum.SUCCESS.getCode()); + } catch (Exception e) { + log.error("Reply to comment failed: {}", e.getMessage()); + return new JsonResult(ResultCodeEnum.FAIL.getCode()); + } + } + + /** + * 异步发送邮件回复给评论者 + */ + class EmailToAuthor extends Thread { + + private Comment comment; + private Comment lastComment; + private Post post; + private User user; + private String commentContent; + + private EmailToAuthor(Comment comment, Comment lastComment, Post post, User user, String commentContent) { + this.comment = comment; + this.lastComment = lastComment; + this.post = post; + this.user = user; + this.commentContent = commentContent; + } + + @Override + public void run() { + if (StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.SMTP_EMAIL_ENABLE.getProp()), TrueFalseEnum.TRUE.getDesc()) && StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.COMMENT_REPLY_NOTICE.getProp()), TrueFalseEnum.TRUE.getDesc())) { + if (Validator.isEmail(lastComment.getCommentAuthorEmail())) { + final Map map = new HashMap<>(8); + map.put("blogTitle", HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_TITLE.getProp())); + map.put("commentAuthor", lastComment.getCommentAuthor()); + map.put("pageName", lastComment.getPost().getPostTitle()); + + final StrBuilder pageUrl = new StrBuilder(HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp())); + if (StrUtil.equals(post.getPostType(), PostTypeEnum.POST_TYPE_POST.getDesc())) { + pageUrl.append("/archives/"); + } else { + pageUrl.append("/p/"); + } + pageUrl.append(post.getPostUrl()); + pageUrl.append("#comment-id-"); + pageUrl.append(comment.getCommentId()); + + map.put("pageUrl", pageUrl.toString()); + map.put("commentContent", lastComment.getCommentContent()); + map.put("replyAuthor", user.getUserDisplayName()); + map.put("replyContent", commentContent); + map.put("blogUrl", HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp())); + mailService.sendTemplateMail( + lastComment.getCommentAuthorEmail(), "您在" + HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()) + "的评论有了新回复", map, "common/mail_template/mail_reply.ftl"); + } + } + } + } + + /** + * 异步通知评论者审核通过 + */ + class NoticeToAuthor extends Thread { + + private Comment comment; + private Post post; + private User user; + private Integer status; + + private NoticeToAuthor(Comment comment, Post post, User user, Integer status) { + this.comment = comment; + this.post = post; + this.user = user; + this.status = status; + } + + @Override + public void run() { + if (StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.SMTP_EMAIL_ENABLE.getProp()), TrueFalseEnum.TRUE.getDesc()) && StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.COMMENT_REPLY_NOTICE.getProp()), TrueFalseEnum.TRUE.getDesc())) { + try { + if (status == 1 && Validator.isEmail(comment.getCommentAuthorEmail())) { + final Map map = new HashMap<>(6); + + final StrBuilder pageUrl = new StrBuilder(HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp())); + if (StrUtil.equals(post.getPostType(), PostTypeEnum.POST_TYPE_POST.getDesc())) { + pageUrl.append("/archives/"); + } else { + pageUrl.append("/p/"); + } + pageUrl.append(post.getPostUrl()); + pageUrl.append("#comment-id-"); + pageUrl.append(comment.getCommentId()); + + map.put("pageUrl", pageUrl.toString()); + map.put("pageName", post.getPostTitle()); + map.put("commentContent", comment.getCommentContent()); + map.put("blogUrl", HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp())); + map.put("blogTitle", HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_TITLE.getProp())); + map.put("author", user.getUserDisplayName()); + mailService.sendTemplateMail( + comment.getCommentAuthorEmail(), + "您在" + HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()) + "的评论已审核通过!", map, "common/mail_template/mail_passed.ftl"); + } + } catch (Exception e) { + log.error("Mail server not configured: {}", e.getMessage()); + } + } + } + } +} diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/MenuController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/MenuController.java index d9a6a4b2d..793981e0e 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/admin/MenuController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/admin/MenuController.java @@ -1,13 +1,19 @@ package cc.ryanc.halo.web.controller.admin; import cc.ryanc.halo.model.domain.Menu; +import cc.ryanc.halo.model.dto.JsonResult; +import cc.ryanc.halo.model.enums.ResultCodeEnum; import cc.ryanc.halo.service.MenuService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.validation.ObjectError; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + /** *
  *     后台菜单管理控制器
@@ -28,6 +34,7 @@ public class MenuController {
      * 渲染菜单设置页面
      *
      * @param model model
+     *
      * @return 模板路径/admin/admin_menu
      */
     @GetMapping
@@ -39,16 +46,23 @@ public class MenuController {
      * 新增/修改菜单
      *
      * @param menu menu
+     *
      * @return 重定向到/admin/menus
      */
     @PostMapping(value = "/save")
-    public String saveMenu(@ModelAttribute Menu menu) {
-        try {
-            menuService.saveByMenu(menu);
-        } catch (Exception e) {
-            log.error("Saving menu failed: {}" + e.getMessage());
+    @ResponseBody
+    public JsonResult saveMenu(@Valid Menu menu, BindingResult result) {
+        if (result.hasErrors()) {
+            for (ObjectError error : result.getAllErrors()) {
+                return new JsonResult(ResultCodeEnum.FAIL.getCode(), error.getDefaultMessage());
+            }
+        }
+        menu = menuService.save(menu);
+        if (null != menu) {
+            return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), "菜单保存成功!");
+        } else {
+            return new JsonResult(ResultCodeEnum.FAIL.getCode(), "菜单保存成功!");
         }
-        return "redirect:/admin/menus";
     }
 
     /**
@@ -56,11 +70,12 @@ public class MenuController {
      *
      * @param menuId 菜单编号
      * @param model  model
+     *
      * @return 模板路径/admin/admin_menu
      */
     @GetMapping(value = "/edit")
     public String updateMenu(@RequestParam("menuId") Long menuId, Model model) {
-        Menu menu = menuService.findByMenuId(menuId).get();
+        final Menu menu = menuService.findByMenuId(menuId).orElse(new Menu());
         model.addAttribute("updateMenu", menu);
         return "/admin/admin_menu";
     }
@@ -69,12 +84,13 @@ public class MenuController {
      * 删除菜单
      *
      * @param menuId 菜单编号
+     *
      * @return 重定向到/admin/menus
      */
     @GetMapping(value = "/remove")
     public String removeMenu(@RequestParam("menuId") Long menuId) {
         try {
-            menuService.removeByMenuId(menuId);
+            menuService.remove(menuId);
         } catch (Exception e) {
             log.error("Deleting menu failed: {}", e.getMessage());
         }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/OptionController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/OptionController.java
index db0f94acf..a4ac70c04 100755
--- a/src/main/java/cc/ryanc/halo/web/controller/admin/OptionController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/admin/OptionController.java
@@ -10,7 +10,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.i18n.SessionLocaleResolver;
 
+import javax.servlet.http.HttpSession;
 import java.util.Map;
 
 /**
@@ -49,17 +51,19 @@ public class OptionController {
      * 保存设置选项
      *
      * @param options options
+     *
      * @return JsonResult
      */
     @PostMapping(value = "/save")
     @ResponseBody
-    public JsonResult saveOptions(@RequestParam Map options) {
+    public JsonResult saveOptions(@RequestParam Map options, HttpSession session) {
         try {
             optionsService.saveOptions(options);
             //刷新options
             configuration.setSharedVariable("options", optionsService.findAllOptions());
             HaloConst.OPTIONS.clear();
             HaloConst.OPTIONS = optionsService.findAllOptions();
+            session.removeAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME);
             log.info("List of saved options: " + options);
             return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.save-success"));
         } catch (Exception e) {
diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/PageController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/PageController.java
index 59df99b29..7703b724f 100755
--- a/src/main/java/cc/ryanc/halo/web/controller/admin/PageController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/admin/PageController.java
@@ -1,282 +1,318 @@
-package cc.ryanc.halo.web.controller.admin;
-
-import cc.ryanc.halo.model.domain.*;
-import cc.ryanc.halo.model.dto.HaloConst;
-import cc.ryanc.halo.model.dto.JsonResult;
-import cc.ryanc.halo.model.dto.LogsRecord;
-import cc.ryanc.halo.model.enums.BlogPropertiesEnum;
-import cc.ryanc.halo.model.enums.PostTypeEnum;
-import cc.ryanc.halo.model.enums.ResultCodeEnum;
-import cc.ryanc.halo.service.GalleryService;
-import cc.ryanc.halo.service.LinkService;
-import cc.ryanc.halo.service.LogsService;
-import cc.ryanc.halo.service.PostService;
-import cc.ryanc.halo.utils.HaloUtils;
-import cc.ryanc.halo.utils.LocaleMessageUtil;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.RandomUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.extra.servlet.ServletUtil;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.domain.Sort;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import java.util.List;
-import java.util.Optional;
-
-/**
- * 
- *     后台页面管理控制器
- * 
- * - * @author : RYAN0UP - * @date : 2017/12/10 - */ -@Slf4j -@Controller -@RequestMapping(value = "/admin/page") -public class PageController { - - @Autowired - LocaleMessageUtil localeMessageUtil; - @Autowired - private LinkService linkService; - @Autowired - private GalleryService galleryService; - @Autowired - private PostService postService; - @Autowired - private LogsService logsService; - @Autowired - private HttpServletRequest request; - - /** - * 页面管理页面 - * - * @param model model - * @return 模板路径admin/admin_page - */ - @GetMapping - public String pages(Model model) { - List posts = postService.findAllPosts(PostTypeEnum.POST_TYPE_PAGE.getDesc()); - model.addAttribute("pages", posts); - return "admin/admin_page"; - } - - /** - * 获取友情链接列表并渲染页面 - * - * @return 模板路径admin/admin_page_link - */ - @GetMapping(value = "/links") - public String links() { - return "admin/admin_page_link"; - } - - /** - * 跳转到修改页面 - * - * @param model model - * @param linkId linkId 友情链接编号 - * @return String 模板路径admin/admin_page_link - */ - @GetMapping(value = "/links/edit") - public String toEditLink(Model model, @RequestParam("linkId") Long linkId) { - Optional link = linkService.findByLinkId(linkId); - model.addAttribute("updateLink", link.get()); - return "admin/admin_page_link"; - } - - /** - * 处理添加/修改友链的请求并渲染页面 - * - * @param link Link实体 - * @return 重定向到/admin/page/links - */ - @PostMapping(value = "/links/save") - public String saveLink(@ModelAttribute Link link) { - try { - linkService.saveByLink(link); - } catch (Exception e) { - log.error("Save/modify friendship link failed: {}", e.getMessage()); - } - return "redirect:/admin/page/links"; - } - - /** - * 处理删除友情链接的请求并重定向 - * - * @param linkId 友情链接编号 - * @return 重定向到/admin/page/links - */ - @GetMapping(value = "/links/remove") - public String removeLink(@RequestParam("linkId") Long linkId) { - try { - linkService.removeByLinkId(linkId); - } catch (Exception e) { - log.error("Deleting a friendship link failed: {}", e.getMessage()); - } - return "redirect:/admin/page/links"; - } - - /** - * 图库管理 - * - * @param model model - * @param page 当前页码 - * @param size 每页显示的条数 - * @return 模板路径admin/admin_page_gallery - */ - @GetMapping(value = "/galleries") - public String gallery(Model model, - @RequestParam(value = "page", defaultValue = "0") Integer page, - @RequestParam(value = "size", defaultValue = "18") Integer size) { - Sort sort = new Sort(Sort.Direction.DESC, "galleryId"); - Pageable pageable = PageRequest.of(page, size, sort); - Page galleries = galleryService.findAllGalleries(pageable); - model.addAttribute("galleries", galleries); - return "admin/admin_page_gallery"; - } - - /** - * 保存图片 - * - * @param gallery gallery - * @return 重定向到/admin/page/gallery - */ - @PostMapping(value = "/gallery/save") - public String saveGallery(@ModelAttribute Gallery gallery) { - try { - if (StrUtil.isEmpty(gallery.getGalleryThumbnailUrl())) { - gallery.setGalleryThumbnailUrl(gallery.getGalleryUrl()); - } - galleryService.saveByGallery(gallery); - } catch (Exception e) { - e.printStackTrace(); - } - return "redirect:/admin/page/galleries"; - } - - /** - * 处理获取图片详情的请求 - * - * @param model model - * @param galleryId 图片编号 - * @return 模板路径admin/widget/_gallery-detail - */ - @GetMapping(value = "/gallery") - public String gallery(Model model, @RequestParam("galleryId") Long galleryId) { - Optional gallery = galleryService.findByGalleryId(galleryId); - model.addAttribute("gallery", gallery.get()); - return "admin/widget/_gallery-detail"; - } - - /** - * 删除图库中的图片 - * - * @param galleryId 图片编号 - * @return JsonResult - */ - @GetMapping(value = "/gallery/remove") - @ResponseBody - public JsonResult removeGallery(@RequestParam("galleryId") Long galleryId) { - try { - galleryService.removeByGalleryId(galleryId); - } catch (Exception e) { - log.error("Failed to delete image: {}", e.getMessage()); - return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.delete-failed")); - } - return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.delete-success")); - } - - /** - * 跳转到新建页面 - * - * @param model model - * @return 模板路径admin/admin_page_md_editor - */ - @GetMapping(value = "/new") - public String newPage(Model model) { - List customTpls = HaloUtils.getCustomTpl(HaloConst.OPTIONS.get(BlogPropertiesEnum.THEME.getProp())); - model.addAttribute("customTpls",customTpls); - return "admin/admin_page_md_editor"; - } - - /** - * 发表页面 - * - * @param post post - * @param session session - */ - @PostMapping(value = "/new/push") - @ResponseBody - public JsonResult pushPage(@ModelAttribute Post post, HttpSession session) { - String msg = localeMessageUtil.getMessage("code.admin.common.save-success"); - try { - post.setPostDate(DateUtil.date()); - //发表用户 - User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY); - post.setUser(user); - post.setPostType(PostTypeEnum.POST_TYPE_PAGE.getDesc()); - if (null != post.getPostId()) { - post.setPostViews(postService.findByPostId(post.getPostId()).get().getPostViews()); - post.setPostDate(postService.findByPostId(post.getPostId()).get().getPostDate()); - post.setPostUpdate(DateUtil.date()); - msg = localeMessageUtil.getMessage("code.admin.common.update-success"); - } else { - post.setPostDate(DateUtil.date()); - post.setPostUpdate(DateUtil.date()); - } - //当没有选择文章缩略图的时候,自动分配一张内置的缩略图 - if (StrUtil.equals(post.getPostThumbnail(), BlogPropertiesEnum.DEFAULT_THUMBNAIL.getProp())) { - post.setPostThumbnail("/static/images/thumbnail/thumbnail-" + RandomUtil.randomInt(1, 10) + ".jpg"); - } - postService.saveByPost(post); - logsService.saveByLogs(new Logs(LogsRecord.PUSH_PAGE, post.getPostTitle(), ServletUtil.getClientIP(request), DateUtil.date())); - return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), msg); - } catch (Exception e) { - log.error("Save page failed: {}", e.getMessage()); - return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.save-failed")); - } - } - - /** - * 跳转到修改页面 - * - * @param pageId 页面编号 - * @param model model - * @return admin/admin_page_md_editor - */ - @GetMapping(value = "/edit") - public String editPage(@RequestParam("pageId") Long pageId, Model model) { - Optional post = postService.findByPostId(pageId); - List customTpls = HaloUtils.getCustomTpl(HaloConst.OPTIONS.get(BlogPropertiesEnum.THEME.getProp())); - model.addAttribute("post", post.get()); - model.addAttribute("customTpls",customTpls); - return "admin/admin_page_md_editor"; - } - - /** - * 检查该路径是否已经存在 - * - * @param postUrl postUrl - * @return JsonResult - */ - @GetMapping(value = "/checkUrl") - @ResponseBody - public JsonResult checkUrlExists(@RequestParam("postUrl") String postUrl) { - Post post = postService.findByPostUrl(postUrl, PostTypeEnum.POST_TYPE_PAGE.getDesc()); - if (null != post) { - return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.url-is-exists")); - } - return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), ""); - } -} +package cc.ryanc.halo.web.controller.admin; + +import cc.ryanc.halo.model.domain.Gallery; +import cc.ryanc.halo.model.domain.Link; +import cc.ryanc.halo.model.domain.Post; +import cc.ryanc.halo.model.domain.User; +import cc.ryanc.halo.model.dto.HaloConst; +import cc.ryanc.halo.model.dto.JsonResult; +import cc.ryanc.halo.model.dto.LogsRecord; +import cc.ryanc.halo.model.enums.BlogPropertiesEnum; +import cc.ryanc.halo.model.enums.PostTypeEnum; +import cc.ryanc.halo.model.enums.ResultCodeEnum; +import cc.ryanc.halo.service.GalleryService; +import cc.ryanc.halo.service.LinkService; +import cc.ryanc.halo.service.LogsService; +import cc.ryanc.halo.service.PostService; +import cc.ryanc.halo.utils.HaloUtils; +import cc.ryanc.halo.utils.LocaleMessageUtil; +import cc.ryanc.halo.utils.MarkdownUtils; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.propertyeditors.CustomDateEditor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.validation.ObjectError; +import org.springframework.web.bind.ServletRequestDataBinder; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import javax.validation.Valid; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + *
+ *     后台页面管理控制器
+ * 
+ * + * @author : RYAN0UP + * @date : 2017/12/10 + */ +@Slf4j +@Controller +@RequestMapping(value = "/admin/page") +public class PageController { + + @Autowired + LocaleMessageUtil localeMessageUtil; + + @Autowired + private LinkService linkService; + + @Autowired + private GalleryService galleryService; + + @Autowired + private PostService postService; + + @Autowired + private LogsService logsService; + + @Autowired + private HttpServletRequest request; + + /** + * 页面管理页面 + * + * @param model model + * + * @return 模板路径admin/admin_page + */ + @GetMapping + public String pages(Model model) { + final List posts = postService.findAll(PostTypeEnum.POST_TYPE_PAGE.getDesc()); + model.addAttribute("pages", posts); + return "admin/admin_page"; + } + + /** + * 获取友情链接列表并渲染页面 + * + * @return 模板路径admin/admin_page_link + */ + @GetMapping(value = "/links") + public String links() { + return "admin/admin_page_link"; + } + + /** + * 跳转到修改页面 + * + * @param model model + * @param linkId linkId 友情链接编号 + * + * @return String 模板路径admin/admin_page_link + */ + @GetMapping(value = "/links/edit") + public String toEditLink(Model model, @RequestParam("linkId") Long linkId) { + final Optional link = linkService.findByLinkId(linkId); + model.addAttribute("updateLink", link.orElse(new Link())); + return "admin/admin_page_link"; + } + + /** + * 处理添加/修改友链的请求并渲染页面 + * + * @param link Link实体 + * + * @return JsonResult + */ + @PostMapping(value = "/links/save") + @ResponseBody + public JsonResult saveLink(@Valid Link link, BindingResult result) { + if (result.hasErrors()) { + for (ObjectError error : result.getAllErrors()) { + return new JsonResult(ResultCodeEnum.FAIL.getCode(), error.getDefaultMessage()); + } + } + link = linkService.save(link); + if (null == link) { + return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.save-failed")); + } + return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.save-success")); + } + + /** + * 处理删除友情链接的请求并重定向 + * + * @param linkId 友情链接编号 + * + * @return 重定向到/admin/page/links + */ + @GetMapping(value = "/links/remove") + public String removeLink(@RequestParam("linkId") Long linkId) { + try { + linkService.remove(linkId); + } catch (Exception e) { + log.error("Deleting a friendship link failed: {}", e.getMessage()); + } + return "redirect:/admin/page/links"; + } + + /** + * 图库管理 + * + * @param model model + * @param page 当前页码 + * @param size 每页显示的条数 + * + * @return 模板路径admin/admin_page_gallery + */ + @GetMapping(value = "/galleries") + public String gallery(Model model, + @RequestParam(value = "page", defaultValue = "0") Integer page, + @RequestParam(value = "size", defaultValue = "18") Integer size) { + final Sort sort = new Sort(Sort.Direction.DESC, "galleryId"); + final Pageable pageable = PageRequest.of(page, size, sort); + final Page galleries = galleryService.findAll(pageable); + model.addAttribute("galleries", galleries); + return "admin/admin_page_gallery"; + } + + /** + * 保存图片 + * + * @param gallery gallery + * + * @return 重定向到/admin/page/gallery + */ + @PostMapping(value = "/gallery/save") + public String saveGallery(@ModelAttribute Gallery gallery) { + try { + if (StrUtil.isEmpty(gallery.getGalleryThumbnailUrl())) { + gallery.setGalleryThumbnailUrl(gallery.getGalleryUrl()); + } + galleryService.save(gallery); + } catch (Exception e) { + e.printStackTrace(); + } + return "redirect:/admin/page/galleries"; + } + + /** + * 处理获取图片详情的请求 + * + * @param model model + * @param galleryId 图片编号 + * + * @return 模板路径admin/widget/_gallery-detail + */ + @GetMapping(value = "/gallery") + public String gallery(Model model, @RequestParam("galleryId") Long galleryId) { + final Optional gallery = galleryService.findByGalleryId(galleryId); + model.addAttribute("gallery", gallery.orElse(new Gallery())); + return "admin/widget/_gallery-detail"; + } + + /** + * 删除图库中的图片 + * + * @param galleryId 图片编号 + * + * @return JsonResult + */ + @GetMapping(value = "/gallery/remove") + @ResponseBody + public JsonResult removeGallery(@RequestParam("galleryId") Long galleryId) { + try { + galleryService.remove(galleryId); + } catch (Exception e) { + log.error("Failed to delete image: {}", e.getMessage()); + return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.delete-failed")); + } + return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.delete-success")); + } + + /** + * 跳转到新建页面 + * + * @param model model + * + * @return 模板路径admin/admin_page_md_editor + */ + @GetMapping(value = "/new") + public String newPage(Model model) { + final List customTpls = HaloUtils.getCustomTpl(HaloConst.OPTIONS.get(BlogPropertiesEnum.THEME.getProp())); + model.addAttribute("customTpls", customTpls); + return "admin/admin_page_md_editor"; + } + + /** + * 发表页面 + * + * @param post post + * @param session session + */ + @PostMapping(value = "/new/push") + @ResponseBody + public JsonResult pushPage(@ModelAttribute Post post, HttpSession session) { + String msg = localeMessageUtil.getMessage("code.admin.common.save-success"); + try { + //发表用户 + final User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY); + post.setUser(user); + post.setPostType(PostTypeEnum.POST_TYPE_PAGE.getDesc()); + if (null != post.getPostId()) { + final Post oldPost = postService.findByPostId(post.getPostId()).get(); + if (null == post.getPostDate()) { + post.setPostDate(DateUtil.date()); + } + post.setPostViews(oldPost.getPostViews()); + msg = localeMessageUtil.getMessage("code.admin.common.update-success"); + } + post.setPostContent(MarkdownUtils.renderMarkdown(post.getPostContentMd())); + //当没有选择文章缩略图的时候,自动分配一张内置的缩略图 + if (StrUtil.equals(post.getPostThumbnail(), BlogPropertiesEnum.DEFAULT_THUMBNAIL.getProp())) { + post.setPostThumbnail("/static/halo-frontend/images/thumbnail/thumbnail-" + RandomUtil.randomInt(1, 10) + ".jpg"); + } + postService.save(post); + logsService.save(LogsRecord.PUSH_PAGE, post.getPostTitle(), request); + return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), msg); + } catch (Exception e) { + log.error("Save page failed: {}", e.getMessage()); + return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.save-failed")); + } + } + + /** + * 跳转到修改页面 + * + * @param pageId 页面编号 + * @param model model + * + * @return admin/admin_page_md_editor + */ + @GetMapping(value = "/edit") + public String editPage(@RequestParam("pageId") Long pageId, Model model) { + final Optional post = postService.findByPostId(pageId); + final List customTpls = HaloUtils.getCustomTpl(HaloConst.OPTIONS.get(BlogPropertiesEnum.THEME.getProp())); + model.addAttribute("post", post.orElse(new Post())); + model.addAttribute("customTpls", customTpls); + return "admin/admin_page_md_editor"; + } + + /** + * 检查该路径是否已经存在 + * + * @param postUrl postUrl + * + * @return JsonResult + */ + @GetMapping(value = "/checkUrl") + @ResponseBody + public JsonResult checkUrlExists(@RequestParam("postUrl") String postUrl) { + final Post post = postService.findByPostUrl(postUrl, PostTypeEnum.POST_TYPE_PAGE.getDesc()); + if (null != post) { + return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.url-is-exists")); + } + return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), ""); + } + + @InitBinder + public void initBinder(ServletRequestDataBinder binder) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true)); + } +} diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/PostController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/PostController.java index f3aa541a6..be28538ca 100755 --- a/src/main/java/cc/ryanc/halo/web/controller/admin/PostController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/admin/PostController.java @@ -1,6 +1,7 @@ package cc.ryanc.halo.web.controller.admin; -import cc.ryanc.halo.model.domain.*; +import cc.ryanc.halo.model.domain.Post; +import cc.ryanc.halo.model.domain.User; import cc.ryanc.halo.model.dto.HaloConst; import cc.ryanc.halo.model.dto.JsonResult; import cc.ryanc.halo.model.dto.LogsRecord; @@ -8,30 +9,32 @@ import cc.ryanc.halo.model.enums.BlogPropertiesEnum; import cc.ryanc.halo.model.enums.PostStatusEnum; import cc.ryanc.halo.model.enums.PostTypeEnum; import cc.ryanc.halo.model.enums.ResultCodeEnum; -import cc.ryanc.halo.service.CategoryService; import cc.ryanc.halo.service.LogsService; import cc.ryanc.halo.service.PostService; -import cc.ryanc.halo.service.TagService; import cc.ryanc.halo.utils.HaloUtils; import cc.ryanc.halo.utils.LocaleMessageUtil; +import cc.ryanc.halo.utils.MarkdownUtils; import cc.ryanc.halo.web.controller.core.BaseController; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; -import cn.hutool.extra.servlet.ServletUtil; -import cn.hutool.http.HtmlUtil; +import cn.hutool.crypto.SecureUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.web.bind.ServletRequestDataBinder; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; import java.util.Optional; @@ -51,12 +54,6 @@ public class PostController extends BaseController { @Autowired private PostService postService; - @Autowired - private CategoryService categoryService; - - @Autowired - private TagService tagService; - @Autowired private LogsService logsService; @@ -95,9 +92,9 @@ public class PostController extends BaseController { @RequestParam(value = "status", defaultValue = "0") Integer status, @RequestParam(value = "page", defaultValue = "0") Integer page, @RequestParam(value = "size", defaultValue = "10") Integer size) { - Sort sort = new Sort(Sort.Direction.DESC, "postDate"); - Pageable pageable = PageRequest.of(page, size, sort); - Page posts = postService.findPostByStatus(status, PostTypeEnum.POST_TYPE_POST.getDesc(), pageable); + final Sort sort = new Sort(Sort.Direction.DESC, "postDate"); + final Pageable pageable = PageRequest.of(page, size, sort); + final Page posts = postService.findPostByStatus(status, PostTypeEnum.POST_TYPE_POST.getDesc(), pageable); model.addAttribute("posts", posts); model.addAttribute("publishCount", postService.getCountByStatus(PostStatusEnum.PUBLISHED.getCode())); model.addAttribute("draftCount", postService.getCountByStatus(PostStatusEnum.DRAFT.getCode())); @@ -122,9 +119,9 @@ public class PostController extends BaseController { @RequestParam(value = "size", defaultValue = "10") Integer size) { try { //排序规则 - Sort sort = new Sort(Sort.Direction.DESC, "postId"); - Pageable pageable = PageRequest.of(page, size, sort); - model.addAttribute("posts", postService.searchPosts(keyword, pageable)); + final Sort sort = new Sort(Sort.Direction.DESC, "postId"); + final Pageable pageable = PageRequest.of(page, size, sort); + model.addAttribute("posts", postService.searchPosts(keyword, PostTypeEnum.POST_TYPE_POST.getDesc(), PostStatusEnum.PUBLISHED.getCode(), pageable)); } catch (Exception e) { log.error("未知错误:{}", e.getMessage()); } @@ -140,8 +137,8 @@ public class PostController extends BaseController { */ @GetMapping(value = "/view") public String viewPost(@RequestParam("postId") Long postId, Model model) { - Optional post = postService.findByPostId(postId); - model.addAttribute("post", post.get()); + final Optional post = postService.findByPostId(postId); + model.addAttribute("post", post.orElse(new Post())); return this.render("post"); } @@ -150,70 +147,100 @@ public class PostController extends BaseController { * * @return 模板路径admin/admin_editor */ - @GetMapping(value = "/new") - public String newPost() { - return "admin/admin_post_md_editor"; + @GetMapping(value = "/write") + public String writePost() { + return "admin/admin_post_new"; + } + + /** + * 跳转到编辑文章页面 + * + * @param postId 文章编号 + * @param model model + * @return 模板路径admin/admin_editor + */ + @GetMapping(value = "/edit") + public String editPost(@RequestParam("postId") Long postId, Model model) { + final Optional post = postService.findByPostId(postId); + model.addAttribute("post", post.orElse(new Post())); + return "admin/admin_post_edit"; } /** * 添加文章 * - * @param post Post实体 + * @param post post * @param cateList 分类列表 - * @param tagList 标签列表 + * @param tagList 标签 * @param session session */ - @PostMapping(value = "/new/push") + @PostMapping(value = "/save") @ResponseBody - public JsonResult pushPost(@ModelAttribute Post post, @RequestParam("cateList") List cateList, @RequestParam("tagList") String tagList, HttpSession session) { - User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY); - String msg = localeMessageUtil.getMessage("code.admin.common.save-success"); + public JsonResult save(@ModelAttribute Post post, + @RequestParam("cateList") List cateList, + @RequestParam("tagList") String tagList, + HttpSession session) { + final User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY); try { - //提取摘要 - int postSummary = 50; - if (StrUtil.isNotEmpty(HaloConst.OPTIONS.get(BlogPropertiesEnum.POST_SUMMARY.getProp()))) { - postSummary = Integer.parseInt(HaloConst.OPTIONS.get(BlogPropertiesEnum.POST_SUMMARY.getProp())); - } - //文章摘要 - String summaryText = StrUtil.trim(HtmlUtil.cleanHtmlTag(post.getPostContent())); - if (summaryText.length() > postSummary) { - String summary = summaryText.substring(0, postSummary); - post.setPostSummary(summary); - } else { - post.setPostSummary(summaryText); - } - //添加文章时,添加文章时间和修改文章时间为当前时间,修改文章时,只更新修改文章时间 - if (null != post.getPostId()) { - Post oldPost = postService.findByPostId(post.getPostId()).get(); - post.setPostDate(oldPost.getPostDate()); - post.setPostUpdate(DateUtil.date()); - post.setPostViews(oldPost.getPostViews()); - msg = localeMessageUtil.getMessage("code.admin.common.update-success"); - } else { - post.setPostDate(DateUtil.date()); - post.setPostUpdate(DateUtil.date()); - } + post.setPostContent(MarkdownUtils.renderMarkdown(post.getPostContentMd())); post.setUser(user); - List categories = categoryService.strListToCateList(cateList); - post.setCategories(categories); - if (StrUtil.isNotEmpty(tagList)) { - List tags = tagService.strListToTagList(StrUtil.trim(tagList)); - post.setTags(tags); - } + post = postService.buildCategoriesAndTags(post, cateList, tagList); post.setPostUrl(urlFilter(post.getPostUrl())); + if (StrUtil.isNotEmpty(post.getPostPassword())) { + post.setPostPassword(SecureUtil.md5(post.getPostPassword())); + } //当没有选择文章缩略图的时候,自动分配一张内置的缩略图 if (StrUtil.equals(post.getPostThumbnail(), BlogPropertiesEnum.DEFAULT_THUMBNAIL.getProp())) { - post.setPostThumbnail("/static/images/thumbnail/thumbnail-" + RandomUtil.randomInt(1, 10) + ".jpg"); + post.setPostThumbnail("/static/halo-frontend/images/thumbnail/thumbnail-" + RandomUtil.randomInt(1, 10) + ".jpg"); } - postService.saveByPost(post); - logsService.saveByLogs(new Logs(LogsRecord.PUSH_POST, post.getPostTitle(), ServletUtil.getClientIP(request), DateUtil.date())); - return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), msg); + postService.save(post); + logsService.save(LogsRecord.PUSH_POST, post.getPostTitle(), request); + return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.save-success")); } catch (Exception e) { log.error("Save article failed: {}", e.getMessage()); + e.printStackTrace(); return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.save-failed")); } } + /** + * 更新 + * + * @param post post + * @param cateList 分类目录 + * @param tagList 标签 + * @param session session + * @return JsonResult + */ + @PostMapping(value = "/update") + @ResponseBody + public JsonResult update(@ModelAttribute Post post, + @RequestParam("cateList") List cateList, + @RequestParam("tagList") String tagList) { + //old data + final Post oldPost = postService.findByPostId(post.getPostId()).orElse(new Post()); + post.setPostViews(oldPost.getPostViews()); + post.setPostContent(MarkdownUtils.renderMarkdown(post.getPostContentMd())); + post.setUser(oldPost.getUser()); + if (null == post.getPostDate()) { + post.setPostDate(new Date()); + } + post = postService.buildCategoriesAndTags(post, cateList, tagList); + if (StrUtil.isNotEmpty(post.getPostPassword())) { + post.setPostPassword(SecureUtil.md5(post.getPostPassword())); + } + //当没有选择文章缩略图的时候,自动分配一张内置的缩略图 + if (StrUtil.equals(post.getPostThumbnail(), BlogPropertiesEnum.DEFAULT_THUMBNAIL.getProp())) { + post.setPostThumbnail("/static/halo-frontend/images/thumbnail/thumbnail-" + RandomUtil.randomInt(1, 10) + ".jpg"); + } + post = postService.save(post); + if (null != post) { + return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.update-success")); + } else { + return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.update-failed")); + } + } + /** * 处理移至回收站的请求 * @@ -258,9 +285,9 @@ public class PostController extends BaseController { @GetMapping(value = "/remove") public String removePost(@RequestParam("postId") Long postId, @RequestParam("postType") String postType) { try { - Optional post = postService.findByPostId(postId); - postService.removeByPostId(postId); - logsService.saveByLogs(new Logs(LogsRecord.REMOVE_POST, post.get().getPostTitle(), ServletUtil.getClientIP(request), DateUtil.date())); + final Optional post = postService.findByPostId(postId); + postService.remove(postId); + logsService.save(LogsRecord.REMOVE_POST, post.get().getPostTitle(), request); } catch (Exception e) { log.error("Delete article failed: {}", e.getMessage()); } @@ -270,20 +297,6 @@ public class PostController extends BaseController { return "redirect:/admin/page"; } - /** - * 跳转到编辑文章页面 - * - * @param postId 文章编号 - * @param model model - * @return 模板路径admin/admin_editor - */ - @GetMapping(value = "/edit") - public String editPost(@RequestParam("postId") Long postId, Model model) { - Optional post = postService.findByPostId(postId); - model.addAttribute("post", post.get()); - return "admin/admin_post_md_editor"; - } - /** * 更新所有摘要 * @@ -313,7 +326,7 @@ public class PostController extends BaseController { @ResponseBody public JsonResult checkUrlExists(@RequestParam("postUrl") String postUrl) { postUrl = urlFilter(postUrl); - Post post = postService.findByPostUrl(postUrl, PostTypeEnum.POST_TYPE_POST.getDesc()); + final Post post = postService.findByPostUrl(postUrl, PostTypeEnum.POST_TYPE_POST.getDesc()); if (null != post) { return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.url-is-exists")); } @@ -332,19 +345,25 @@ public class PostController extends BaseController { if (StrUtil.isBlank(baiduToken)) { return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.post.no-baidu-token")); } - String blogUrl = HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()); - List posts = postService.findAllPosts(PostTypeEnum.POST_TYPE_POST.getDesc()); - StringBuilder urls = new StringBuilder(); + final String blogUrl = HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()); + final List posts = postService.findAll(PostTypeEnum.POST_TYPE_POST.getDesc()); + final StringBuilder urls = new StringBuilder(); for (Post post : posts) { urls.append(blogUrl); urls.append("/archives/"); urls.append(post.getPostUrl()); urls.append("\n"); } - String result = HaloUtils.baiduPost(blogUrl, baiduToken, urls.toString()); + final String result = HaloUtils.baiduPost(blogUrl, baiduToken, urls.toString()); if (StrUtil.isEmpty(result)) { return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.post.push-to-baidu-failed")); } return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.post.push-to-baidu-success")); } + + @InitBinder + public void initBinder(ServletRequestDataBinder binder) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true)); + } } diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/TagController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/TagController.java index 217e4e38d..08485efd0 100755 --- a/src/main/java/cc/ryanc/halo/web/controller/admin/TagController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/admin/TagController.java @@ -9,8 +9,12 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.validation.ObjectError; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + /** *
  *     后台标签管理控制器
@@ -44,44 +48,45 @@ public class TagController {
      * 新增/修改标签
      *
      * @param tag tag
-     * @return 重定向到/admin/tag
+     *
+     * @return JsonResult
      */
     @PostMapping(value = "/save")
-    public String saveTag(@ModelAttribute Tag tag) {
-        try {
-            tagService.saveByTag(tag);
-        } catch (Exception e) {
-            log.error("Add/modify tag failed: {}", e.getMessage());
-        }
-        return "redirect:/admin/tag";
-    }
-
-    /**
-     * 验证是否存在该路径
-     *
-     * @param tagUrl 标签路径名
-     * @return true:不存在,false:已存在
-     */
-    @GetMapping(value = "/checkUrl")
     @ResponseBody
-    public JsonResult checkTagUrlExists(@RequestParam("tagUrl") String tagUrl) {
-        Tag tag = tagService.findByTagUrl(tagUrl);
-        if (null != tag) {
-            return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.url-is-exists"));
+    public JsonResult saveTag(@Valid Tag tag, BindingResult result) {
+        if (result.hasErrors()) {
+            for (ObjectError error : result.getAllErrors()) {
+                return new JsonResult(ResultCodeEnum.FAIL.getCode(), error.getDefaultMessage());
+            }
         }
-        return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), "");
+        final Tag tempTag = tagService.findByTagUrl(tag.getTagUrl());
+        if (null != tag.getTagId()) {
+            if (null != tempTag && !tag.getTagId().equals(tempTag.getTagId())) {
+                return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.url-is-exists"));
+            }
+        } else {
+            if (null != tempTag) {
+                return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.url-is-exists"));
+            }
+        }
+        tag = tagService.save(tag);
+        if (null == tag) {
+            return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.save-failed"));
+        }
+        return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.save-success"));
     }
 
     /**
      * 处理删除标签的请求
      *
      * @param tagId 标签编号
+     *
      * @return 重定向到/admin/tag
      */
     @GetMapping(value = "/remove")
     public String removeTag(@RequestParam("tagId") Long tagId) {
         try {
-            tagService.removeByTagId(tagId);
+            tagService.remove(tagId);
         } catch (Exception e) {
             log.error("Failed to delete tag: {}", e.getMessage());
         }
@@ -93,11 +98,12 @@ public class TagController {
      *
      * @param model model
      * @param tagId 标签编号
+     *
      * @return 模板路径admin/admin_tag
      */
     @GetMapping(value = "/edit")
     public String toEditTag(Model model, @RequestParam("tagId") Long tagId) {
-        Tag tag = tagService.findByTagId(tagId).get();
+        final Tag tag = tagService.findByTagId(tagId).orElse(new Tag());
         model.addAttribute("updateTag", tag);
         return "admin/admin_tag";
     }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/ThemeController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/ThemeController.java
index 576ee4c37..e58a2f51b 100755
--- a/src/main/java/cc/ryanc/halo/web/controller/admin/ThemeController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/admin/ThemeController.java
@@ -1,313 +1,324 @@
-package cc.ryanc.halo.web.controller.admin;
-
-import cc.ryanc.halo.model.domain.Logs;
-import cc.ryanc.halo.model.dto.HaloConst;
-import cc.ryanc.halo.model.dto.JsonResult;
-import cc.ryanc.halo.model.dto.LogsRecord;
-import cc.ryanc.halo.model.enums.BlogPropertiesEnum;
-import cc.ryanc.halo.model.enums.ResultCodeEnum;
-import cc.ryanc.halo.model.enums.TrueFalseEnum;
-import cc.ryanc.halo.service.LogsService;
-import cc.ryanc.halo.service.OptionsService;
-import cc.ryanc.halo.utils.HaloUtils;
-import cc.ryanc.halo.utils.LocaleMessageUtil;
-import cc.ryanc.halo.web.controller.core.BaseController;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.io.FileUtil;
-import cn.hutool.core.io.file.FileReader;
-import cn.hutool.core.io.file.FileWriter;
-import cn.hutool.core.util.RuntimeUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.core.util.ZipUtil;
-import cn.hutool.extra.servlet.ServletUtil;
-import freemarker.template.Configuration;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cache.annotation.CacheEvict;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.util.ResourceUtils;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletRequest;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.util.List;
-
-/**
- * 
- *     后台主题管理控制器
- * 
- * - * @author : RYAN0UP - * @date : 2017/12/16 - */ -@Slf4j -@Controller -@RequestMapping(value = "/admin/themes") -public class ThemeController extends BaseController { - - private static final String NOT_FOUND_GIT = "-bash: git: command not found"; - - @Autowired - private OptionsService optionsService; - - @Autowired - private LogsService logsService; - - @Autowired - private Configuration configuration; - - @Autowired - private LocaleMessageUtil localeMessageUtil; - - /** - * 渲染主题设置页面 - * - * @param model model - * @return 模板路径admin/admin_theme - */ - @GetMapping - public String themes(Model model) { - model.addAttribute("activeTheme", BaseController.THEME); - if (null != HaloConst.THEMES) { - model.addAttribute("themes", HaloConst.THEMES); - } - return "admin/admin_theme"; - } - - /** - * 激活主题 - * - * @param siteTheme 主题名称 - * @param request request - * @return JsonResult - */ - @GetMapping(value = "/set") - @ResponseBody - @CacheEvict(value = "posts", allEntries = true, beforeInvocation = true) - public JsonResult activeTheme(@RequestParam("siteTheme") String siteTheme, - HttpServletRequest request) { - try { - //保存主题设置项 - optionsService.saveOption(BlogPropertiesEnum.THEME.getProp(), siteTheme); - //设置主题 - BaseController.THEME = siteTheme; - HaloConst.OPTIONS.clear(); - HaloConst.OPTIONS = optionsService.findAllOptions(); - configuration.setSharedVariable("themeName", siteTheme); - configuration.setSharedVariable("options", HaloConst.OPTIONS); - log.info("Changed theme to {}", siteTheme); - logsService.saveByLogs( - new Logs(LogsRecord.CHANGE_THEME, "更换为" + siteTheme, ServletUtil.getClientIP(request), DateUtil.date()) - ); - return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.theme.change-success", new Object[]{siteTheme})); - } catch (Exception e) { - return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.theme.change-failed")); - } - } - - - /** - * 上传主题 - * - * @param file 文件 - * @return JsonResult - */ - @RequestMapping(value = "/upload", method = RequestMethod.POST) - @ResponseBody - public JsonResult uploadTheme(@RequestParam("file") MultipartFile file, - HttpServletRequest request) { - try { - if (!file.isEmpty()) { - //获取项目根路径 - File basePath = new File(ResourceUtils.getURL("classpath:").getPath()); - File themePath = new File(basePath.getAbsolutePath(), new StringBuffer("templates/themes/").append(file.getOriginalFilename()).toString()); - file.transferTo(themePath); - log.info("Upload topic success, path is " + themePath.getAbsolutePath()); - logsService.saveByLogs( - new Logs(LogsRecord.UPLOAD_THEME, file.getOriginalFilename(), ServletUtil.getClientIP(request), DateUtil.date()) - ); - ZipUtil.unzip(themePath, new File(basePath.getAbsolutePath(), "templates/themes/")); - FileUtil.del(themePath); - HaloConst.THEMES.clear(); - HaloConst.THEMES = HaloUtils.getThemes(); - } else { - log.error("Upload theme failed, no file selected"); - return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.theme.upload-no-file")); - } - } catch (Exception e) { - log.error("Upload theme failed: {}", e.getMessage()); - return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.theme.upload-failed")); - } - return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.theme.upload-success")); - } - - /** - * 删除主题 - * - * @param themeName 主题文件夹名 - * @return string 重定向到/admin/themes - */ - @GetMapping(value = "/remove") - public String removeTheme(@RequestParam("themeName") String themeName) { - try { - File basePath = new File(ResourceUtils.getURL("classpath:").getPath()); - File themePath = new File(basePath.getAbsolutePath(), "templates/themes/" + themeName); - FileUtil.del(themePath); - HaloConst.THEMES.clear(); - HaloConst.THEMES = HaloUtils.getThemes(); - } catch (Exception e) { - log.error("Delete theme failed: {}", e.getMessage()); - } - return "redirect:/admin/themes"; - } - - /** - * 安装主题弹出层 - * - * @return 目录路径admin/widget/_theme-install - */ - @GetMapping(value = "/install") - public String install() { - return "admin/widget/_theme-install"; - } - - /** - * 在线拉取主题 - * - * @param remoteAddr 远程地址 - * @param themeName 主题名称 - * @return JsonResult - */ - @PostMapping(value = "/clone") - @ResponseBody - public JsonResult cloneFromRemote(@RequestParam(value = "remoteAddr") String remoteAddr, - @RequestParam(value = "themeName") String themeName) { - if (StrUtil.isBlank(remoteAddr) || StrUtil.isBlank(themeName)) { - return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.info-no-complete")); - } - try { - File basePath = new File(ResourceUtils.getURL("classpath:").getPath()); - File themePath = new File(basePath.getAbsolutePath(), "templates/themes"); - String cmdResult = RuntimeUtil.execForStr("git clone " + remoteAddr + " " + themePath.getAbsolutePath() + "/" + themeName); - if (NOT_FOUND_GIT.equals(cmdResult)) { - return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.theme.no-git")); - } - HaloConst.THEMES.clear(); - HaloConst.THEMES = HaloUtils.getThemes(); - } catch (FileNotFoundException e) { - log.error("Cloning theme failed: {}", e.getMessage()); - return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.theme.clone-theme-failed") + e.getMessage()); - } - return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.install-success")); - } - - /** - * 更新主题 - * - * @param themeName 主题名 - * @return JsonResult - */ - @GetMapping(value = "/pull") - @ResponseBody - public JsonResult pullFromRemote(@RequestParam(value = "themeName") String themeName) { - try { - File basePath = new File(ResourceUtils.getURL("classpath:").getPath()); - File themePath = new File(basePath.getAbsolutePath(), "templates/themes"); - String cmdResult = RuntimeUtil.execForStr("cd " + themePath.getAbsolutePath() + "/" + themeName + " && git pull"); - if (NOT_FOUND_GIT.equals(cmdResult)) { - return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.theme.no-git")); - } - HaloConst.THEMES.clear(); - HaloConst.THEMES = HaloUtils.getThemes(); - } catch (Exception e) { - log.error("Update theme failed: {}", e.getMessage()); - return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.theme.update-theme-failed") + e.getMessage()); - } - return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.update-success")); - } - - /** - * 跳转到主题设置 - * - * @param theme theme名称 - */ - @GetMapping(value = "/options") - public String setting(Model model, - @RequestParam("theme") String theme, - @RequestParam("hasUpdate") String hasUpdate) { - model.addAttribute("themeDir", theme); - if (StrUtil.equals(hasUpdate, TrueFalseEnum.TRUE.getDesc())) { - model.addAttribute("hasUpdate", true); - } else { - model.addAttribute("hasUpdate", false); - } - return "themes/" + theme + "/module/options"; - } - - /** - * 编辑主题 - * - * @param model model - * @return 模板路径admin/admin_theme-editor - */ - @GetMapping(value = "/editor") - public String editor(Model model) { - List tpls = HaloUtils.getTplName(BaseController.THEME); - model.addAttribute("tpls", tpls); - return "admin/admin_theme-editor"; - } - - /** - * 获取模板文件内容 - * - * @param tplName 模板文件名 - * @return 模板内容 - */ - @GetMapping(value = "/getTpl", produces = "text/text;charset=UTF-8") - @ResponseBody - public String getTplContent(@RequestParam("tplName") String tplName) { - String tplContent = ""; - try { - //获取项目根路径 - File basePath = new File(ResourceUtils.getURL("classpath:").getPath()); - //获取主题路径 - File themesPath = new File(basePath.getAbsolutePath(), new StringBuffer("templates/themes/").append(BaseController.THEME).append("/").append(tplName).toString()); - FileReader fileReader = new FileReader(themesPath); - tplContent = fileReader.readString(); - } catch (Exception e) { - log.error("Get template file error: {}", e.getMessage()); - } - return tplContent; - } - - /** - * 保存修改模板 - * - * @param tplName 模板名称 - * @param tplContent 模板内容 - * @return JsonResult - */ - @PostMapping(value = "/editor/save") - @ResponseBody - public JsonResult saveTpl(@RequestParam("tplName") String tplName, - @RequestParam("tplContent") String tplContent) { - if (StrUtil.isBlank(tplContent)) { - return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.theme.edit.no-content")); - } - try { - //获取项目根路径 - File basePath = new File(ResourceUtils.getURL("classpath:").getPath()); - //获取主题路径 - File tplPath = new File(basePath.getAbsolutePath(), new StringBuffer("templates/themes/").append(BaseController.THEME).append("/").append(tplName).toString()); - FileWriter fileWriter = new FileWriter(tplPath); - fileWriter.write(tplContent); - } catch (Exception e) { - log.error("Template save failed: {}", e.getMessage()); - return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.save-failed")); - } - return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.save-success")); - } -} +package cc.ryanc.halo.web.controller.admin; + +import cc.ryanc.halo.model.dto.HaloConst; +import cc.ryanc.halo.model.dto.JsonResult; +import cc.ryanc.halo.model.dto.LogsRecord; +import cc.ryanc.halo.model.enums.BlogPropertiesEnum; +import cc.ryanc.halo.model.enums.ResultCodeEnum; +import cc.ryanc.halo.model.enums.TrueFalseEnum; +import cc.ryanc.halo.service.LogsService; +import cc.ryanc.halo.service.OptionsService; +import cc.ryanc.halo.utils.HaloUtils; +import cc.ryanc.halo.utils.LocaleMessageUtil; +import cc.ryanc.halo.web.controller.core.BaseController; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileReader; +import cn.hutool.core.io.file.FileWriter; +import cn.hutool.core.text.StrBuilder; +import cn.hutool.core.util.RuntimeUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.ZipUtil; +import freemarker.template.Configuration; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.util.ResourceUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import java.io.File; +import java.io.FileNotFoundException; +import java.util.List; + +/** + *
+ *     后台主题管理控制器
+ * 
+ * + * @author : RYAN0UP + * @date : 2017/12/16 + */ +@Slf4j +@Controller +@RequestMapping(value = "/admin/themes") +public class ThemeController extends BaseController { + + private static final String NOT_FOUND_GIT = "-bash: git: command not found"; + + @Autowired + private OptionsService optionsService; + + @Autowired + private LogsService logsService; + + @Autowired + private Configuration configuration; + + @Autowired + private LocaleMessageUtil localeMessageUtil; + + /** + * 渲染主题设置页面 + * + * @param model model + * + * @return 模板路径admin/admin_theme + */ + @GetMapping + public String themes(Model model) { + model.addAttribute("activeTheme", BaseController.THEME); + if (null != HaloConst.THEMES) { + model.addAttribute("themes", HaloConst.THEMES); + } + return "admin/admin_theme"; + } + + /** + * 激活主题 + * + * @param siteTheme 主题名称 + * @param request request + * + * @return JsonResult + */ + @GetMapping(value = "/set") + @ResponseBody + @CacheEvict(value = "posts", allEntries = true, beforeInvocation = true) + public JsonResult activeTheme(@RequestParam("siteTheme") String siteTheme, + HttpServletRequest request) { + try { + //保存主题设置项 + optionsService.saveOption(BlogPropertiesEnum.THEME.getProp(), siteTheme); + //设置主题 + BaseController.THEME = siteTheme; + HaloConst.OPTIONS.clear(); + HaloConst.OPTIONS = optionsService.findAllOptions(); + configuration.setSharedVariable("themeName", siteTheme); + configuration.setSharedVariable("options", HaloConst.OPTIONS); + log.info("Changed theme to {}", siteTheme); + logsService.save(LogsRecord.CHANGE_THEME, "更换为" + siteTheme, request); + return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.theme.change-success", new Object[]{siteTheme})); + } catch (Exception e) { + return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.theme.change-failed")); + } + } + + + /** + * 上传主题 + * + * @param file 文件 + * + * @return JsonResult + */ + @RequestMapping(value = "/upload", method = RequestMethod.POST) + @ResponseBody + public JsonResult uploadTheme(@RequestParam("file") MultipartFile file, + HttpServletRequest request) { + try { + if (!file.isEmpty()) { + //获取项目根路径 + final File basePath = new File(ResourceUtils.getURL("classpath:").getPath()); + final File themePath = new File(basePath.getAbsolutePath(), new StringBuffer("templates/themes/").append(file.getOriginalFilename()).toString()); + file.transferTo(themePath); + log.info("Upload topic success, path is " + themePath.getAbsolutePath()); + logsService.save(LogsRecord.UPLOAD_THEME, file.getOriginalFilename(), request); + ZipUtil.unzip(themePath, new File(basePath.getAbsolutePath(), "templates/themes/")); + FileUtil.del(themePath); + HaloConst.THEMES.clear(); + HaloConst.THEMES = HaloUtils.getThemes(); + } else { + log.error("Upload theme failed, no file selected"); + return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.theme.upload-no-file")); + } + } catch (Exception e) { + log.error("Upload theme failed: {}", e.getMessage()); + return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.theme.upload-failed")); + } + return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.theme.upload-success")); + } + + /** + * 删除主题 + * + * @param themeName 主题文件夹名 + * + * @return string 重定向到/admin/themes + */ + @GetMapping(value = "/remove") + public String removeTheme(@RequestParam("themeName") String themeName) { + try { + final File basePath = new File(ResourceUtils.getURL("classpath:").getPath()); + final File themePath = new File(basePath.getAbsolutePath(), "templates/themes/" + themeName); + FileUtil.del(themePath); + HaloConst.THEMES.clear(); + HaloConst.THEMES = HaloUtils.getThemes(); + } catch (Exception e) { + log.error("Delete theme failed: {}", e.getMessage()); + } + return "redirect:/admin/themes"; + } + + /** + * 安装主题弹出层 + * + * @return 目录路径admin/widget/_theme-install + */ + @GetMapping(value = "/install") + public String install() { + return "admin/widget/_theme-install"; + } + + /** + * 在线拉取主题 + * + * @param remoteAddr 远程地址 + * @param themeName 主题名称 + * + * @return JsonResult + */ + @PostMapping(value = "/clone") + @ResponseBody + public JsonResult cloneFromRemote(@RequestParam(value = "remoteAddr") String remoteAddr, + @RequestParam(value = "themeName") String themeName) { + if (StrUtil.isBlank(remoteAddr) || StrUtil.isBlank(themeName)) { + return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.info-no-complete")); + } + try { + final File basePath = new File(ResourceUtils.getURL("classpath:").getPath()); + final File themePath = new File(basePath.getAbsolutePath(), "templates/themes"); + final String cmdResult = RuntimeUtil.execForStr("git clone " + remoteAddr + " " + themePath.getAbsolutePath() + "/" + themeName); + if (NOT_FOUND_GIT.equals(cmdResult)) { + return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.theme.no-git")); + } + HaloConst.THEMES.clear(); + HaloConst.THEMES = HaloUtils.getThemes(); + } catch (FileNotFoundException e) { + log.error("Cloning theme failed: {}", e.getMessage()); + return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.theme.clone-theme-failed") + e.getMessage()); + } + return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.install-success")); + } + + /** + * 更新主题 + * + * @param themeName 主题名 + * + * @return JsonResult + */ + @GetMapping(value = "/pull") + @ResponseBody + public JsonResult pullFromRemote(@RequestParam(value = "themeName") String themeName) { + try { + final File basePath = new File(ResourceUtils.getURL("classpath:").getPath()); + final File themePath = new File(basePath.getAbsolutePath(), "templates/themes"); + final String cmdResult = RuntimeUtil.execForStr("cd " + themePath.getAbsolutePath() + "/" + themeName + " && git pull"); + if (NOT_FOUND_GIT.equals(cmdResult)) { + return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.theme.no-git")); + } + HaloConst.THEMES.clear(); + HaloConst.THEMES = HaloUtils.getThemes(); + } catch (Exception e) { + log.error("Update theme failed: {}", e.getMessage()); + return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.theme.update-theme-failed") + e.getMessage()); + } + return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.update-success")); + } + + /** + * 跳转到主题设置 + * + * @param theme theme名称 + */ + @GetMapping(value = "/options") + public String setting(Model model, + @RequestParam("theme") String theme, + @RequestParam("hasUpdate") String hasUpdate) { + model.addAttribute("themeDir", theme); + if (StrUtil.equals(hasUpdate, TrueFalseEnum.TRUE.getDesc())) { + model.addAttribute("hasUpdate", true); + } else { + model.addAttribute("hasUpdate", false); + } + return "themes/" + theme + "/module/options"; + } + + /** + * 编辑主题 + * + * @param model model + * + * @return 模板路径admin/admin_theme-editor + */ + @GetMapping(value = "/editor") + public String editor(Model model) { + final List tpls = HaloUtils.getTplName(BaseController.THEME); + model.addAttribute("tpls", tpls); + return "admin/admin_theme-editor"; + } + + /** + * 获取模板文件内容 + * + * @param tplName 模板文件名 + * + * @return 模板内容 + */ + @GetMapping(value = "/getTpl", produces = "text/text;charset=UTF-8") + @ResponseBody + public String getTplContent(@RequestParam("tplName") String tplName) { + String tplContent = ""; + try { + //获取项目根路径 + final File basePath = new File(ResourceUtils.getURL("classpath:").getPath()); + //获取主题路径 + final StrBuilder themePath = new StrBuilder("templates/themes/"); + themePath.append(BaseController.THEME); + themePath.append("/"); + themePath.append(tplName); + final File themesPath = new File(basePath.getAbsolutePath(), themePath.toString()); + final FileReader fileReader = new FileReader(themesPath); + tplContent = fileReader.readString(); + } catch (Exception e) { + log.error("Get template file error: {}", e.getMessage()); + } + return tplContent; + } + + /** + * 保存修改模板 + * + * @param tplName 模板名称 + * @param tplContent 模板内容 + * + * @return JsonResult + */ + @PostMapping(value = "/editor/save") + @ResponseBody + public JsonResult saveTpl(@RequestParam("tplName") String tplName, + @RequestParam("tplContent") String tplContent) { + if (StrUtil.isBlank(tplContent)) { + return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.theme.edit.no-content")); + } + try { + //获取项目根路径 + final File basePath = new File(ResourceUtils.getURL("classpath:").getPath()); + //获取主题路径 + final StrBuilder themePath = new StrBuilder("templates/themes/"); + themePath.append(BaseController.THEME); + themePath.append("/"); + themePath.append(tplName); + final File tplPath = new File(basePath.getAbsolutePath(), themePath.toString()); + final FileWriter fileWriter = new FileWriter(tplPath); + fileWriter.write(tplContent); + } catch (Exception e) { + log.error("Template save failed: {}", e.getMessage()); + return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.save-failed")); + } + return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.save-success")); + } +} diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/UserController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/UserController.java index 7e88d46b5..ca98297bd 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/admin/UserController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/admin/UserController.java @@ -66,7 +66,7 @@ public class UserController { return new JsonResult(ResultCodeEnum.FAIL.getCode(), error.getDefaultMessage()); } } - userService.saveByUser(user); + userService.save(user); configuration.setSharedVariable("user", userService.findUser()); session.removeAttribute(HaloConst.USER_SESSION_KEY); } catch (Exception e) { @@ -92,10 +92,10 @@ public class UserController { @ModelAttribute("userId") Long userId, HttpSession session) { try { - User user = userService.findByUserIdAndUserPass(userId, SecureUtil.md5(beforePass)); + final User user = userService.findByUserIdAndUserPass(userId, SecureUtil.md5(beforePass)); if (null != user) { user.setUserPass(SecureUtil.md5(newPass)); - userService.saveByUser(user); + userService.save(user); session.removeAttribute(HaloConst.USER_SESSION_KEY); } else { return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.user.old-password-error")); diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiArchivesController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiArchivesController.java index 03ee87603..f6197ed54 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiArchivesController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiArchivesController.java @@ -5,6 +5,7 @@ import cc.ryanc.halo.model.dto.JsonResult; import cc.ryanc.halo.model.enums.ResponseStatusEnum; import cc.ryanc.halo.service.PostService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -19,6 +20,7 @@ import java.util.List; * @author : RYAN0UP * @date : 2018/6/6 */ +@CrossOrigin @RestController @RequestMapping(value = "/api/archives") public class ApiArchivesController { @@ -29,11 +31,50 @@ public class ApiArchivesController { /** * 根据年份归档 * + *

+ * result json: + *

+     * {
+     *     "code": 200,
+     *     "msg": "OK",
+     *     "result": [
+     *         {
+     *             "year": "",
+     *             "month": "",
+     *             "count": "",
+     *             "posts": [
+     *                 {
+     *                     "postId": "",
+     *                     "user": {},
+     *                     "postTitle": "",
+     *                     "postType": "",
+     *                     "postContentMd": "",
+     *                     "postContent": "",
+     *                     "postUrl": "",
+     *                     "postSummary": "",
+     *                     "categories": [],
+     *                     "tags": [],
+     *                     "comments": [],
+     *                     "postThumbnail": "",
+     *                     "postDate": "",
+     *                     "postUpdate": "",
+     *                     "postStatus": 0,
+     *                     "postViews": 0,
+     *                     "allowComment": 1,
+     *                     "customTpl": ""
+     *                 }
+     *             ]
+     *         }
+     *     ]
+     * }
+     *     
+ *

+ * * @return JsonResult */ @GetMapping(value = "/year") public JsonResult archivesYear() { - List archives = postService.findPostGroupByYear(); + final List archives = postService.findPostGroupByYear(); if (null != archives && archives.size() > 0) { return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), archives); } else { @@ -44,15 +85,73 @@ public class ApiArchivesController { /** * 根据月份归档 * + *

+ * result json: + *

+     * {
+     *     "code": 200,
+     *     "msg": "OK",
+     *     "result": [
+     *         {
+     *             "year": "",
+     *             "month": "",
+     *             "count": "",
+     *             "posts": [
+     *                 {
+     *                     "postId": "",
+     *                     "user": {},
+     *                     "postTitle": "",
+     *                     "postType": "",
+     *                     "postContentMd": "",
+     *                     "postContent": "",
+     *                     "postUrl": "",
+     *                     "postSummary": "",
+     *                     "categories": [],
+     *                     "tags": [],
+     *                     "comments": [],
+     *                     "postThumbnail": "",
+     *                     "postDate": "",
+     *                     "postUpdate": "",
+     *                     "postStatus": 0,
+     *                     "postViews": 0,
+     *                     "allowComment": 1,
+     *                     "customTpl": ""
+     *                 }
+     *             ]
+     *         }
+     *     ]
+     * }
+     *     
+ *

+ * * @return JsonResult */ @GetMapping(value = "/year/month") public JsonResult archivesYearAndMonth() { - List archives = postService.findPostGroupByYearAndMonth(); + final List archives = postService.findPostGroupByYearAndMonth(); if (null != archives && archives.size() > 0) { return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), archives); } else { return new JsonResult(ResponseStatusEnum.EMPTY.getCode(), ResponseStatusEnum.EMPTY.getMsg()); } } + + /** + * @Author Aquan + * @Description 返回所有文章 + * @Date 2019.1.4 11:06 + * @Param + * @return JsonResult + **/ + @GetMapping(value = "/all") + public JsonResult archivesAllPost() { + final List archive = postService.findAllPost(); + if (null != archive && archive.size() > 0) { + return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), archive); + } else { + return new JsonResult(ResponseStatusEnum.EMPTY.getCode(), ResponseStatusEnum.EMPTY.getMsg()); + } + } + + } diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiCategoryController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiCategoryController.java index a27a107f0..3b477b258 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiCategoryController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiCategoryController.java @@ -5,10 +5,7 @@ import cc.ryanc.halo.model.dto.JsonResult; import cc.ryanc.halo.model.enums.ResponseStatusEnum; import cc.ryanc.halo.service.CategoryService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -20,6 +17,7 @@ import java.util.List; * @author : RYAN0UP * @date : 2018/6/6 */ +@CrossOrigin @RestController @RequestMapping(value = "/api/categories") public class ApiCategoryController { @@ -30,11 +28,29 @@ public class ApiCategoryController { /** * 获取所有分类 * + *

+ * result json: + *

+     * {
+     *     "code": 200,
+     *     "msg": "OK",
+     *     "result": [
+     *         {
+     *             "cateId": "",
+     *             "cateName": "",
+     *             "cateUrl": "",
+     *             "cateDesc": ""
+     *         }
+     *     ]
+     * }
+     *     
+ *

+ * * @return JsonResult */ @GetMapping public JsonResult categories() { - List categories = categoryService.findAllCategories(); + List categories = categoryService.findAll(); if (null != categories && categories.size() > 0) { return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), categories); } else { @@ -45,12 +61,28 @@ public class ApiCategoryController { /** * 获取单个分类的信息 * + *

+ * result json: + *

+     * {
+     *     "code": 200,
+     *     "msg": "OK",
+     *     "result": {
+     *         "cateId": "",
+     *         "cateName": "",
+     *         "cateUrl": "",
+     *         "cateDesc": ""
+     *     }
+     * }
+     *     
+ *

+ * * @param cateUrl 分类路径 * @return JsonResult */ @GetMapping(value = "/{cateUrl}") public JsonResult categories(@PathVariable("cateUrl") String cateUrl) { - Category category = categoryService.findByCateUrl(cateUrl); + final Category category = categoryService.findByCateUrl(cateUrl); if (null != category) { return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), category); } else { diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiCommentController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiCommentController.java index edc621ed7..a7b9c0860 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiCommentController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiCommentController.java @@ -2,6 +2,7 @@ package cc.ryanc.halo.web.controller.api; import cc.ryanc.halo.service.CommentService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.RestController; * @author : RYAN0UP * @date : 2018/6/6 */ +@CrossOrigin @RestController @RequestMapping(value = "/api/comments") public class ApiCommentController { diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiGalleryController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiGalleryController.java index ebf696148..2f24bf301 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiGalleryController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiGalleryController.java @@ -5,10 +5,7 @@ import cc.ryanc.halo.model.dto.JsonResult; import cc.ryanc.halo.model.enums.ResponseStatusEnum; import cc.ryanc.halo.service.GalleryService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Optional; @@ -21,6 +18,7 @@ import java.util.Optional; * @author : RYAN0UP * @date : 2018/6/6 */ +@CrossOrigin @RestController @RequestMapping(value = "/api/galleries") public class ApiGalleryController { @@ -31,11 +29,32 @@ public class ApiGalleryController { /** * 获取所有图片 * + *

+ * result json: + *

+     * {
+     *     "code": 200,
+     *     "msg": "OK",
+     *     "result": [
+     *         {
+     *             "galleryId": ,
+     *             "galleryName": "",
+     *             "galleryDesc": "",
+     *             "galleryDate": "",
+     *             "galleryLocation": "",
+     *             "galleryThumbnailUrl": "",
+     *             "galleryUrl": ""
+     *         }
+     *     ]
+     * }
+     *     
+ *

+ * * @return JsonResult */ @GetMapping public JsonResult galleries() { - List galleries = galleryService.findAllGalleries(); + final List galleries = galleryService.findAll(); if (null != galleries && galleries.size() > 0) { return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), galleries); } else { @@ -46,12 +65,33 @@ public class ApiGalleryController { /** * 获取单张图片的信息 * + *

+ * result json: + *

+     * {
+     *     "code": 200,
+     *     "msg": "OK",
+     *     "result": [
+     *         {
+     *             "galleryId": ,
+     *             "galleryName": "",
+     *             "galleryDesc": "",
+     *             "galleryDate": "",
+     *             "galleryLocation": "",
+     *             "galleryThumbnailUrl": "",
+     *             "galleryUrl": ""
+     *         }
+     *     ]
+     * }
+     *     
+ *

+ * * @param id id * @return JsonResult */ @GetMapping(value = "/{id}") public JsonResult galleries(@PathVariable("id") Long id) { - Optional gallery = galleryService.findByGalleryId(id); + final Optional gallery = galleryService.findByGalleryId(id); if (gallery.isPresent()) { return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), gallery.get()); } else { diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiLinkController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiLinkController.java index dea40638a..cf4f159d9 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiLinkController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiLinkController.java @@ -5,6 +5,7 @@ import cc.ryanc.halo.model.dto.JsonResult; import cc.ryanc.halo.model.enums.ResponseStatusEnum; import cc.ryanc.halo.service.LinkService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -19,6 +20,7 @@ import java.util.List; * @author : RYAN0UP * @date : 2018/6/6 */ +@CrossOrigin @RestController @RequestMapping(value = "/api/links") public class ApiLinkController { @@ -29,11 +31,30 @@ public class ApiLinkController { /** * 获取所有友情链接 * + *

+ * result json: + *

+     * {
+     *     "code": 200,
+     *     "msg": "OK",
+     *     "result": [
+     *         {
+     *             "linkId": ,
+     *             "linkName": "",
+     *             "linkUrl": "",
+     *             "linkPic": "",
+     *             "linkDesc": ""
+     *         }
+     *     ]
+     * }
+     *     
+ *

+ * * @return JsonResult */ @GetMapping public JsonResult links() { - List links = linkService.findAllLinks(); + final List links = linkService.findAll(); if (null != links && links.size() > 0) { return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), links); } else { diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiMenuController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiMenuController.java index 965d58e1e..66ee74c96 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiMenuController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiMenuController.java @@ -5,6 +5,7 @@ import cc.ryanc.halo.model.dto.JsonResult; import cc.ryanc.halo.model.enums.ResponseStatusEnum; import cc.ryanc.halo.service.MenuService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -19,6 +20,7 @@ import java.util.List; * @author : RYAN0UP * @date : 2018/6/6 */ +@CrossOrigin @RestController @RequestMapping(value = "/api/menus") public class ApiMenuController { @@ -29,11 +31,31 @@ public class ApiMenuController { /** * 获取所有菜单 * + *

+ * result json: + *

+     * {
+     *     "code": 200,
+     *     "msg": "OK",
+     *     "result": [
+     *         {
+     *             "menuId": ,
+     *             "menuName": "",
+     *             "menuUrl": "",
+     *             "menuSort": ,
+     *             "menuIcon": "",
+     *             "menuTarget":
+     *         }
+     *     ]
+     * }
+     *     
+ *

+ * * @return JsonResult */ @GetMapping public JsonResult menus() { - List menus = menuService.findAllMenus(); + final List menus = menuService.findAll(); if (null != menus && menus.size() > 0) { return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), menus); } else { diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiMetaWeBlog.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiMetaWeBlog.java new file mode 100644 index 000000000..71a94def6 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiMetaWeBlog.java @@ -0,0 +1,279 @@ +package cc.ryanc.halo.web.controller.api; + +import cc.ryanc.halo.model.domain.Category; +import cc.ryanc.halo.model.domain.Post; +import cc.ryanc.halo.model.domain.User; +import cc.ryanc.halo.model.dto.HaloConst; +import cc.ryanc.halo.model.enums.BlogPropertiesEnum; +import cc.ryanc.halo.service.CategoryService; +import cc.ryanc.halo.service.PostService; +import cc.ryanc.halo.service.UserService; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.text.StrBuilder; +import cn.hutool.crypto.SecureUtil; +import lombok.extern.slf4j.Slf4j; +import org.json.JSONArray; +import org.json.JSONObject; +import org.json.XML; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import java.util.Date; +import java.util.List; + +/** + * @author : RYAN0UP + * @date : 2018/12/11 + */ +@Slf4j +@RestController +@RequestMapping(value = "/apis/metaweblog", produces = "text/xml;charset=UTF-8") +public class ApiMetaWeBlog { + + @Autowired + private UserService userService; + + @Autowired + private CategoryService categoryService; + + @Autowired + private PostService postService; + + + /** + * @param request request + * @return String + */ + @PostMapping + public String metaWeBlog(HttpServletRequest request) { + String responseContent = ""; + String xml; + try { + final ServletInputStream inputStream = request.getInputStream(); + xml = IoUtil.read(inputStream, "utf-8"); + final JSONObject requestJSONObject = XML.toJSONObject(xml); + + final JSONObject methodCall = requestJSONObject.getJSONObject("methodCall"); + final String methodName = methodCall.getString("methodName"); + + log.info("MetaWeblog[methodName={}]", methodName); + + final JSONArray params = methodCall.getJSONObject("params").getJSONArray("param"); + + final String userEmail = params.getJSONObject(1).getJSONObject("value").optString("string"); + + final String userPwd = params.getJSONObject(2).getJSONObject("value").get("string").toString(); + + final User user = userService.userLoginByEmail(userEmail, SecureUtil.md5(userPwd)); + + if (null == user) { + throw new Exception("用户密码错误!"); + } + + if ("blogger.getUsersBlogs".equals(methodName)) { + log.info("获取用户博客"); + responseContent = getUserBlogs(); + } else if ("metaWeblog.getCategories".equals(methodName)) { + log.info("获取分类"); + responseContent = getCategories(); + } else if ("metaWeblog.getRecentPosts".equals(methodName)) { + + } else if ("metaWeblog.newPost".equals(methodName)) { + Post post = parsetPost(methodCall); + post.setUser(user); + post = postService.save(post); + final StrBuilder strBuilder = new StrBuilder(""); + strBuilder.append(""); + strBuilder.append(post.getPostId()); + strBuilder.append(""); + responseContent = strBuilder.toString(); + } else if ("metaWeblog.getPost".equals(methodName)) { + final Long postId = Long.parseLong(params.getJSONObject(0).getJSONObject("value").optString("string")); + responseContent = getPost(postId); + } else if ("metaWeblog.editPost".equals(methodName)) { + Post post = parsetPost(methodCall); + final Long postId = Long.parseLong(params.getJSONObject(0).getJSONObject("value").optString("string")); + post.setPostId(postId); + post.setUser(user); + postService.save(post); + final StrBuilder strBuilder = new StrBuilder(""); + strBuilder.append(""); + strBuilder.append(postId); + strBuilder.append(""); + responseContent = strBuilder.toString(); + } else if ("blogger.deletePost".equals(methodName)) { + final Long postId = Long.parseLong(params.getJSONObject(0).getJSONObject("value").optString("string")); + postService.remove(postId); + final StrBuilder strBuilder = new StrBuilder(""); + strBuilder.append(""); + strBuilder.append(true); + strBuilder.append(""); + responseContent = strBuilder.toString(); + } + + } catch (final Exception e) { + e.printStackTrace(); + } + return responseContent; + } + + /** + * @param methodCall + * @return + * @throws Exception + */ + private Post parsetPost(final JSONObject methodCall) throws Exception { + final Post ret = new Post(); + + final JSONArray params = methodCall.getJSONObject("params").getJSONArray("param"); + final JSONObject post = params.getJSONObject(3).getJSONObject("value").getJSONObject("struct"); + final JSONArray members = post.getJSONArray("member"); + for (int i = 0; i < members.length(); i++) { + final JSONObject member = members.getJSONObject(i); + final String name = member.getString("name"); + if("dateCreated".equals(name)){ + final String dateString = member.getJSONObject("value").getString("dateTime.iso8601"); + Date date = DateUtil.parseDate(dateString); + ret.setPostDate(date); + }else if ("title".equals(name)){ + ret.setPostTitle(member.getJSONObject("value").getString("string")); + }else if("description".equals(name)){ + final String content = member.getJSONObject("value").optString("string"); + ret.setPostContent(content); + ret.setPostContentMd(content); + }else if("categories".equals(name)){ + final StrBuilder cateBuilder = new StrBuilder(); + final JSONObject data = member.getJSONObject("value").getJSONObject("array").getJSONObject("data"); + if(0==data.length()){ + throw new Exception("At least one category"); + } + } + } + return ret; + } + + /** + * 根据文章编号获取文章信息 + * + * @param postId 文章编号 + * @return 文章信息xml格式 + */ + private String getPost(Long postId) { + final StrBuilder strBuilder = new StrBuilder(""); + final String posts = buildPost(postId); + strBuilder.append(posts); + strBuilder.append(""); + return strBuilder.toString(); + } + + /** + * 根据文章编号构建文章信息 + * + * @param postId 文章编号 + * @return 文章信息xml格式 + */ + private String buildPost(final Long postId) { + final StrBuilder strBuilder = new StrBuilder(); + final Post post = postService.findByPostId(postId).orElse(new Post()); + strBuilder.append(""); + strBuilder.append("dateCreated"); + strBuilder.append(""); + strBuilder.append(DateUtil.format(post.getPostDate(), "yyyy-MM-dd'T'HH:mm:ssZZ")); + strBuilder.append(""); + strBuilder.append("description"); + strBuilder.append(""); + strBuilder.append(post.getPostSummary()); + strBuilder.append(""); + strBuilder.append("title"); + strBuilder.append(""); + strBuilder.append(post.getPostTitle()); + strBuilder.append(""); + strBuilder.append("categories"); + strBuilder.append(""); + List categories = post.getCategories(); + for (Category category : categories) { + strBuilder.append("").append(category.getCateName()).append(""); + } + strBuilder.append(""); + return strBuilder.toString(); + } + + /** + * 获取用户博客信息 + * + * @return 用户博客信息xml格式 + */ + private String getUserBlogs() { + final StrBuilder strBuilder = new StrBuilder( + ""); + final String blogInfo = buildBlogInfo(); + strBuilder.append(blogInfo); + strBuilder.append(""); + + return strBuilder.toString(); + } + + /** + * 构建博客信息 + * + * @return 博客信息xml节点 + */ + private String buildBlogInfo() { + final String blogId = HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()); + final String blogTitle = HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_TITLE.getProp()); + final StrBuilder strBuilder = new StrBuilder("blogid"); + strBuilder.append(blogId); + strBuilder.append(""); + strBuilder.append("url"); + strBuilder.append(HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp())); + strBuilder.append(""); + strBuilder.append("blogName"); + strBuilder.append(blogTitle); + strBuilder.append(""); + return strBuilder.toString(); + } + + /** + * 组装分类信息 + * + * @return 分类信息xml格式 + * @throws Exception Exception + */ + private String getCategories() throws Exception { + final StrBuilder strBuilder = new StrBuilder( + ""); + final String categories = buildCategories(); + strBuilder.append(categories); + strBuilder.append(""); + + return strBuilder.toString(); + } + + /** + * 构建分类信息 + * + * @return 分类信息xml节点 + * @throws Exception Exception + */ + private String buildCategories() throws Exception { + final StrBuilder strBuilder = new StrBuilder(); + final List categories = categoryService.findAll(); + for (Category category : categories) { + final String cateName = category.getCateName(); + final Long cateId = category.getCateId(); + + strBuilder.append(""); + strBuilder.append("description").append("").append(cateName).append(""); + strBuilder.append("title").append("").append(cateName).append(""); + strBuilder.append("categoryid").append("").append(cateId).append(""); + strBuilder.append("htmlUrl").append("").append(HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp())).append("/categories/").append(cateName).append(""); + strBuilder.append(""); + } + return strBuilder.toString(); + } +} diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiOptionController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiOptionController.java index f47696dff..7af077bb1 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiOptionController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiOptionController.java @@ -5,10 +5,7 @@ import cc.ryanc.halo.model.enums.BlogPropertiesEnum; import cc.ryanc.halo.model.enums.ResponseStatusEnum; import cc.ryanc.halo.service.OptionsService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.Map; @@ -20,6 +17,7 @@ import java.util.Map; * @author : RYAN0UP * @date : 2018/7/19 */ +@CrossOrigin @RestController @RequestMapping(value = "/api/options") public class ApiOptionController { @@ -30,11 +28,36 @@ public class ApiOptionController { /** * 获取所有设置选项 * + *

+ * result json: + *

+     * {
+     *     "code": 200,
+     *     "msg": "OK",
+     *     "result": {
+     *         "blog_start": "",
+     *         "blog_locale": "",
+     *         "blog_url": "",
+     *         "api_token": "",
+     *         "api_status": "",
+     *         "blog_title": "",
+     *         "new_comment_notice": "",
+     *         "smtp_email_enable": "",
+     *         "attach_loc": "",
+     *         "theme": "",
+     *         "comment_reply_notice": "",
+     *         "is_install": "",
+     *         "comment_pass_notice": ""
+     *     }
+     * }
+     *     
+ *

+ * * @return JsonResult */ @GetMapping public JsonResult options() { - Map options = optionsService.findAllOptions(); + final Map options = optionsService.findAllOptions(); //去掉隐私元素 options.remove(BlogPropertiesEnum.MAIL_SMTP_HOST.getProp()); options.remove(BlogPropertiesEnum.MAIL_FROM_NAME.getProp()); @@ -47,12 +70,24 @@ public class ApiOptionController { /** * 获取单个设置项 * + *

+ * result json: + *

+     * {
+     *     "code": 200,
+     *     "msg": "OK",
+     *     "result": ""
+     * }
+     *     
+ *

+ * * @param optionName 设置选项名称 + * * @return JsonResult */ @GetMapping(value = "/{optionName}") public JsonResult option(@PathVariable(value = "optionName") String optionName) { - String optionValue = optionsService.findOneOption(optionName); + final String optionValue = optionsService.findOneOption(optionName); return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), optionValue); } } diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiPageController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiPageController.java index c5fd050f8..0f0126ad1 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiPageController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiPageController.java @@ -6,10 +6,7 @@ import cc.ryanc.halo.model.enums.PostTypeEnum; import cc.ryanc.halo.model.enums.ResponseStatusEnum; import cc.ryanc.halo.service.PostService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** *
@@ -19,6 +16,7 @@ import org.springframework.web.bind.annotation.RestController;
  * @author : RYAN0UP
  * @date : 2018/6/6
  */
+@CrossOrigin
 @RestController
 @RequestMapping(value = "/api/pages")
 public class ApiPageController {
@@ -29,13 +27,45 @@ public class ApiPageController {
     /**
      * 获取单个页面
      *
+     * 

+ * result json: + *

+     * {
+     *     "code": 200,
+     *     "msg": "OK",
+     *     "result": {
+     *         "postId": ,
+     *         "user": {},
+     *         "postTitle": "",
+     *         "postType": "",
+     *         "postContentMd": "",
+     *         "postContent": "",
+     *         "postUrl": "",
+     *         "postSummary": ,
+     *         "categories": [],
+     *         "tags": [],
+     *         "comments": [],
+     *         "postThumbnail": "",
+     *         "postDate": "",
+     *         "postUpdate": "",
+     *         "postStatus": 0,
+     *         "postViews": 0,
+     *         "allowComment": 1,
+     *         "customTpl": ""
+     *     }
+     * }
+     *     
+ *

+ * * @param postId postId + * * @return JsonResult */ @GetMapping(value = "/{postId}") public JsonResult pages(@PathVariable(value = "postId") Long postId) { - Post post = postService.findByPostId(postId, PostTypeEnum.POST_TYPE_PAGE.getDesc()); + final Post post = postService.findByPostId(postId, PostTypeEnum.POST_TYPE_PAGE.getDesc()); if (null != post) { + postService.cacheViews(post.getPostId()); return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), post); } else { return new JsonResult(ResponseStatusEnum.NOTFOUND.getCode(), ResponseStatusEnum.NOTFOUND.getMsg()); diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiPostController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiPostController.java index 29cf3fb30..afdf492e9 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiPostController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiPostController.java @@ -14,12 +14,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; +import org.springframework.web.bind.annotation.*; /** *
@@ -29,6 +24,7 @@ import java.util.List;
  * @author : RYAN0UP
  * @date : 2018/6/6
  */
+@CrossOrigin
 @RestController
 @RequestMapping(value = "/api/posts")
 public class ApiPostController {
@@ -39,44 +35,126 @@ public class ApiPostController {
     /**
      * 获取文章列表 分页
      *
+     * 

+ * result api + *

+     * {
+     *     "code": 200,
+     *     "msg": "OK",
+     *     "result": {
+     *         "content": [
+     *             {
+     *                 "postId": ,
+     *                 "user": {},
+     *                 "postTitle": "",
+     *                 "postType": "",
+     *                 "postContentMd": "",
+     *                 "postContent": "",
+     *                 "postUrl": "",
+     *                 "postSummary": "",
+     *                 "categories": [],
+     *                 "tags": [],
+     *                 "comments": [],
+     *                 "postThumbnail": "",
+     *                 "postDate": "",
+     *                 "postUpdate": "",
+     *                 "postStatus": 0,
+     *                 "postViews": 0,
+     *                 "allowComment": 1,
+     *                 "customTpl": ""
+     *             }
+     *         ],
+     *         "pageable": {
+     *             "sort": {
+     *                 "sorted": true,
+     *                 "unsorted": false,
+     *                 "empty": false
+     *             },
+     *             "offset": 0,
+     *             "pageSize": 10,
+     *             "pageNumber": 0,
+     *             "unpaged": false,
+     *             "paged": true
+     *         },
+     *         "last": true,
+     *         "totalElements": 1,
+     *         "totalPages": 1,
+     *         "size": 10,
+     *         "number": 0,
+     *         "first": true,
+     *         "numberOfElements": 1,
+     *         "sort": {
+     *             "sorted": true,
+     *             "unsorted": false,
+     *             "empty": false
+     *         },
+     *         "empty": false
+     *     }
+     * }
+     *     
+ *

+ * * @param page 页码 + * * @return JsonResult */ @GetMapping(value = "/page/{page}") public JsonResult posts(@PathVariable(value = "page") Integer page) { - Sort sort = new Sort(Sort.Direction.DESC, "postDate"); - Integer size = 10; + final Sort sort = new Sort(Sort.Direction.DESC, "postDate"); + int size = 10; if (StrUtil.isNotBlank(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp()))) { size = Integer.parseInt(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp())); } - Pageable pageable = PageRequest.of(page - 1, size, sort); - Page posts = postService.findPostByStatus(PostStatusEnum.PUBLISHED.getCode(), PostTypeEnum.POST_TYPE_POST.getDesc(), pageable); + final Pageable pageable = PageRequest.of(page - 1, size, sort); + final Page posts = postService.findPostByStatus(PostStatusEnum.PUBLISHED.getCode(), PostTypeEnum.POST_TYPE_POST.getDesc(), pageable); if (null == posts) { return new JsonResult(ResponseStatusEnum.EMPTY.getCode(), ResponseStatusEnum.EMPTY.getMsg()); } return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), posts); } - @GetMapping(value = "/hot") - public JsonResult hotPosts() { - List posts = postService.hotPosts(); - if (null != posts && posts.size() > 0) { - return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), posts); - } else { - return new JsonResult(ResponseStatusEnum.EMPTY.getCode(), ResponseStatusEnum.EMPTY.getMsg()); - } - } - /** * 获取单个文章信息 * + *

+ * result json: + *

+     * {
+     *     "code": 200,
+     *     "msg": "OK",
+     *     "result": {
+     *         "postId": ,
+     *         "user": {},
+     *         "postTitle": "",
+     *         "postType": "",
+     *         "postContentMd": "",
+     *         "postContent": "",
+     *         "postUrl": "",
+     *         "postSummary": "",
+     *         "categories": [],
+     *         "tags": [],
+     *         "comments": [],
+     *         "postThumbnail": "",
+     *         "postDate": "",
+     *         "postUpdate": "",
+     *         "postStatus": 0,
+     *         "postViews": 0,
+     *         "allowComment": 1,
+     *         "customTpl": ""
+     *     }
+     * }
+     *     
+ *

+ * * @param postId 文章编号 + * * @return JsonResult */ @GetMapping(value = "/{postId}") public JsonResult posts(@PathVariable(value = "postId") Long postId) { - Post post = postService.findByPostId(postId, PostTypeEnum.POST_TYPE_POST.getDesc()); + final Post post = postService.findByPostId(postId, PostTypeEnum.POST_TYPE_POST.getDesc()); if (null != post) { + postService.cacheViews(post.getPostId()); return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), post); } else { return new JsonResult(ResponseStatusEnum.NOTFOUND.getCode(), ResponseStatusEnum.NOTFOUND.getMsg()); diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiTagController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiTagController.java index 6f40da8fc..a3362504e 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiTagController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiTagController.java @@ -5,10 +5,7 @@ import cc.ryanc.halo.model.dto.JsonResult; import cc.ryanc.halo.model.enums.ResponseStatusEnum; import cc.ryanc.halo.service.TagService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -20,6 +17,7 @@ import java.util.List; * @author : RYAN0UP * @date : 2018/6/6 */ +@CrossOrigin @RestController @RequestMapping(value = "/api/tags") public class ApiTagController { @@ -30,11 +28,28 @@ public class ApiTagController { /** * 获取所有标签 * + *

+ * result json: + *

+     * {
+     *     "code": 200,
+     *     "msg": "OK",
+     *     "result": [
+     *         {
+     *             "tagId": ,
+     *             "tagName": "",
+     *             "tagUrl": ""
+     *         }
+     *     ]
+     * }
+     *     
+ *

+ * * @return JsonResult */ @GetMapping public JsonResult tags() { - List tags = tagService.findAllTags(); + final List tags = tagService.findAll(); if (null != tags && tags.size() > 0) { return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), tags); } else { @@ -45,12 +60,27 @@ public class ApiTagController { /** * 获取单个标签的信息 * + *

+ * result json: + *

+     * {
+     *     "code": 200,
+     *     "msg": "OK",
+     *     "result": {
+     *         "tagId": ,
+     *         "tagName": "",
+     *         "tagUrl": ""
+     *     }
+     * }
+     *     
+ *

+ * * @param tagUrl tagUrl * @return JsonResult */ @GetMapping(value = "/{tagUrl}") public JsonResult tags(@PathVariable("tagUrl") String tagUrl) { - Tag tag = tagService.findByTagUrl(tagUrl); + final Tag tag = tagService.findByTagUrl(tagUrl); if (null != tag) { return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), tag); } else { diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiUserController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiUserController.java index e10e9fdb4..ca3bd74d2 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiUserController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiUserController.java @@ -5,6 +5,7 @@ import cc.ryanc.halo.model.dto.JsonResult; import cc.ryanc.halo.model.enums.ResponseStatusEnum; import cc.ryanc.halo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -17,6 +18,7 @@ import org.springframework.web.bind.annotation.RestController; * @author : RYAN0UP * @date : 2018/6/6 */ +@CrossOrigin @RestController @RequestMapping(value = "/api/user") public class ApiUserController { @@ -27,11 +29,28 @@ public class ApiUserController { /** * 获取博主信息 * + *

+ * result json: + *

+     * {
+     *     "code": 200,
+     *     "msg": "OK",
+     *     "result": {
+     *         "userId": ,
+     *         "userDisplayName": "",
+     *         "userEmail": "",
+     *         "userAvatar": "",
+     *         "userDesc": ""
+     *     }
+     * }
+     *     
+ *

+ * * @return JsonResult */ @GetMapping public JsonResult user() { - User user = userService.findUser(); + final User user = userService.findUser(); return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), user); } } diff --git a/src/main/java/cc/ryanc/halo/web/controller/core/BaseController.java b/src/main/java/cc/ryanc/halo/web/controller/core/BaseController.java index 1b02f573c..2c28ebaf2 100755 --- a/src/main/java/cc/ryanc/halo/web/controller/core/BaseController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/core/BaseController.java @@ -1,41 +1,41 @@ -package cc.ryanc.halo.web.controller.core; - -import cn.hutool.core.text.StrBuilder; - -/** - *
- *     Controller抽象类
- * 
- * - * @author : RYAN0UP - * @date : 2017/12/15 - */ -public abstract class BaseController { - - /** - * 定义默认主题 - */ - public static String THEME = "anatole"; - - /** - * 根据主题名称渲染页面 - * - * @param pageName pageName - * @return 返回拼接好的模板路径 - */ - public String render(String pageName) { - StrBuilder themeStr = new StrBuilder("themes/"); - themeStr.append(THEME); - themeStr.append("/"); - return themeStr.append(pageName).toString(); - } - - /** - * 渲染404页面 - * - * @return redirect:/404 - */ - public String renderNotFound() { - return "redirect:/404"; - } -} +package cc.ryanc.halo.web.controller.core; + +import cn.hutool.core.text.StrBuilder; + +/** + *
+ *     Controller抽象类
+ * 
+ * + * @author : RYAN0UP + * @date : 2017/12/15 + */ +public abstract class BaseController { + + /** + * 定义默认主题 + */ + public static String THEME = "anatole"; + + /** + * 根据主题名称渲染页面 + * + * @param pageName pageName + * @return 返回拼接好的模板路径 + */ + public String render(String pageName) { + final StrBuilder themeStr = new StrBuilder("themes/"); + themeStr.append(THEME); + themeStr.append("/"); + return themeStr.append(pageName).toString(); + } + + /** + * 渲染404页面 + * + * @return redirect:/404 + */ + public String renderNotFound() { + return "redirect:/404"; + } +} diff --git a/src/main/java/cc/ryanc/halo/web/controller/core/CommonController.java b/src/main/java/cc/ryanc/halo/web/controller/core/CommonController.java index c86e1295d..43b6f1afa 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/core/CommonController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/core/CommonController.java @@ -1,72 +1,72 @@ -package cc.ryanc.halo.web.controller.core; - -import cc.ryanc.halo.model.enums.CommonParamsEnum; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.web.servlet.error.ErrorController; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; - -import javax.servlet.http.HttpServletRequest; - -/** - *
- *     错误页面控制器
- * 
- * - * @author : RYAN0UP - * @date : 2017/12/26 - */ -@Slf4j -@Controller -public class CommonController implements ErrorController { - - private static final String ERROR_PATH = "/error"; - - /** - * 渲染404,500 - * - * @param request request - * @return String - */ - @GetMapping(value = ERROR_PATH) - public String handleError(HttpServletRequest request) { - Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code"); - if (statusCode.equals(CommonParamsEnum.NOT_FOUND.getValue())) { - return "redirect:/404"; - } else { - return "redirect:/500"; - } - } - - /** - * 渲染404页面 - * - * @param model model - * @return String - */ - @GetMapping(value = "/404") - public String fourZeroFour() { - return "common/error/404"; - } - - /** - * 渲染500页面 - * - * @param model model - * @return String - */ - @GetMapping(value = "/500") - public String fiveZeroZero() { - return "common/error/500"; - } - - /** - * Returns the path of the error page. - * - * @return the error path - */ - @Override - public String getErrorPath() { - return ERROR_PATH; - } -} +package cc.ryanc.halo.web.controller.core; + +import cc.ryanc.halo.model.enums.CommonParamsEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.web.servlet.error.ErrorController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +import javax.servlet.http.HttpServletRequest; + +/** + *
+ *     错误页面控制器
+ * 
+ * + * @author : RYAN0UP + * @date : 2017/12/26 + */ +@Slf4j +@Controller +public class CommonController implements ErrorController { + + private static final String ERROR_PATH = "/error"; + + /** + * 渲染404,500 + * + * @param request request + * @return String + */ + @GetMapping(value = ERROR_PATH) + public String handleError(HttpServletRequest request) { + final Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code"); + if (statusCode.equals(CommonParamsEnum.NOT_FOUND.getValue())) { + return "redirect:/404"; + } else { + return "redirect:/500"; + } + } + + /** + * 渲染404页面 + * + * @param model model + * @return String + */ + @GetMapping(value = "/404") + public String fourZeroFour() { + return "common/error/404"; + } + + /** + * 渲染500页面 + * + * @param model model + * @return String + */ + @GetMapping(value = "/500") + public String fiveZeroZero() { + return "common/error/500"; + } + + /** + * Returns the path of the error page. + * + * @return the error path + */ + @Override + public String getErrorPath() { + return ERROR_PATH; + } +} diff --git a/src/main/java/cc/ryanc/halo/web/controller/core/InstallController.java b/src/main/java/cc/ryanc/halo/web/controller/core/InstallController.java index 18d97eb9d..8317ad3df 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/core/InstallController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/core/InstallController.java @@ -2,15 +2,14 @@ package cc.ryanc.halo.web.controller.core; import cc.ryanc.halo.model.domain.*; import cc.ryanc.halo.model.dto.HaloConst; +import cc.ryanc.halo.model.dto.JsonResult; import cc.ryanc.halo.model.dto.LogsRecord; -import cc.ryanc.halo.model.enums.AllowCommentEnum; -import cc.ryanc.halo.model.enums.BlogPropertiesEnum; -import cc.ryanc.halo.model.enums.TrueFalseEnum; +import cc.ryanc.halo.model.enums.*; import cc.ryanc.halo.service.*; +import cc.ryanc.halo.utils.MarkdownUtils; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; -import cn.hutool.extra.servlet.ServletUtil; import freemarker.template.Configuration; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -20,7 +19,9 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** *
@@ -63,6 +64,7 @@ public class InstallController {
      * 渲染安装页面
      *
      * @param model model
+     *
      * @return 模板路径
      */
     @GetMapping
@@ -90,24 +92,25 @@ public class InstallController {
      * @param userEmail       用户邮箱
      * @param userPwd         用户密码
      * @param request         request
-     * @return true:安装成功,false:安装失败
+     *
+     * @return JsonResult
      */
     @PostMapping(value = "/do")
     @ResponseBody
-    public boolean doInstall(@RequestParam("blogLocale") String blogLocale,
-                             @RequestParam("blogTitle") String blogTitle,
-                             @RequestParam("blogUrl") String blogUrl,
-                             @RequestParam("userName") String userName,
-                             @RequestParam("userDisplayName") String userDisplayName,
-                             @RequestParam("userEmail") String userEmail,
-                             @RequestParam("userPwd") String userPwd,
-                             HttpServletRequest request) {
+    public JsonResult doInstall(@RequestParam("blogLocale") String blogLocale,
+                                @RequestParam("blogTitle") String blogTitle,
+                                @RequestParam("blogUrl") String blogUrl,
+                                @RequestParam("userName") String userName,
+                                @RequestParam("userDisplayName") String userDisplayName,
+                                @RequestParam("userEmail") String userEmail,
+                                @RequestParam("userPwd") String userPwd,
+                                HttpServletRequest request) {
         try {
             if (StrUtil.equals(TrueFalseEnum.TRUE.getDesc(), HaloConst.OPTIONS.get(BlogPropertiesEnum.IS_INSTALL.getProp()))) {
-                return false;
+                return new JsonResult(ResultCodeEnum.FAIL.getCode(), "该博客已初始化,不能再次安装!");
             }
             //创建新的用户
-            User user = new User();
+            final User user = new User();
             user.setUserName(userName);
             if (StrUtil.isBlank(userDisplayName)) {
                 userDisplayName = userName;
@@ -115,102 +118,84 @@ public class InstallController {
             user.setUserDisplayName(userDisplayName);
             user.setUserEmail(userEmail);
             user.setUserPass(SecureUtil.md5(userPwd));
-            userService.saveByUser(user);
+            userService.save(user);
 
             //默认分类
-            Category category = new Category();
+            final Category category = new Category();
             category.setCateName("未分类");
             category.setCateUrl("default");
             category.setCateDesc("未分类");
-            categoryService.saveByCategory(category);
+            categoryService.save(category);
 
             //第一篇文章
-            Post post = new Post();
-            List categories = new ArrayList<>();
+            final Post post = new Post();
+            final List categories = new ArrayList<>();
             categories.add(category);
             post.setPostTitle("Hello Halo!");
             post.setPostContentMd("# Hello Halo!\n" +
                     "欢迎使用Halo进行创作,删除这篇文章后赶紧开始吧。");
-            post.setPostContent("

Hello Halo!

欢迎使用Halo进行创作,删除这篇文章后赶紧开始吧。

\n"); + post.setPostContent(MarkdownUtils.renderMarkdown(post.getPostContentMd())); post.setPostSummary("欢迎使用Halo进行创作,删除这篇文章后赶紧开始吧。"); post.setPostStatus(0); - post.setPostDate(DateUtil.date()); post.setPostUrl("hello-halo"); post.setUser(user); post.setCategories(categories); post.setAllowComment(AllowCommentEnum.ALLOW.getCode()); - postService.saveByPost(post); + postService.save(post); //第一个评论 - Comment comment = new Comment(); + final Comment comment = new Comment(); comment.setPost(post); comment.setCommentAuthor("ruibaby"); comment.setCommentAuthorEmail("i@ryanc.cc"); comment.setCommentAuthorUrl("https://ryanc.cc"); comment.setCommentAuthorIp("127.0.0.1"); - comment.setCommentAuthorAvatarMd5("7cc7f29278071bd4dce995612d428834"); - comment.setCommentDate(DateUtil.date()); + comment.setCommentAuthorAvatarMd5(SecureUtil.md5("i@ryanc.cc")); comment.setCommentContent("欢迎,欢迎!"); comment.setCommentStatus(0); comment.setCommentAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36"); comment.setIsAdmin(0); - commentService.saveByComment(comment); + commentService.save(comment); - optionsService.saveOption(BlogPropertiesEnum.IS_INSTALL.getProp(), TrueFalseEnum.TRUE.getDesc()); - - //语言设置 - optionsService.saveOption(BlogPropertiesEnum.BLOG_LOCALE.getProp(),blogLocale); - //保存博客标题和博客地址设置 - optionsService.saveOption(BlogPropertiesEnum.BLOG_TITLE.getProp(), blogTitle); - optionsService.saveOption(BlogPropertiesEnum.BLOG_URL.getProp(), blogUrl); - - //设置默认主题 - optionsService.saveOption(BlogPropertiesEnum.THEME.getProp(), "anatole"); - - //建立网站时间 - optionsService.saveOption(BlogPropertiesEnum.BLOG_START.getProp(), DateUtil.format(DateUtil.date(),"yyyy-MM-dd")); - - //默认不配置邮件系统 - optionsService.saveOption(BlogPropertiesEnum.SMTP_EMAIL_ENABLE.getProp(), TrueFalseEnum.FALSE.getDesc()); - - //新评论,审核通过,回复,默认不通知 - optionsService.saveOption(BlogPropertiesEnum.NEW_COMMENT_NOTICE.getProp(), TrueFalseEnum.FALSE.getDesc()); - optionsService.saveOption(BlogPropertiesEnum.COMMENT_PASS_NOTICE.getProp(), TrueFalseEnum.FALSE.getDesc()); - optionsService.saveOption(BlogPropertiesEnum.COMMENT_REPLY_NOTICE.getProp(), TrueFalseEnum.FALSE.getDesc()); + final Map options = new HashMap<>(); + options.put(BlogPropertiesEnum.IS_INSTALL.getProp(), TrueFalseEnum.TRUE.getDesc()); + options.put(BlogPropertiesEnum.BLOG_LOCALE.getProp(), blogLocale); + options.put(BlogPropertiesEnum.BLOG_TITLE.getProp(), blogTitle); + options.put(BlogPropertiesEnum.BLOG_URL.getProp(), blogUrl); + options.put(BlogPropertiesEnum.THEME.getProp(), "anatole"); + options.put(BlogPropertiesEnum.BLOG_START.getProp(), DateUtil.format(DateUtil.date(), "yyyy-MM-dd")); + options.put(BlogPropertiesEnum.SMTP_EMAIL_ENABLE.getProp(), TrueFalseEnum.FALSE.getDesc()); + options.put(BlogPropertiesEnum.NEW_COMMENT_NOTICE.getProp(), TrueFalseEnum.FALSE.getDesc()); + options.put(BlogPropertiesEnum.COMMENT_PASS_NOTICE.getProp(), TrueFalseEnum.FALSE.getDesc()); + options.put(BlogPropertiesEnum.COMMENT_REPLY_NOTICE.getProp(), TrueFalseEnum.FALSE.getDesc()); + options.put(BlogPropertiesEnum.ATTACH_LOC.getProp(), AttachLocationEnum.SERVER.getDesc()); + optionsService.saveOptions(options); //更新日志 - logsService.saveByLogs( - new Logs( - LogsRecord.INSTALL, - "安装成功,欢迎使用Halo。", - ServletUtil.getClientIP(request), - DateUtil.date() - ) - ); + logsService.save(LogsRecord.INSTALL, "安装成功,欢迎使用Halo。", request); - Menu menuIndex = new Menu(); + final Menu menuIndex = new Menu(); menuIndex.setMenuName("首页"); menuIndex.setMenuUrl("/"); menuIndex.setMenuSort(1); - menuIndex.setMenuIcon(""); - menuService.saveByMenu(menuIndex); + menuIndex.setMenuIcon(" "); + menuService.save(menuIndex); - Menu menuArchive = new Menu(); + final Menu menuArchive = new Menu(); menuArchive.setMenuName("归档"); menuArchive.setMenuUrl("/archives"); menuArchive.setMenuSort(2); - menuArchive.setMenuIcon(""); - menuService.saveByMenu(menuArchive); + menuArchive.setMenuIcon(" "); + menuService.save(menuArchive); HaloConst.OPTIONS.clear(); HaloConst.OPTIONS = optionsService.findAllOptions(); - - configuration.setSharedVariable("options", optionsService.findAllOptions()); + configuration.setSharedVariable("options", HaloConst.OPTIONS); configuration.setSharedVariable("user", userService.findUser()); } catch (Exception e) { log.error(e.getMessage()); - return false; + return new JsonResult(ResultCodeEnum.FAIL.getCode(), e.getMessage()); } - return true; + return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), "安装成功!"); } } diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java index 8af254e9b..520afc667 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java @@ -13,19 +13,22 @@ import cc.ryanc.halo.web.controller.core.BaseController; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.PageUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.extra.servlet.ServletUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -43,6 +46,8 @@ import java.util.List; @RequestMapping(value = "/archives") public class FrontArchiveController extends BaseController { + private static final String POSTS_CACHE_NAME = "posts"; + @Autowired private PostService postService; @@ -72,13 +77,13 @@ public class FrontArchiveController extends BaseController { @PathVariable(value = "page") Integer page) { //所有文章数据,分页,material主题适用 - Sort sort = new Sort(Sort.Direction.DESC, "postDate"); - Pageable pageable = PageRequest.of(page - 1, 5, sort); - Page posts = postService.findPostByStatus(PostStatusEnum.PUBLISHED.getCode(), PostTypeEnum.POST_TYPE_POST.getDesc(), pageable); + final Sort sort = new Sort(Sort.Direction.DESC, "postDate"); + final Pageable pageable = PageRequest.of(page - 1, 5, sort); + final Page posts = postService.findPostByStatus(PostStatusEnum.PUBLISHED.getCode(), PostTypeEnum.POST_TYPE_POST.getDesc(), pageable); if (null == posts) { return this.renderNotFound(); } - model.addAttribute("is_archives",true); + model.addAttribute("is_archives", true); model.addAttribute("posts", posts); return this.render("archives"); } @@ -95,11 +100,11 @@ public class FrontArchiveController extends BaseController { public String archives(Model model, @PathVariable(value = "year") String year, @PathVariable(value = "month") String month) { - Page posts = postService.findPostByYearAndMonth(year, month, null); + final Page posts = postService.findPostByYearAndMonth(year, month, null); if (null == posts) { return this.renderNotFound(); } - model.addAttribute("is_archives",true); + model.addAttribute("is_archives", true); model.addAttribute("posts", posts); return this.render("archives"); } @@ -113,24 +118,26 @@ public class FrontArchiveController extends BaseController { */ @GetMapping(value = "{postUrl}") public String getPost(@PathVariable String postUrl, - @RequestParam(value = "cp",defaultValue = "1") Integer cp, + @RequestParam(value = "cp", defaultValue = "1") Integer cp, + HttpServletRequest request, Model model) { - Post post = postService.findByPostUrl(postUrl, PostTypeEnum.POST_TYPE_POST.getDesc()); + final Post post = postService.findByPostUrl(postUrl, PostTypeEnum.POST_TYPE_POST.getDesc()); if (null == post || !post.getPostStatus().equals(PostStatusEnum.PUBLISHED.getCode())) { return this.renderNotFound(); } //获得当前文章的发布日期 - Date postDate = post.getPostDate(); - //查询当前文章日期之前的所有文章 - List beforePosts = postService.findByPostDateBefore(postDate); - //查询当前文章日期之后的所有文章 - List afterPosts = postService.findByPostDateAfter(postDate); - - if (null != beforePosts && beforePosts.size() > 0) { - model.addAttribute("beforePost", beforePosts.get(beforePosts.size() - 1)); + final Date postDate = post.getPostDate(); + final Post prePost = postService.getPrePost(postDate); + final Post nextPost = postService.getNextPost(postDate); + if (null != prePost) { + //兼容老版本主题 + model.addAttribute("beforePost", prePost); + model.addAttribute("prePost", prePost); } - if (null != afterPosts && afterPosts.size() > 0) { - model.addAttribute("afterPost", afterPosts.get(afterPosts.size() - 1)); + if (null != nextPost) { + //兼容老版本主题 + model.addAttribute("afterPost", nextPost); + model.addAttribute("nextPost", nextPost); } List comments = null; if (StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.NEW_COMMENT_NEED_CHECK.getProp()), TrueFalseEnum.TRUE.getDesc()) || HaloConst.OPTIONS.get(BlogPropertiesEnum.NEW_COMMENT_NEED_CHECK.getProp()) == null) { @@ -139,29 +146,61 @@ public class FrontArchiveController extends BaseController { comments = commentService.findCommentsByPostAndCommentStatusNot(post, CommentStatusEnum.RECYCLE.getCode()); } //获取文章的标签用作keywords - List tags = post.getTags(); - List tagWords = new ArrayList<>(); + final List tags = post.getTags(); + final List tagWords = new ArrayList<>(); if (tags != null) { for (Tag tag : tags) { tagWords.add(tag.getTagName()); } } //默认显示10条 - Integer size = 10; + int size = 10; //获取每页评论条数 if (StrUtil.isNotBlank(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_COMMENTS.getProp()))) { size = Integer.parseInt(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_COMMENTS.getProp())); } //评论分页 - ListPage commentsPage = new ListPage(CommentUtil.getComments(comments),cp, size); - int[] rainbow = PageUtil.rainbow(cp, commentsPage.getTotalPage(), 3); - model.addAttribute("is_post",true); - model.addAttribute("post", post); + final ListPage commentsPage = new ListPage(CommentUtil.getComments(comments), cp, size); + final int[] rainbow = PageUtil.rainbow(cp, commentsPage.getTotalPage(), 3); + model.addAttribute("is_post", true); model.addAttribute("comments", commentsPage); model.addAttribute("commentsCount", comments.size()); model.addAttribute("rainbow", rainbow); model.addAttribute("tagWords", CollUtil.join(tagWords, ",")); - postService.updatePostView(post); + postService.cacheViews(post.getPostId()); + + //判断文章是否有加密 + if (StrUtil.isNotEmpty(post.getPostPassword())) { + Cookie cookie = ServletUtil.getCookie(request, "halo-post-password-" + post.getPostId()); + if (null == cookie) { + post.setPostSummary("该文章为加密文章"); + post.setPostContent("

该文章为加密文章,输入正确的密码即可访问。

"); + } + } + model.addAttribute("post", post); return this.render("post"); } + + /** + * 验证文章密码 + * + * @param postId postId + * @param postPassword postPassword + * @param response response + * @return String + */ + @PostMapping(value = "/verifyPostPassword") + @CacheEvict(value = POSTS_CACHE_NAME, allEntries = true, beforeInvocation = true) + public String verifyPostPassword(@RequestParam(value = "postId") Long postId, + @RequestParam(value = "postPassword") String postPassword, + HttpServletResponse response) { + final Post post = postService.findByPostId(postId, PostTypeEnum.POST_TYPE_POST.getDesc()); + if (null == post) { + return this.renderNotFound(); + } + if (SecureUtil.md5(postPassword).equals(post.getPostPassword())) { + ServletUtil.addCookie(response, "halo-post-password-" + post.getPostId(), SecureUtil.md5(postPassword)); + } + return "redirect:/archives/" + post.getPostUrl(); + } } diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontCategoryController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontCategoryController.java index e3a288cb3..c0c385111 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontCategoryController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontCategoryController.java @@ -44,11 +44,12 @@ public class FrontCategoryController extends BaseController { * 分类列表页面 * * @param model model + * * @return String */ @GetMapping public String categories(Model model) { - List categories = categoryService.findAllCategories(); + final List categories = categoryService.findAll(); model.addAttribute("categories", categories); return this.render("categories"); } @@ -58,6 +59,7 @@ public class FrontCategoryController extends BaseController { * * @param model model * @param cateUrl cateUrl + * * @return string */ @GetMapping(value = "{cateUrl}") @@ -72,25 +74,26 @@ public class FrontCategoryController extends BaseController { * @param model model * @param cateUrl 分类目录路径 * @param page 页码 + * * @return String */ @GetMapping("{cateUrl}/page/{page}") public String categories(Model model, @PathVariable("cateUrl") String cateUrl, @PathVariable("page") Integer page) { - Category category = categoryService.findByCateUrl(cateUrl); + final Category category = categoryService.findByCateUrl(cateUrl); if (null == category) { return this.renderNotFound(); } - Sort sort = new Sort(Sort.Direction.DESC, "postDate"); - Integer size = 10; + final Sort sort = new Sort(Sort.Direction.DESC, "postDate"); + int size = 10; if (StrUtil.isNotBlank(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp()))) { size = Integer.parseInt(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp())); } - Pageable pageable = PageRequest.of(page - 1, size, sort); - Page posts = postService.findPostByCategories(category, pageable); - int[] rainbow = PageUtil.rainbow(page, posts.getTotalPages(), 3); - model.addAttribute("is_categories",true); + final Pageable pageable = PageRequest.of(page - 1, size, sort); + final Page posts = postService.findPostByCategories(category, pageable); + final int[] rainbow = PageUtil.rainbow(page, posts.getTotalPages(), 3); + model.addAttribute("is_categories", true); model.addAttribute("posts", posts); model.addAttribute("rainbow", rainbow); model.addAttribute("category", category); diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontCommentController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontCommentController.java index faf6e05d1..4658f1a1a 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontCommentController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontCommentController.java @@ -13,6 +13,7 @@ import cc.ryanc.halo.utils.CommentUtil; import cc.ryanc.halo.utils.OwoUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Validator; +import cn.hutool.core.text.StrBuilder; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.URLUtil; import cn.hutool.crypto.SecureUtil; @@ -60,45 +61,13 @@ public class FrontCommentController { @Autowired private MailService mailService; - /** - * 获取文章的评论 - * - * @param postId postId 文章编号 - * @return List - */ - @GetMapping(value = "/getComment/{postId}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) - @ResponseBody - public List getComment(@PathVariable Long postId) { - Optional post = postService.findByPostId(postId); - Sort sort = new Sort(Sort.Direction.DESC, "commentDate"); - Pageable pageable = PageRequest.of(0, 999, sort); - List comments = commentService.findCommentsByPostAndCommentStatus(post.get(), pageable, CommentStatusEnum.PUBLISHED.getCode()).getContent(); - return CommentUtil.getComments(comments); - } - - /** - * 加载评论 - * - * @param page 页码 - * @param post 当前文章 - * @return List - */ - @GetMapping(value = "/loadComment") - @ResponseBody - public List loadComment(@RequestParam(value = "page") Integer page, - @RequestParam(value = "post") Post post) { - Sort sort = new Sort(Sort.Direction.DESC, "commentDate"); - Pageable pageable = PageRequest.of(page - 1, 10, sort); - List comments = commentService.findCommentsByPostAndCommentStatus(post, pageable, CommentStatusEnum.PUBLISHED.getCode()).getContent(); - return comments; - } - /** * 提交新评论 * * @param comment comment实体 * @param post post实体 * @param request request + * * @return JsonResult */ @PostMapping(value = "/newComment") @@ -114,10 +83,9 @@ public class FrontCommentController { } try { Comment lastComment = null; - post = postService.findByPostId(post.getPostId()).get(); + post = postService.findByPostId(post.getPostId()).orElse(new Post()); comment.setCommentAuthorEmail(HtmlUtil.escape(comment.getCommentAuthorEmail()).toLowerCase()); comment.setPost(post); - comment.setCommentDate(DateUtil.date()); comment.setCommentAuthorIp(ServletUtil.getClientIP(request)); comment.setIsAdmin(0); comment.setCommentAuthor(HtmlUtil.escape(comment.getCommentAuthor())); @@ -125,17 +93,22 @@ public class FrontCommentController { comment.setCommentAuthorAvatarMd5(SecureUtil.md5(comment.getCommentAuthorEmail())); } if (comment.getCommentParent() > 0) { - lastComment = commentService.findCommentById(comment.getCommentParent()).get(); - String lastContent = "@" + lastComment.getCommentAuthor() + " "; - comment.setCommentContent(lastContent + OwoUtil.markToImg(HtmlUtil.escape(comment.getCommentContent()).replace("<br/>", "
"))); + lastComment = commentService.findCommentById(comment.getCommentParent()).orElse(new Comment()); + final StrBuilder buildContent = new StrBuilder("@"); + buildContent.append(lastComment.getCommentAuthor()); + buildContent.append(" "); + buildContent.append(OwoUtil.markToImg(HtmlUtil.escape(comment.getCommentContent()).replace("<br/>", "
"))); + comment.setCommentContent(buildContent.toString()); } else { //将评论内容的字符专为安全字符 comment.setCommentContent(OwoUtil.markToImg(HtmlUtil.escape(comment.getCommentContent()).replace("<br/>", "
"))); } if (StrUtil.isNotEmpty(comment.getCommentAuthorUrl())) { - comment.setCommentAuthorUrl(URLUtil.formatUrl(comment.getCommentAuthorUrl())); + comment.setCommentAuthorUrl(URLUtil.normalize(comment.getCommentAuthorUrl())); } - commentService.saveByComment(comment); + commentService.save(comment); if (comment.getCommentParent() > 0) { new EmailToParent(comment, lastComment, post).start(); new EmailToAdmin(comment, post).start(); @@ -169,14 +142,19 @@ public class FrontCommentController { if (StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.SMTP_EMAIL_ENABLE.getProp()), TrueFalseEnum.TRUE.getDesc()) && StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.NEW_COMMENT_NOTICE.getProp()), TrueFalseEnum.TRUE.getDesc())) { try { //发送邮件到博主 - Map map = new HashMap<>(5); + final Map map = new HashMap<>(5); + final StrBuilder pageUrl = new StrBuilder(HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp())); + if (StrUtil.equals(post.getPostType(), PostTypeEnum.POST_TYPE_POST.getDesc())) { + pageUrl.append("/archives/"); + } else { + pageUrl.append("/p/"); + } + pageUrl.append(post.getPostUrl()); + pageUrl.append("#comment-id-"); + pageUrl.append(comment.getCommentId()); + map.put("pageUrl", pageUrl.toString()); map.put("author", userService.findUser().getUserDisplayName()); map.put("pageName", post.getPostTitle()); - if (StrUtil.equals(post.getPostType(), PostTypeEnum.POST_TYPE_POST.getDesc())) { - map.put("pageUrl", HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()) + "/archives/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId()); - } else { - map.put("pageUrl", HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()) + "/p/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId()); - } map.put("visitor", comment.getCommentAuthor()); map.put("commentContent", comment.getCommentContent()); mailService.sendTemplateMail(userService.findUser().getUserEmail(), "有新的评论", map, "common/mail_template/mail_admin.ftl"); @@ -206,15 +184,21 @@ public class FrontCommentController { //发送通知给对方 if (StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.SMTP_EMAIL_ENABLE.getProp()), TrueFalseEnum.TRUE.getDesc()) && StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.NEW_COMMENT_NOTICE.getProp()), TrueFalseEnum.TRUE.getDesc())) { if (Validator.isEmail(lastComment.getCommentAuthorEmail())) { - Map map = new HashMap<>(8); + final Map map = new HashMap<>(8); + final StrBuilder pageUrl = new StrBuilder(HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp())); + if (StrUtil.equals(post.getPostType(), PostTypeEnum.POST_TYPE_POST.getDesc())) { + pageUrl.append("/archives/"); + + } else { + pageUrl.append("/p/"); + } + pageUrl.append(post.getPostUrl()); + pageUrl.append("#comment-id-"); + pageUrl.append(comment.getCommentId()); + map.put("pageUrl", pageUrl.toString()); map.put("blogTitle", HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_TITLE.getProp())); map.put("commentAuthor", lastComment.getCommentAuthor()); map.put("pageName", lastComment.getPost().getPostTitle()); - if (StrUtil.equals(post.getPostType(), PostTypeEnum.POST_TYPE_POST.getDesc())) { - map.put("pageUrl", HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()) + "/archives/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId()); - } else { - map.put("pageUrl", HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_URL.getProp()) + "/p/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId()); - } map.put("commentContent", lastComment.getCommentContent()); map.put("replyAuthor", comment.getCommentAuthor()); map.put("replyContent", comment.getCommentContent()); diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontIndexController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontIndexController.java index 309adecab..c7e6751cf 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontIndexController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontIndexController.java @@ -15,9 +15,9 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.*; - -import java.util.List; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; /** *
@@ -44,7 +44,6 @@ public class FrontIndexController extends BaseController {
      */
     @GetMapping
     public String index(Model model) {
-        //调用方法渲染首页
         return this.index(model, 1);
     }
 
@@ -59,60 +58,22 @@ public class FrontIndexController extends BaseController {
     @GetMapping(value = "page/{page}")
     public String index(Model model,
                         @PathVariable(value = "page") Integer page) {
-        Sort sort = new Sort(Sort.Direction.DESC, "postDate");
+        final Sort sort = new Sort(Sort.Direction.DESC, "postDate");
         //默认显示10条
-        Integer size = 10;
-        //尝试加载设置选项,用于设置显示条数
+        int size = 10;
         if (StrUtil.isNotBlank(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp()))) {
             size = Integer.parseInt(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp()));
         }
         //所有文章数据,分页
-        Pageable pageable = PageRequest.of(page - 1, size, sort);
-        Page posts = postService.findPostByStatus(pageable);
+        final Pageable pageable = PageRequest.of(page - 1, size, sort);
+        final Page posts = postService.findPostByStatus(pageable);
         if (null == posts) {
             return this.renderNotFound();
         }
-        int[] rainbow = PageUtil.rainbow(page, posts.getTotalPages(), 3);
-        model.addAttribute("is_index",true);
+        final int[] rainbow = PageUtil.rainbow(page, posts.getTotalPages(), 3);
+        model.addAttribute("is_index", true);
         model.addAttribute("posts", posts);
         model.addAttribute("rainbow", rainbow);
         return this.render("index");
     }
-
-    /**
-     * ajax分页
-     *
-     * @param page page 当前页码
-     * @return List
-     */
-    @GetMapping(value = "next")
-    @ResponseBody
-    public List ajaxIndex(@RequestParam(value = "page") Integer page) {
-        Sort sort = new Sort(Sort.Direction.DESC, "postDate");
-        //默认显示10条
-        Integer size = 10;
-        //尝试加载设置选项,用于设置显示条数
-        if (StrUtil.isNotBlank(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp()))) {
-            size = Integer.parseInt(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp()));
-        }
-
-        //文章数据,只获取文章,没有分页
-        Pageable pageable = PageRequest.of(page - 1, size, sort);
-        List posts = postService.findPostByStatus(pageable).getContent();
-        return posts;
-    }
-
-    /**
-     * 搜索文章
-     *
-     * @param keyword keyword
-     * @param model   model
-     * @return 模板路径/themes/{theme}/index
-     */
-    @GetMapping(value = "search")
-    public String search(@RequestParam("keyword") String keyword, Model model) {
-        Page posts = postService.searchByKeywords(keyword, null);
-        model.addAttribute("posts", posts);
-        return this.render("index");
-    }
 }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontOthersController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontOthersController.java
index 385cb1fbe..4b3001046 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontOthersController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontOthersController.java
@@ -44,10 +44,15 @@ public class FrontOthersController {
             rssPosts = "20";
         }
         //获取文章列表并根据时间排序
-        Sort sort = new Sort(Sort.Direction.DESC, "postDate");
-        Pageable pageable = PageRequest.of(0, Integer.parseInt(rssPosts), sort);
-        Page postsPage = postService.findPostByStatus(0, PostTypeEnum.POST_TYPE_POST.getDesc(), pageable);
-        List posts = postsPage.getContent();
+        final Sort sort = new Sort(Sort.Direction.DESC, "postDate");
+        final Pageable pageable = PageRequest.of(0, Integer.parseInt(rssPosts), sort);
+        final Page postsPage = postService.findPostByStatus(0, PostTypeEnum.POST_TYPE_POST.getDesc(), pageable);
+        final List posts = postsPage.getContent();
+        for (Post post : posts) {
+            if(StrUtil.isNotEmpty(post.getPostPassword())){
+                post.setPostContent("该文章为加密文章");
+            }
+        }
         return postService.buildRss(posts);
     }
 
@@ -60,10 +65,15 @@ public class FrontOthersController {
     @ResponseBody
     public String siteMap() {
         //获取文章列表并根据时间排序
-        Sort sort = new Sort(Sort.Direction.DESC, "postDate");
-        Pageable pageable = PageRequest.of(0, 999, sort);
-        Page postsPage = postService.findPostByStatus(0, PostTypeEnum.POST_TYPE_POST.getDesc(), pageable);
-        List posts = postsPage.getContent();
+        final Sort sort = new Sort(Sort.Direction.DESC, "postDate");
+        final Pageable pageable = PageRequest.of(0, 999, sort);
+        final Page postsPage = postService.findPostByStatus(0, PostTypeEnum.POST_TYPE_POST.getDesc(), pageable);
+        final List posts = postsPage.getContent();
+        for (Post post : posts) {
+            if(StrUtil.isNotEmpty(post.getPostPassword())){
+                post.setPostContent("该文章为加密文章");
+            }
+        }
         return postService.buildSiteMap(posts);
     }
 }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java
index 9b77409ac..c46bcd552 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java
@@ -5,10 +5,7 @@ import cc.ryanc.halo.model.domain.Gallery;
 import cc.ryanc.halo.model.domain.Post;
 import cc.ryanc.halo.model.dto.HaloConst;
 import cc.ryanc.halo.model.dto.ListPage;
-import cc.ryanc.halo.model.enums.BlogPropertiesEnum;
-import cc.ryanc.halo.model.enums.CommentStatusEnum;
-import cc.ryanc.halo.model.enums.PostTypeEnum;
-import cc.ryanc.halo.model.enums.TrueFalseEnum;
+import cc.ryanc.halo.model.enums.*;
 import cc.ryanc.halo.service.CommentService;
 import cc.ryanc.halo.service.GalleryService;
 import cc.ryanc.halo.service.PostService;
@@ -52,7 +49,7 @@ public class FrontPageController extends BaseController {
      */
     @GetMapping(value = "/gallery")
     public String gallery(Model model) {
-        List galleries = galleryService.findAllGalleries();
+        final List galleries = galleryService.findAll();
         model.addAttribute("galleries", galleries);
         return this.render("gallery");
     }
@@ -72,14 +69,15 @@ public class FrontPageController extends BaseController {
      *
      * @param postUrl 页面路径
      * @param model   model
+     *
      * @return 模板路径/themes/{theme}/post
      */
     @GetMapping(value = "/p/{postUrl}")
     public String getPage(@PathVariable(value = "postUrl") String postUrl,
-                          @RequestParam(value = "cp",defaultValue = "1") Integer cp,
+                          @RequestParam(value = "cp", defaultValue = "1") Integer cp,
                           Model model) {
-        Post post = postService.findByPostUrl(postUrl, PostTypeEnum.POST_TYPE_PAGE.getDesc());
-        if (null == post) {
+        final Post post = postService.findByPostUrl(postUrl, PostTypeEnum.POST_TYPE_PAGE.getDesc());
+        if (null == post || !post.getPostStatus().equals(PostStatusEnum.PUBLISHED.getCode())) {
             return this.renderNotFound();
         }
         List comments = null;
@@ -89,23 +87,22 @@ public class FrontPageController extends BaseController {
             comments = commentService.findCommentsByPostAndCommentStatusNot(post, CommentStatusEnum.RECYCLE.getCode());
         }
         //默认显示10条
-        Integer size = 10;
-        //获取每页评论条数
+        int size = 10;
         if (StrUtil.isNotBlank(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_COMMENTS.getProp()))) {
             size = Integer.parseInt(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_COMMENTS.getProp()));
         }
         //评论分页
-        ListPage commentsPage = new ListPage(CommentUtil.getComments(comments),cp, size);
-        int[] rainbow = PageUtil.rainbow(cp, commentsPage.getTotalPage(), 3);
-        model.addAttribute("is_page",true);
+        final ListPage commentsPage = new ListPage(CommentUtil.getComments(comments), cp, size);
+        final int[] rainbow = PageUtil.rainbow(cp, commentsPage.getTotalPage(), 3);
+        model.addAttribute("is_page", true);
         model.addAttribute("post", post);
         model.addAttribute("comments", commentsPage);
         model.addAttribute("commentsCount", comments.size());
         model.addAttribute("rainbow", rainbow);
-        postService.updatePostView(post);
+        postService.cacheViews(post.getPostId());
 
         //如果设置了自定义模板,则渲染自定义模板
-        if(StrUtil.isNotEmpty(post.getCustomTpl())){
+        if (StrUtil.isNotEmpty(post.getCustomTpl())) {
             return this.render(post.getCustomTpl());
         }
         return this.render("page");
diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontSearchController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontSearchController.java
new file mode 100644
index 000000000..f231767ed
--- /dev/null
+++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontSearchController.java
@@ -0,0 +1,81 @@
+package cc.ryanc.halo.web.controller.front;
+
+import cc.ryanc.halo.model.domain.Post;
+import cc.ryanc.halo.model.dto.HaloConst;
+import cc.ryanc.halo.model.enums.BlogPropertiesEnum;
+import cc.ryanc.halo.model.enums.PostStatusEnum;
+import cc.ryanc.halo.model.enums.PostTypeEnum;
+import cc.ryanc.halo.service.PostService;
+import cc.ryanc.halo.web.controller.core.BaseController;
+import cn.hutool.core.util.PageUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HtmlUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * 
+ *     文章检索
+ * 
+ * + * @author : RYAN0UP + * @date : 2019/1/11 + */ +@Slf4j +@Controller +@RequestMapping(value = "/search") +public class FrontSearchController extends BaseController { + + @Autowired + private PostService postService; + + /** + * 文章检索 + * + * @param model model + * @param keyword 关键词 + * @return 模板路径/themes/{theme}/search + */ + @GetMapping + public String search(Model model, + @RequestParam(value = "keyword") String keyword) { + return this.search(model, HtmlUtil.escape(keyword), 1); + } + + /** + * 文章检索 分页 + * + * @param model model + * @param keyword 关键词 + * @param page 当前页码 + * @return 模板路径/themes/{theme}/search + */ + @GetMapping(value = "page/{page}") + public String search(Model model, + @RequestParam(value = "keyword") String keyword, + @PathVariable(value = "page") Integer page) { + final Sort sort = new Sort(Sort.Direction.DESC, "postDate"); + int size = 10; + if (StrUtil.isNotBlank(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp()))) { + size = Integer.parseInt(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp())); + } + final Pageable pageable = PageRequest.of(page - 1, size, sort); + final Page posts = postService.searchPosts(HtmlUtil.escape(keyword),PostTypeEnum.POST_TYPE_POST.getDesc(),PostStatusEnum.PUBLISHED.getCode(),pageable); + final int[] rainbow = PageUtil.rainbow(page, posts.getTotalPages(), 3); + model.addAttribute("is_search", true); + model.addAttribute("keyword", keyword); + model.addAttribute("posts", posts); + model.addAttribute("rainbow", rainbow); + return this.render("search"); + } +} diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontTagController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontTagController.java index e38e8ee1f..fce93bbd2 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontTagController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontTagController.java @@ -53,6 +53,7 @@ public class FrontTagController extends BaseController { * * @param tagUrl 标签路径 * @param model model + * * @return String */ @GetMapping(value = "{tagUrl}") @@ -67,25 +68,26 @@ public class FrontTagController extends BaseController { * @param model model * @param tagUrl 标签路径 * @param page 页码 + * * @return String */ @GetMapping(value = "{tagUrl}/page/{page}") public String tags(Model model, @PathVariable("tagUrl") String tagUrl, @PathVariable("page") Integer page) { - Tag tag = tagService.findByTagUrl(tagUrl); - if(null==tag){ + final Tag tag = tagService.findByTagUrl(tagUrl); + if (null == tag) { return this.renderNotFound(); } - Sort sort = new Sort(Sort.Direction.DESC, "postDate"); - Integer size = 10; + final Sort sort = new Sort(Sort.Direction.DESC, "postDate"); + int size = 10; if (StrUtil.isNotBlank(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp()))) { size = Integer.parseInt(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_POSTS.getProp())); } - Pageable pageable = PageRequest.of(page - 1, size, sort); - Page posts = postService.findPostsByTags(tag, pageable); - int[] rainbow = PageUtil.rainbow(page, posts.getTotalPages(), 3); - model.addAttribute("is_tags",true); + final Pageable pageable = PageRequest.of(page - 1, size, sort); + final Page posts = postService.findPostsByTags(tag, pageable); + final int[] rainbow = PageUtil.rainbow(page, posts.getTotalPages(), 3); + model.addAttribute("is_tags", true); model.addAttribute("posts", posts); model.addAttribute("rainbow", rainbow); model.addAttribute("tag", tag); diff --git a/src/main/java/cc/ryanc/halo/web/interceptor/ApiInterceptor.java b/src/main/java/cc/ryanc/halo/web/interceptor/ApiInterceptor.java index 3f5f931ac..89841c385 100644 --- a/src/main/java/cc/ryanc/halo/web/interceptor/ApiInterceptor.java +++ b/src/main/java/cc/ryanc/halo/web/interceptor/ApiInterceptor.java @@ -25,10 +25,12 @@ import java.util.Map; @Component public class ApiInterceptor implements HandlerInterceptor { + private static final String TOKEN = "token"; + @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (StrUtil.equals(TrueFalseEnum.TRUE.getDesc(), HaloConst.OPTIONS.get(BlogPropertiesEnum.API_STATUS.getProp()))) { - if (StrUtil.equals(request.getHeader("token"), HaloConst.OPTIONS.get(BlogPropertiesEnum.API_TOKEN.getProp()))) { + if (StrUtil.equals(request.getHeader(TOKEN), HaloConst.OPTIONS.get(BlogPropertiesEnum.API_TOKEN.getProp()))) { return true; } else { response.setCharacterEncoding("UTF-8"); diff --git a/src/main/java/cc/ryanc/halo/web/interceptor/LocaleInterceptor.java b/src/main/java/cc/ryanc/halo/web/interceptor/LocaleInterceptor.java index bae4a1dc8..73b301ecb 100644 --- a/src/main/java/cc/ryanc/halo/web/interceptor/LocaleInterceptor.java +++ b/src/main/java/cc/ryanc/halo/web/interceptor/LocaleInterceptor.java @@ -23,6 +23,10 @@ public class LocaleInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + final Object attribute = request.getSession().getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME); + if (null != attribute) { + return true; + } if (StrUtil.equals(LocaleEnum.EN_US.getValue(), HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_LOCALE.getProp()))) { request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, new Locale("en", "US")); } else { diff --git a/src/main/java/cc/ryanc/halo/web/interceptor/LoginInterceptor.java b/src/main/java/cc/ryanc/halo/web/interceptor/LoginInterceptor.java index 4eab588e7..11e618b4c 100755 --- a/src/main/java/cc/ryanc/halo/web/interceptor/LoginInterceptor.java +++ b/src/main/java/cc/ryanc/halo/web/interceptor/LoginInterceptor.java @@ -21,7 +21,7 @@ public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - Object obj = request.getSession().getAttribute(HaloConst.USER_SESSION_KEY); + final Object obj = request.getSession().getAttribute(HaloConst.USER_SESSION_KEY); //如果user不为空则放行 if (null != obj) { return true; diff --git a/src/main/resources/application-docker.yaml b/src/main/resources/application-docker.yaml deleted file mode 100755 index e827c48e0..000000000 --- a/src/main/resources/application-docker.yaml +++ /dev/null @@ -1,58 +0,0 @@ -server: - port: 8090 - use-forward-headers: true - undertow: - io-threads: 2 - worker-threads: 36 - buffer-size: 1024 - directBuffers: true -spring: - datasource: - type: com.zaxxer.hikari.HikariDataSource - - # H2database 配置 - driver-class-name: org.h2.Driver - url: jdbc:h2:file:~/halo/halo - username: admin - password: 123456 - - #MySql配置 -# driver-class-name: com.mysql.jdbc.Driver -# url: jdbc:mysql://127.0.0.1:3306/halodb?characterEncoding=utf8&useSSL=false -# username: root -# password: 123456 - - h2: - console: - settings: - web-allow-others: false - path: /h2-console - enabled: true - jpa: - hibernate: - ddl-auto: update - show-sql: false - freemarker: - allow-request-override: false - cache: false - check-template-location: true - charset: utf-8 - content-type: text/html - expose-request-attributes: false - expose-session-attributes: false - expose-spring-macro-helpers: true - suffix: .ftl - settings: - auto_import: /spring.ftl as spring - servlet: - multipart: - max-file-size: 10MB - max-request-size: 10MB - - # 多语言资源文件路径 - messages: - basename: i18n/messages -logging: - file: ./logs/log.log - - diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index dbb4f6015..d5f36e489 100755 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -6,6 +6,9 @@ server: worker-threads: 36 buffer-size: 1024 directBuffers: true + servlet: + session: + timeout: 86400s spring: datasource: type: com.zaxxer.hikari.HikariDataSource @@ -17,8 +20,8 @@ spring: password: 123456 #MySql配置 -# driver-class-name: com.mysql.jdbc.Driver -# url: jdbc:mysql://127.0.0.1:3306/halodb?characterEncoding=utf8&useSSL=false +# driver-class-name: com.mysql.cj.jdbc.Driver +# url: jdbc:mysql://127.0.0.1:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai # username: root # password: 123456 diff --git a/src/main/resources/config/cron.setting b/src/main/resources/config/cron.setting index 87e3c922b..4525521c8 100644 --- a/src/main/resources/config/cron.setting +++ b/src/main/resources/config/cron.setting @@ -1,4 +1 @@ -[cc.ryanc.halo.web.controller.admin] -BackupController.backupResources = 0 0 1 * * ? -BackupController.backupDatabase = 0 0 2 * * ? -BackupController.backupPosts = 0 0 3 * * ? +cc.ryanc.halo.task.PostSyncTask.postSync = 0 0 * * * ? \ No newline at end of file diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties index c8a974c92..25964be91 100644 --- a/src/main/resources/i18n/messages.properties +++ b/src/main/resources/i18n/messages.properties @@ -98,11 +98,12 @@ admin.logs.th.log-datetime = 产生时间 # 附件管理页面 admin.attachments.title = 附件管理 admin.attachments.btn.upload = 上传 -admin.attachments.js.modal.detail-title = 附件详情 admin.attachments.modal.detail-title = 附件详情 +admin.attachments.modal.upload-attach = 上传附件 admin.attachments.modal.form.attach-name = 附件名: admin.attachments.modal.form.attach-type = 附件类型: admin.attachments.modal.form.attach-path = 附件路径: +admin.attachments.modal.form.attach-small-path = 附件缩略图路径: admin.attachments.modal.form.attach-created = 上传时间: admin.attachments.modal.form.attach-storage = 附件大小: admin.attachments.modal.form.attach-size = 图片尺寸: @@ -129,9 +130,9 @@ admin.categories.title = 分类目录 admin.categories.bread.posts = 文章管理 admin.categories.text.all-categories = 所有分类目录 admin.categories.text.edit-category = 修改分类目录 -admin.categories.text.add-category = 修改分类目录 +admin.categories.text.add-category = 添加分类目录 admin.categories.form.cate-name = 名称 -admin.categories.form.cate-name-tips = 页面上所显示的名称 +admin.categories.form.cate-name-tips = *页面上所显示的名称 admin.categories.form.cate-url = 路径名称 admin.categories.form.cate-url-tips = *这是文章路径上显示的名称,最好为英文 admin.categories.form.cate-desc = 描述 @@ -146,7 +147,7 @@ admin.menus.text.update-menu = 修改菜单 admin.menus.text.all-menus = 所有菜单 admin.menus.text.add-menu = 添加菜单 admin.menus.form.menu-name = 名称 -admin.menus.form.menu-name-tips = 页面上所显示的名称 +admin.menus.form.menu-name-tips = *页面上所显示的名称 admin.menus.form.menu-url = 路径 admin.menus.form.menu-url-tips = *菜单的路径 admin.menus.form.menu-sort = 排序编号 @@ -216,7 +217,9 @@ admin.setting.form.upyun-oss-bucket = 空间名称: admin.setting.form.upyun-oss-operator = 操作员名称: admin.setting.form.upyun-oss-pwd = 操作员密码: admin.setting.form.upyun-oss-src = 文件目录: +admin.setting.form.upyun-oss-small = 处理策略: admin.setting.form.qiniu-domain = 域名: +admin.setting.form.qiniu-small-url = 处理策略: admin.setting.form.admin-pjax = 启用 pjax: admin.setting.form.admin-loading = 后台加载动画: admin.setting.form.admin-layout = 后台布局: @@ -253,7 +256,7 @@ admin.pages.title = 页面管理 admin.pages.btn.new-page = 新建页面 admin.pages.bread.all-pages = 所有页面 admin.pages.tab.internal-page = 内置页面 -admin.pages.tab.Custom-page = 自定义页面 +admin.pages.tab.custom-page = 自定义页面 admin.pages.links = 友情链接 admin.pages.gallery = 图库页面 @@ -319,7 +322,7 @@ admin.tags.text.edit-tag = 修改标签 admin.tags.text.add-tag = 添加标签 admin.tags.text.all-tags = 所有标签 admin.tags.form.tag-name = 名称 -admin.tags.form.tag-name-tips = 页面上所显示的名称 +admin.tags.form.tag-name-tips = *页面上所显示的名称 admin.tags.form.tag-url = 路径名称 admin.tags.form.tag-url-tips = *这是文章路径上显示的名称,最好为英文 diff --git a/src/main/resources/i18n/messages_en_US.properties b/src/main/resources/i18n/messages_en_US.properties index 0e6b57c09..984b3672e 100644 --- a/src/main/resources/i18n/messages_en_US.properties +++ b/src/main/resources/i18n/messages_en_US.properties @@ -98,11 +98,12 @@ admin.logs.th.log-datetime = Time of production # attachments page admin.attachments.title = Attachments manage admin.attachments.btn.upload = Upload -admin.attachments.js.modal.detail-title = Attachment details admin.attachments.modal.detail-title = Attachment details +admin.attachments.modal.upload-attach = Upload attachment admin.attachments.modal.form.attach-name = Attachment name: admin.attachments.modal.form.attach-type = Attachment type: admin.attachments.modal.form.attach-path = Attachment path: +admin.attachments.modal.form.attach-small-path = Attachment small path: admin.attachments.modal.form.attach-created = Upload time: admin.attachments.modal.form.attach-storage = Attachment size: admin.attachments.modal.form.attach-size = Size of the picture: @@ -131,7 +132,7 @@ admin.categories.text.all-categories = All categories admin.categories.text.edit-category = Edit category admin.categories.text.add-category = Add category admin.categories.form.cate-name = Category name -admin.categories.form.cate-name-tips = The name displayed on the page. +admin.categories.form.cate-name-tips = *The name displayed on the page. admin.categories.form.cate-url = Category url admin.categories.form.cate-url-tips = *This is the name displayed on the article path,preferably in English. admin.categories.form.cate-desc = Category description @@ -146,7 +147,7 @@ admin.menus.text.update-menu = Edit menu admin.menus.text.all-menus = All menus admin.menus.text.add-menu = Add menu admin.menus.form.menu-name = Menu name -admin.menus.form.menu-name-tips = The name displayed on the page +admin.menus.form.menu-name-tips = *The name displayed on the page admin.menus.form.menu-url = Menu url admin.menus.form.menu-url-tips = *Path to the menu admin.menus.form.menu-sort = Sort number @@ -216,7 +217,9 @@ admin.setting.form.upyun-oss-bucket = Bucket name: admin.setting.form.upyun-oss-operator = Operator admin.setting.form.upyun-oss-pwd = Password admin.setting.form.upyun-oss-src = File Directory: +admin.setting.form.upyun-oss-small = Strategy: admin.setting.form.qiniu-domain = Domain: +admin.setting.form.qiniu-small-url = Strategy: admin.setting.form.admin-pjax = Pjax: admin.setting.form.admin-loading = Load animation: admin.setting.form.admin-layout = Layout: @@ -253,7 +256,7 @@ admin.pages.title = Pages manage admin.pages.btn.new-page = New page admin.pages.bread.all-pages = All pages admin.pages.tab.internal-page = Built-in page -admin.pages.tab.Custom-page = Custom page +admin.pages.tab.custom-page = Custom page admin.pages.links = Links admin.pages.gallery = Gallery page @@ -319,7 +322,7 @@ admin.tags.text.edit-tag = Edit tag admin.tags.text.add-tag = Add tag admin.tags.text.all-tags = All tags admin.tags.form.tag-name = Tag name -admin.tags.form.tag-name-tips = The name displayed on the page +admin.tags.form.tag-name-tips = *The name displayed on the page admin.tags.form.tag-url = Tag url admin.tags.form.tag-url-tips = *This is the name displayed on the article path, preferably in English diff --git a/src/main/resources/i18n/messages_zh_CN.properties b/src/main/resources/i18n/messages_zh_CN.properties index c8a974c92..25964be91 100644 --- a/src/main/resources/i18n/messages_zh_CN.properties +++ b/src/main/resources/i18n/messages_zh_CN.properties @@ -98,11 +98,12 @@ admin.logs.th.log-datetime = 产生时间 # 附件管理页面 admin.attachments.title = 附件管理 admin.attachments.btn.upload = 上传 -admin.attachments.js.modal.detail-title = 附件详情 admin.attachments.modal.detail-title = 附件详情 +admin.attachments.modal.upload-attach = 上传附件 admin.attachments.modal.form.attach-name = 附件名: admin.attachments.modal.form.attach-type = 附件类型: admin.attachments.modal.form.attach-path = 附件路径: +admin.attachments.modal.form.attach-small-path = 附件缩略图路径: admin.attachments.modal.form.attach-created = 上传时间: admin.attachments.modal.form.attach-storage = 附件大小: admin.attachments.modal.form.attach-size = 图片尺寸: @@ -129,9 +130,9 @@ admin.categories.title = 分类目录 admin.categories.bread.posts = 文章管理 admin.categories.text.all-categories = 所有分类目录 admin.categories.text.edit-category = 修改分类目录 -admin.categories.text.add-category = 修改分类目录 +admin.categories.text.add-category = 添加分类目录 admin.categories.form.cate-name = 名称 -admin.categories.form.cate-name-tips = 页面上所显示的名称 +admin.categories.form.cate-name-tips = *页面上所显示的名称 admin.categories.form.cate-url = 路径名称 admin.categories.form.cate-url-tips = *这是文章路径上显示的名称,最好为英文 admin.categories.form.cate-desc = 描述 @@ -146,7 +147,7 @@ admin.menus.text.update-menu = 修改菜单 admin.menus.text.all-menus = 所有菜单 admin.menus.text.add-menu = 添加菜单 admin.menus.form.menu-name = 名称 -admin.menus.form.menu-name-tips = 页面上所显示的名称 +admin.menus.form.menu-name-tips = *页面上所显示的名称 admin.menus.form.menu-url = 路径 admin.menus.form.menu-url-tips = *菜单的路径 admin.menus.form.menu-sort = 排序编号 @@ -216,7 +217,9 @@ admin.setting.form.upyun-oss-bucket = 空间名称: admin.setting.form.upyun-oss-operator = 操作员名称: admin.setting.form.upyun-oss-pwd = 操作员密码: admin.setting.form.upyun-oss-src = 文件目录: +admin.setting.form.upyun-oss-small = 处理策略: admin.setting.form.qiniu-domain = 域名: +admin.setting.form.qiniu-small-url = 处理策略: admin.setting.form.admin-pjax = 启用 pjax: admin.setting.form.admin-loading = 后台加载动画: admin.setting.form.admin-layout = 后台布局: @@ -253,7 +256,7 @@ admin.pages.title = 页面管理 admin.pages.btn.new-page = 新建页面 admin.pages.bread.all-pages = 所有页面 admin.pages.tab.internal-page = 内置页面 -admin.pages.tab.Custom-page = 自定义页面 +admin.pages.tab.custom-page = 自定义页面 admin.pages.links = 友情链接 admin.pages.gallery = 图库页面 @@ -319,7 +322,7 @@ admin.tags.text.edit-tag = 修改标签 admin.tags.text.add-tag = 添加标签 admin.tags.text.all-tags = 所有标签 admin.tags.form.tag-name = 名称 -admin.tags.form.tag-name-tips = 页面上所显示的名称 +admin.tags.form.tag-name-tips = *页面上所显示的名称 admin.tags.form.tag-url = 路径名称 admin.tags.form.tag-url-tips = *这是文章路径上显示的名称,最好为英文 diff --git a/src/main/resources/static/css/AdminLTE.min.css b/src/main/resources/static/css/AdminLTE.min.css deleted file mode 100755 index fd5158e96..000000000 --- a/src/main/resources/static/css/AdminLTE.min.css +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * AdminLTE v2.4.5 - * Author: Almsaeed Studio - * Website: Almsaeed Studio - * License: Open source - MIT - * Please visit http://opensource.org/licenses/MIT for more information - */html,body{height:100%}.layout-boxed html,.layout-boxed body{height:100%}body{font-family:'Source Sans Pro','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:400;overflow-x:hidden;overflow-y:auto}.wrapper{height:100%;position:relative;overflow-x:hidden;overflow-y:auto}.wrapper:before,.wrapper:after{content:" ";display:table}.wrapper:after{clear:both}.layout-boxed .wrapper{max-width:1250px;margin:0 auto;min-height:100%;box-shadow:0 0 8px rgba(0,0,0,0.5);position:relative}.layout-boxed{background-color:#f9fafc}.content-wrapper,.main-footer{-webkit-transition:-webkit-transform .3s ease-in-out,margin .3s ease-in-out;-moz-transition:-moz-transform .3s ease-in-out,margin .3s ease-in-out;-o-transition:-o-transform .3s ease-in-out,margin .3s ease-in-out;transition:transform .3s ease-in-out,margin .3s ease-in-out;margin-left:230px;z-index:820}.layout-top-nav .content-wrapper,.layout-top-nav .main-footer{margin-left:0}@media (max-width:767px){.content-wrapper,.main-footer{margin-left:0}}@media (min-width:768px){.sidebar-collapse .content-wrapper,.sidebar-collapse .main-footer{margin-left:0}}@media (max-width:767px){.sidebar-open .content-wrapper,.sidebar-open .main-footer{-webkit-transform:translate(230px, 0);-ms-transform:translate(230px, 0);-o-transform:translate(230px, 0);transform:translate(230px, 0)}}.content-wrapper{min-height:100%;background-color:#ecf0f5;z-index:800}.main-footer{background:#fff;padding:15px;color:#444;border-top:1px solid #d2d6de}.fixed .main-header,.fixed .main-sidebar,.fixed .left-side{position:fixed}.fixed .main-header{top:0;right:0;left:0}.fixed .content-wrapper,.fixed .right-side{padding-top:50px}@media (max-width:767px){.fixed .content-wrapper,.fixed .right-side{padding-top:100px}}.fixed.layout-boxed .wrapper{max-width:100%}.fixed .wrapper{overflow:hidden}.hold-transition .content-wrapper,.hold-transition .right-side,.hold-transition .main-footer,.hold-transition .main-sidebar,.hold-transition .left-side,.hold-transition .main-header .navbar,.hold-transition .main-header .logo,.hold-transition .menu-open .fa-angle-left{-webkit-transition:none;-o-transition:none;transition:none}.content{min-height:250px;padding:15px;margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:'Source Sans Pro',sans-serif}a{color:#3c8dbc}a:hover,a:active,a:focus{outline:none;text-decoration:none;color:#72afd2}.page-header{margin:10px 0 20px 0;font-size:22px}.page-header>small{color:#666;display:block;margin-top:5px}.main-header{position:relative;max-height:100px;z-index:1030}.main-header .navbar{-webkit-transition:margin-left .3s ease-in-out;-o-transition:margin-left .3s ease-in-out;transition:margin-left .3s ease-in-out;margin-bottom:0;margin-left:230px;border:none;min-height:50px;border-radius:0}.layout-top-nav .main-header .navbar{margin-left:0}.main-header #navbar-search-input.form-control{background:rgba(255,255,255,0.2);border-color:transparent}.main-header #navbar-search-input.form-control:focus,.main-header #navbar-search-input.form-control:active{border-color:rgba(0,0,0,0.1);background:rgba(255,255,255,0.9)}.main-header #navbar-search-input.form-control::-moz-placeholder{color:#ccc;opacity:1}.main-header #navbar-search-input.form-control:-ms-input-placeholder{color:#ccc}.main-header #navbar-search-input.form-control::-webkit-input-placeholder{color:#ccc}.main-header .navbar-custom-menu,.main-header .navbar-right{float:right}@media (max-width:991px){.main-header .navbar-custom-menu a,.main-header .navbar-right a{color:inherit;background:transparent}}@media (max-width:767px){.main-header .navbar-right{float:none}.navbar-collapse .main-header .navbar-right{margin:7.5px -15px}.main-header .navbar-right>li{color:inherit;border:0}}.main-header .sidebar-toggle{float:left;background-color:transparent;background-image:none;padding:15px 15px;font-family:fontAwesome}.main-header .sidebar-toggle:before{content:"\f0c9"}.main-header .sidebar-toggle:hover{color:#fff}.main-header .sidebar-toggle:focus,.main-header .sidebar-toggle:active{background:transparent}.main-header .sidebar-toggle .icon-bar{display:none}.main-header .navbar .nav>li.user>a>.fa,.main-header .navbar .nav>li.user>a>.glyphicon,.main-header .navbar .nav>li.user>a>.ion{margin-right:5px}.main-header .navbar .nav>li>a>.label{position:absolute;top:9px;right:7px;text-align:center;font-size:9px;padding:2px 3px;line-height:.9}.main-header .logo{-webkit-transition:width .3s ease-in-out;-o-transition:width .3s ease-in-out;transition:width .3s ease-in-out;display:block;float:left;height:50px;font-size:20px;line-height:50px;text-align:center;width:230px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;padding:0 15px;font-weight:300;overflow:hidden}.main-header .logo .logo-lg{display:block}.main-header .logo .logo-mini{display:none}.main-header .navbar-brand{color:#fff}.content-header{position:relative;padding:15px 15px 0 15px}.content-header>h1{margin:0;font-size:24px}.content-header>h1>small{font-size:15px;display:inline-block;padding-left:4px;font-weight:300}.content-header>.breadcrumb{float:right;background:transparent;margin-top:0;margin-bottom:0;font-size:12px;padding:7px 5px;position:absolute;top:15px;right:10px;border-radius:2px}.content-header>.breadcrumb>li>a{color:#444;text-decoration:none;display:inline-block}.content-header>.breadcrumb>li>a>.fa,.content-header>.breadcrumb>li>a>.glyphicon,.content-header>.breadcrumb>li>a>.ion{margin-right:5px}.content-header>.breadcrumb>li+li:before{content:'>\00a0'}@media (max-width:991px){.content-header>.breadcrumb{position:relative;margin-top:5px;top:0;right:0;float:none;background:#d2d6de;padding-left:10px}.content-header>.breadcrumb li:before{color:#97a0b3}}.navbar-toggle{color:#fff;border:0;margin:0;padding:15px 15px}@media (max-width:991px){.navbar-custom-menu .navbar-nav>li{float:left}.navbar-custom-menu .navbar-nav{margin:0;float:left}.navbar-custom-menu .navbar-nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px}}@media (max-width:767px){.main-header{position:relative}.main-header .logo,.main-header .navbar{width:100%;float:none}.main-header .navbar{margin:0}.main-header .navbar-custom-menu{float:right}}@media (max-width:991px){.navbar-collapse.pull-left{float:none !important}.navbar-collapse.pull-left+.navbar-custom-menu{display:block;position:absolute;top:0;right:40px}}.main-sidebar{position:absolute;top:0;left:0;padding-top:50px;min-height:100%;width:230px;z-index:810;-webkit-transition:-webkit-transform .3s ease-in-out,width .3s ease-in-out;-moz-transition:-moz-transform .3s ease-in-out,width .3s ease-in-out;-o-transition:-o-transform .3s ease-in-out,width .3s ease-in-out;transition:transform .3s ease-in-out,width .3s ease-in-out}@media (max-width:767px){.main-sidebar{padding-top:100px}}@media (max-width:767px){.main-sidebar{-webkit-transform:translate(-230px, 0);-ms-transform:translate(-230px, 0);-o-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (min-width:768px){.sidebar-collapse .main-sidebar{-webkit-transform:translate(-230px, 0);-ms-transform:translate(-230px, 0);-o-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (max-width:767px){.sidebar-open .main-sidebar{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}}.sidebar{padding-bottom:10px}.sidebar-form input:focus{border-color:transparent}.user-panel{position:relative;width:100%;padding:10px;overflow:hidden}.user-panel:before,.user-panel:after{content:" ";display:table}.user-panel:after{clear:both}.user-panel>.image>img{width:100%;max-width:45px;height:auto}.user-panel>.info{padding:5px 5px 5px 15px;line-height:1;position:absolute;left:55px}.user-panel>.info>p{font-weight:600;margin-bottom:9px}.user-panel>.info>a{text-decoration:none;padding-right:5px;margin-top:3px;font-size:11px}.user-panel>.info>a>.fa,.user-panel>.info>a>.ion,.user-panel>.info>a>.glyphicon{margin-right:3px}.sidebar-menu{list-style:none;margin:0;padding:0}.sidebar-menu>li{position:relative;margin:0;padding:0}.sidebar-menu>li>a{padding:12px 5px 12px 15px;display:block}.sidebar-menu>li>a>.fa,.sidebar-menu>li>a>.glyphicon,.sidebar-menu>li>a>.ion{width:20px}.sidebar-menu>li .label,.sidebar-menu>li .badge{margin-right:5px}.sidebar-menu>li .badge{margin-top:3px}.sidebar-menu li.header{padding:10px 25px 10px 15px;font-size:12px}.sidebar-menu li>a>.fa-angle-left,.sidebar-menu li>a>.pull-right-container>.fa-angle-left{width:auto;height:auto;padding:0;margin-right:10px;-webkit-transition:transform .5s ease;-o-transition:transform .5s ease;transition:transform .5s ease}.sidebar-menu li>a>.fa-angle-left{position:absolute;top:50%;right:10px;margin-top:-8px}.sidebar-menu .menu-open>a>.fa-angle-left,.sidebar-menu .menu-open>a>.pull-right-container>.fa-angle-left{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.sidebar-menu .active>.treeview-menu{display:block}@media (min-width:768px){.sidebar-mini.sidebar-collapse .content-wrapper,.sidebar-mini.sidebar-collapse .right-side,.sidebar-mini.sidebar-collapse .main-footer{margin-left:50px !important;z-index:840}.sidebar-mini.sidebar-collapse .main-sidebar{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0);width:50px !important;z-index:850}.sidebar-mini.sidebar-collapse .sidebar-menu>li{position:relative}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a{margin-right:0}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span{border-top-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li:not(.treeview)>a>span{border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{padding-top:5px;padding-bottom:5px;border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .main-sidebar .user-panel>.info,.sidebar-mini.sidebar-collapse .sidebar-form,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span,.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>.pull-right,.sidebar-mini.sidebar-collapse .sidebar-menu li.header{display:none !important;-webkit-transform:translateZ(0)}.sidebar-mini.sidebar-collapse .main-header .logo{width:50px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-mini{display:block;margin-left:-15px;margin-right:-15px;font-size:18px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-lg{display:none}.sidebar-mini.sidebar-collapse .main-header .navbar{margin-left:50px}}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span:not(.pull-right),.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{display:block !important;position:absolute;width:180px;left:50px}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span{top:0;margin-left:-3px;padding:12px 5px 12px 20px;background-color:inherit}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container{position:relative !important;float:right;width:auto !important;left:180px !important;top:-22px !important;z-index:900}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container>.label:not(:first-of-type){display:none}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{top:44px;margin-left:0}.sidebar-expanded-on-hover .main-footer,.sidebar-expanded-on-hover .content-wrapper{margin-left:50px}.sidebar-expanded-on-hover .main-sidebar{box-shadow:3px 0 8px rgba(0,0,0,0.125)}.sidebar-menu,.main-sidebar .user-panel,.sidebar-menu>li.header{white-space:nowrap;overflow:hidden}.sidebar-menu:hover{overflow:visible}.sidebar-form,.sidebar-menu>li.header{overflow:hidden;text-overflow:clip}.sidebar-menu li>a{position:relative}.sidebar-menu li>a>.pull-right-container{position:absolute;right:10px;top:50%;margin-top:-7px}.control-sidebar-bg{position:fixed;z-index:1000;bottom:0}.control-sidebar-bg,.control-sidebar{top:0;right:-230px;width:230px;-webkit-transition:right .3s ease-in-out;-o-transition:right .3s ease-in-out;transition:right .3s ease-in-out}.control-sidebar{position:absolute;padding-top:50px;z-index:1010}@media (max-width:767px){.control-sidebar{padding-top:100px}}.control-sidebar>.tab-content{padding:10px 15px}.control-sidebar.control-sidebar-open,.control-sidebar.control-sidebar-open+.control-sidebar-bg{right:0}.control-sidebar-open .control-sidebar-bg,.control-sidebar-open .control-sidebar{right:0}@media (min-width:768px){.control-sidebar-open .content-wrapper,.control-sidebar-open .right-side,.control-sidebar-open .main-footer{margin-right:230px}}.fixed .control-sidebar{position:fixed;height:100%;overflow-y:auto;padding-bottom:50px}.nav-tabs.control-sidebar-tabs>li:first-of-type>a,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:hover,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:focus{border-left-width:0}.nav-tabs.control-sidebar-tabs>li>a{border-radius:0}.nav-tabs.control-sidebar-tabs>li>a,.nav-tabs.control-sidebar-tabs>li>a:hover{border-top:none;border-right:none;border-left:1px solid transparent;border-bottom:1px solid transparent}.nav-tabs.control-sidebar-tabs>li>a .icon{font-size:16px}.nav-tabs.control-sidebar-tabs>li.active>a,.nav-tabs.control-sidebar-tabs>li.active>a:hover,.nav-tabs.control-sidebar-tabs>li.active>a:focus,.nav-tabs.control-sidebar-tabs>li.active>a:active{border-top:none;border-right:none;border-bottom:none}@media (max-width:768px){.nav-tabs.control-sidebar-tabs{display:table}.nav-tabs.control-sidebar-tabs>li{display:table-cell}}.control-sidebar-heading{font-weight:400;font-size:16px;padding:10px 0;margin-bottom:10px}.control-sidebar-subheading{display:block;font-weight:400;font-size:14px}.control-sidebar-menu{list-style:none;padding:0;margin:0 -15px}.control-sidebar-menu>li>a{display:block;padding:10px 15px}.control-sidebar-menu>li>a:before,.control-sidebar-menu>li>a:after{content:" ";display:table}.control-sidebar-menu>li>a:after{clear:both}.control-sidebar-menu>li>a>.control-sidebar-subheading{margin-top:0}.control-sidebar-menu .menu-icon{float:left;width:35px;height:35px;border-radius:50%;text-align:center;line-height:35px}.control-sidebar-menu .menu-info{margin-left:45px;margin-top:3px}.control-sidebar-menu .menu-info>.control-sidebar-subheading{margin:0}.control-sidebar-menu .menu-info>p{margin:0;font-size:11px}.control-sidebar-menu .progress{margin:0}.control-sidebar-dark{color:#b8c7ce}.control-sidebar-dark,.control-sidebar-dark+.control-sidebar-bg{background:#222d32}.control-sidebar-dark .nav-tabs.control-sidebar-tabs{border-bottom:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a{background:#181f23;color:#b8c7ce}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#141a1d;border-bottom-color:#141a1d}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:active{background:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover{color:#fff}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#222d32;color:#fff}.control-sidebar-dark .control-sidebar-heading,.control-sidebar-dark .control-sidebar-subheading{color:#fff}.control-sidebar-dark .control-sidebar-menu>li>a:hover{background:#1e282c}.control-sidebar-dark .control-sidebar-menu>li>a .menu-info>p{color:#b8c7ce}.control-sidebar-light{color:#5e5e5e}.control-sidebar-light,.control-sidebar-light+.control-sidebar-bg{background:#f9fafc;border-left:1px solid #d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs{border-bottom:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a{background:#e8ecf4;color:#444}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#d2d6de;border-bottom-color:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:active{background:#eff1f7}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#f9fafc;color:#111}.control-sidebar-light .control-sidebar-heading,.control-sidebar-light .control-sidebar-subheading{color:#111}.control-sidebar-light .control-sidebar-menu{margin-left:-14px}.control-sidebar-light .control-sidebar-menu>li>a:hover{background:#f4f4f5}.control-sidebar-light .control-sidebar-menu>li>a .menu-info>p{color:#5e5e5e}.dropdown-menu{box-shadow:none;border-color:#eee}.dropdown-menu>li>a{color:#777}.dropdown-menu>li>a>.glyphicon,.dropdown-menu>li>a>.fa,.dropdown-menu>li>a>.ion{margin-right:10px}.dropdown-menu>li>a:hover{background-color:#e1e3e9;color:#333}.dropdown-menu>.divider{background-color:#eee}.navbar-nav>.notifications-menu>.dropdown-menu,.navbar-nav>.messages-menu>.dropdown-menu,.navbar-nav>.tasks-menu>.dropdown-menu{width:280px;padding:0 0 0 0;margin:0;top:100%}.navbar-nav>.notifications-menu>.dropdown-menu>li,.navbar-nav>.messages-menu>.dropdown-menu>li,.navbar-nav>.tasks-menu>.dropdown-menu>li{position:relative}.navbar-nav>.notifications-menu>.dropdown-menu>li.header,.navbar-nav>.messages-menu>.dropdown-menu>li.header,.navbar-nav>.tasks-menu>.dropdown-menu>li.header{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:#ffffff;padding:7px 10px;border-bottom:1px solid #f4f4f4;color:#444444;font-size:14px}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px;font-size:12px;background-color:#fff;padding:7px 10px;border-bottom:1px solid #eeeeee;color:#444 !important;text-align:center}@media (max-width:991px){.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{background:#fff !important;color:#444 !important}}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a:hover{text-decoration:none;font-weight:normal}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu,.navbar-nav>.messages-menu>.dropdown-menu>li .menu,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu{max-height:200px;margin:0;padding:0;list-style:none;overflow-x:hidden}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{display:block;white-space:nowrap;border-bottom:1px solid #f4f4f4}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a:hover{background:#f4f4f4;text-decoration:none}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a{color:#444444;overflow:hidden;text-overflow:ellipsis;padding:10px}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.glyphicon,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.fa,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.ion{width:20px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a{margin:0;padding:10px 10px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>div>img{margin:auto 10px auto auto;width:40px;height:40px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4{padding:0;margin:0 0 0 45px;color:#444444;font-size:15px;position:relative}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4>small{color:#999999;font-size:10px;position:absolute;top:0;right:0}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>p{margin:0 0 0 45px;font-size:12px;color:#888888}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:before,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{content:" ";display:table}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{clear:both}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{padding:10px}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>h3{font-size:14px;padding:0;margin:0 0 10px 0;color:#666666}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>.progress{padding:0;margin:0}.navbar-nav>.user-menu>.dropdown-menu{border-top-right-radius:0;border-top-left-radius:0;padding:1px 0 0 0;border-top-width:0;width:280px}.navbar-nav>.user-menu>.dropdown-menu,.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header{height:175px;padding:10px;text-align:center}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>img{z-index:5;height:90px;width:90px;border:3px solid;border-color:transparent;border-color:rgba(255,255,255,0.2)}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p{z-index:5;color:#fff;color:rgba(255,255,255,0.8);font-size:17px;margin-top:10px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p>small{display:block;font-size:12px}.navbar-nav>.user-menu>.dropdown-menu>.user-body{padding:15px;border-bottom:1px solid #f4f4f4;border-top:1px solid #dddddd}.navbar-nav>.user-menu>.dropdown-menu>.user-body:before,.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-body a{color:#444 !important}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-body a{background:#fff !important;color:#444 !important}}.navbar-nav>.user-menu>.dropdown-menu>.user-footer{background-color:#f9f9f9;padding:10px}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:before,.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default{color:#666666}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default:hover{background-color:#f9f9f9}}.navbar-nav>.user-menu .user-image{float:left;width:25px;height:25px;border-radius:50%;margin-right:10px;margin-top:-2px}@media (max-width:767px){.navbar-nav>.user-menu .user-image{float:none;margin-right:0;margin-top:-8px;line-height:10px}}.open:not(.dropup)>.animated-dropdown-menu{backface-visibility:visible !important;-webkit-animation:flipInX .7s both;-o-animation:flipInX .7s both;animation:flipInX .7s both}@keyframes flipInX{0%{transform:perspective(400px) rotate3d(1, 0, 0, 90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotate3d(1, 0, 0, -20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{transform:perspective(400px)}}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 90deg);-webkit-transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -20deg);-webkit-transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{-webkit-transform:perspective(400px)}}.navbar-custom-menu>.navbar-nav>li{position:relative}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:0;left:auto}@media (max-width:991px){.navbar-custom-menu>.navbar-nav{float:right}.navbar-custom-menu>.navbar-nav>li{position:static}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:5%;left:auto;border:1px solid #ddd;background:#fff}}.form-control{border-radius:0;box-shadow:none;border-color:#d2d6de}.form-control:focus{border-color:#3c8dbc;box-shadow:none}.form-control::-moz-placeholder,.form-control:-ms-input-placeholder,.form-control::-webkit-input-placeholder{color:#bbb;opacity:1}.form-control:not(select){-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-group.has-success label{color:#00a65a}.form-group.has-success .form-control,.form-group.has-success .input-group-addon{border-color:#00a65a;box-shadow:none}.form-group.has-success .help-block{color:#00a65a}.form-group.has-warning label{color:#f39c12}.form-group.has-warning .form-control,.form-group.has-warning .input-group-addon{border-color:#f39c12;box-shadow:none}.form-group.has-warning .help-block{color:#f39c12}.form-group.has-error label{color:#dd4b39}.form-group.has-error .form-control,.form-group.has-error .input-group-addon{border-color:#dd4b39;box-shadow:none}.form-group.has-error .help-block{color:#dd4b39}.input-group .input-group-addon{border-radius:0;border-color:#d2d6de;background-color:#fff}.btn-group-vertical .btn.btn-flat:first-of-type,.btn-group-vertical .btn.btn-flat:last-of-type{border-radius:0}.icheck>label{padding-left:0}.form-control-feedback.fa{line-height:34px}.input-lg+.form-control-feedback.fa,.input-group-lg+.form-control-feedback.fa,.form-group-lg .form-control+.form-control-feedback.fa{line-height:46px}.input-sm+.form-control-feedback.fa,.input-group-sm+.form-control-feedback.fa,.form-group-sm .form-control+.form-control-feedback.fa{line-height:30px}.progress,.progress>.progress-bar{-webkit-box-shadow:none;box-shadow:none}.progress,.progress>.progress-bar,.progress .progress-bar,.progress>.progress-bar .progress-bar{border-radius:1px}.progress.sm,.progress-sm{height:10px}.progress.sm,.progress-sm,.progress.sm .progress-bar,.progress-sm .progress-bar{border-radius:1px}.progress.xs,.progress-xs{height:7px}.progress.xs,.progress-xs,.progress.xs .progress-bar,.progress-xs .progress-bar{border-radius:1px}.progress.xxs,.progress-xxs{height:3px}.progress.xxs,.progress-xxs,.progress.xxs .progress-bar,.progress-xxs .progress-bar{border-radius:1px}.progress.vertical{position:relative;width:30px;height:200px;display:inline-block;margin-right:10px}.progress.vertical>.progress-bar{width:100%;position:absolute;bottom:0}.progress.vertical.sm,.progress.vertical.progress-sm{width:20px}.progress.vertical.xs,.progress.vertical.progress-xs{width:10px}.progress.vertical.xxs,.progress.vertical.progress-xxs{width:3px}.progress-group .progress-text{font-weight:600}.progress-group .progress-number{float:right}.table tr>td .progress{margin:0}.progress-bar-light-blue,.progress-bar-primary{background-color:#3c8dbc}.progress-striped .progress-bar-light-blue,.progress-striped .progress-bar-primary{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-green,.progress-bar-success{background-color:#00a65a}.progress-striped .progress-bar-green,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-aqua,.progress-bar-info{background-color:#00c0ef}.progress-striped .progress-bar-aqua,.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-yellow,.progress-bar-warning{background-color:#f39c12}.progress-striped .progress-bar-yellow,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-red,.progress-bar-danger{background-color:#dd4b39}.progress-striped .progress-bar-red,.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.small-box{border-radius:2px;position:relative;display:block;margin-bottom:20px;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.small-box>.inner{padding:10px}.small-box>.small-box-footer{position:relative;text-align:center;padding:3px 0;color:#fff;color:rgba(255,255,255,0.8);display:block;z-index:10;background:rgba(0,0,0,0.1);text-decoration:none}.small-box>.small-box-footer:hover{color:#fff;background:rgba(0,0,0,0.15)}.small-box h3{font-size:38px;font-weight:bold;margin:0 0 10px 0;white-space:nowrap;padding:0}.small-box p{font-size:15px}.small-box p>small{display:block;color:#f9f9f9;font-size:13px;margin-top:5px}.small-box h3,.small-box p{z-index:5}.small-box .icon{-webkit-transition:all .3s linear;-o-transition:all .3s linear;transition:all .3s linear;position:absolute;top:-10px;right:10px;z-index:0;font-size:90px;color:rgba(0,0,0,0.15)}.small-box:hover{text-decoration:none;color:#f9f9f9}.small-box:hover .icon{font-size:95px}@media (max-width:767px){.small-box{text-align:center}.small-box .icon{display:none}.small-box p{font-size:12px}}.box{position:relative;border-radius:3px;background:#ffffff;border-top:3px solid #d2d6de;margin-bottom:20px;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.box.box-primary{border-top-color:#3c8dbc}.box.box-info{border-top-color:#00c0ef}.box.box-danger{border-top-color:#dd4b39}.box.box-warning{border-top-color:#f39c12}.box.box-success{border-top-color:#00a65a}.box.box-default{border-top-color:#d2d6de}.box.collapsed-box .box-body,.box.collapsed-box .box-footer{display:none}.box .nav-stacked>li{border-bottom:1px solid #f4f4f4;margin:0}.box .nav-stacked>li:last-of-type{border-bottom:none}.box.height-control .box-body{max-height:300px;overflow:auto}.box .border-right{border-right:1px solid #f4f4f4}.box .border-left{border-left:1px solid #f4f4f4}.box.box-solid{border-top:0}.box.box-solid>.box-header .btn.btn-default{background:transparent}.box.box-solid>.box-header .btn:hover,.box.box-solid>.box-header a:hover{background:rgba(0,0,0,0.1)}.box.box-solid.box-default{border:1px solid #d2d6de}.box.box-solid.box-default>.box-header{color:#444;background:#d2d6de;background-color:#d2d6de}.box.box-solid.box-default>.box-header a,.box.box-solid.box-default>.box-header .btn{color:#444}.box.box-solid.box-primary{border:1px solid #3c8dbc}.box.box-solid.box-primary>.box-header{color:#fff;background:#3c8dbc;background-color:#3c8dbc}.box.box-solid.box-primary>.box-header a,.box.box-solid.box-primary>.box-header .btn{color:#fff}.box.box-solid.box-info{border:1px solid #00c0ef}.box.box-solid.box-info>.box-header{color:#fff;background:#00c0ef;background-color:#00c0ef}.box.box-solid.box-info>.box-header a,.box.box-solid.box-info>.box-header .btn{color:#fff}.box.box-solid.box-danger{border:1px solid #dd4b39}.box.box-solid.box-danger>.box-header{color:#fff;background:#dd4b39;background-color:#dd4b39}.box.box-solid.box-danger>.box-header a,.box.box-solid.box-danger>.box-header .btn{color:#fff}.box.box-solid.box-warning{border:1px solid #f39c12}.box.box-solid.box-warning>.box-header{color:#fff;background:#f39c12;background-color:#f39c12}.box.box-solid.box-warning>.box-header a,.box.box-solid.box-warning>.box-header .btn{color:#fff}.box.box-solid.box-success{border:1px solid #00a65a}.box.box-solid.box-success>.box-header{color:#fff;background:#00a65a;background-color:#00a65a}.box.box-solid.box-success>.box-header a,.box.box-solid.box-success>.box-header .btn{color:#fff}.box.box-solid>.box-header>.box-tools .btn{border:0;box-shadow:none}.box.box-solid[class*='bg']>.box-header{color:#fff}.box .box-group>.box{margin-bottom:5px}.box .knob-label{text-align:center;color:#333;font-weight:100;font-size:12px;margin-bottom:0.3em}.box>.overlay,.overlay-wrapper>.overlay,.box>.loading-img,.overlay-wrapper>.loading-img{position:absolute;top:0;left:0;width:100%;height:100%}.box .overlay,.overlay-wrapper .overlay{z-index:50;background:rgba(255,255,255,0.7);border-radius:3px}.box .overlay>.fa,.overlay-wrapper .overlay>.fa{position:absolute;top:50%;left:50%;margin-left:-15px;margin-top:-15px;color:#000;font-size:30px}.box .overlay.dark,.overlay-wrapper .overlay.dark{background:rgba(0,0,0,0.5)}.box-header:before,.box-body:before,.box-footer:before,.box-header:after,.box-body:after,.box-footer:after{content:" ";display:table}.box-header:after,.box-body:after,.box-footer:after{clear:both}.box-header{color:#444;display:block;padding:10px;position:relative}.box-header.with-border{border-bottom:1px solid #f4f4f4}.collapsed-box .box-header.with-border{border-bottom:none}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion,.box-header .box-title{display:inline-block;font-size:18px;margin:0;line-height:1}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion{margin-right:5px}.box-header>.box-tools{position:absolute;right:10px;top:5px}.box-header>.box-tools [data-toggle="tooltip"]{position:relative}.box-header>.box-tools.pull-right .dropdown-menu{right:0;left:auto}.box-header>.box-tools .dropdown-menu>li>a{color:#444!important}.btn-box-tool{padding:5px;font-size:12px;background:transparent;color:#97a0b3}.open .btn-box-tool,.btn-box-tool:hover{color:#606c84}.btn-box-tool.btn:active{box-shadow:none}.box-body{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;padding:10px}.no-header .box-body{border-top-right-radius:3px;border-top-left-radius:3px}.box-body>.table{margin-bottom:0}.box-body .fc{margin-top:5px}.box-body .full-width-chart{margin:-19px}.box-body.no-padding .full-width-chart{margin:-9px}.box-body .box-pane{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:3px}.box-body .box-pane-right{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:0}.box-footer{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-top:1px solid #f4f4f4;padding:10px;background-color:#fff}.chart-legend{margin:10px 0}@media (max-width:991px){.chart-legend>li{float:left;margin-right:10px}}.box-comments{background:#f7f7f7}.box-comments .box-comment{padding:8px 0;border-bottom:1px solid #eee}.box-comments .box-comment:before,.box-comments .box-comment:after{content:" ";display:table}.box-comments .box-comment:after{clear:both}.box-comments .box-comment:last-of-type{border-bottom:0}.box-comments .box-comment:first-of-type{padding-top:0}.box-comments .box-comment img{float:left}.box-comments .comment-text{margin-left:40px;color:#555}.box-comments .username{color:#444;display:block;font-weight:600}.box-comments .text-muted{font-weight:400;font-size:12px}.todo-list{margin:0;padding:0;list-style:none;overflow:auto}.todo-list>li{border-radius:2px;padding:10px;background:#f4f4f4;margin-bottom:2px;border-left:2px solid #e6e7e8;color:#444}.todo-list>li:last-of-type{margin-bottom:0}.todo-list>li>input[type='checkbox']{margin:0 10px 0 5px}.todo-list>li .text{display:inline-block;margin-left:5px;font-weight:600}.todo-list>li .label{margin-left:10px;font-size:9px}.todo-list>li .tools{display:none;float:right;color:#dd4b39}.todo-list>li .tools>.fa,.todo-list>li .tools>.glyphicon,.todo-list>li .tools>.ion{margin-right:5px;cursor:pointer}.todo-list>li:hover .tools{display:inline-block}.todo-list>li.done{color:#999}.todo-list>li.done .text{text-decoration:line-through;font-weight:500}.todo-list>li.done .label{background:#d2d6de !important}.todo-list .danger{border-left-color:#dd4b39}.todo-list .warning{border-left-color:#f39c12}.todo-list .info{border-left-color:#00c0ef}.todo-list .success{border-left-color:#00a65a}.todo-list .primary{border-left-color:#3c8dbc}.todo-list .handle{display:inline-block;cursor:move;margin:0 5px}.chat{padding:5px 20px 5px 10px}.chat .item{margin-bottom:10px}.chat .item:before,.chat .item:after{content:" ";display:table}.chat .item:after{clear:both}.chat .item>img{width:40px;height:40px;border:2px solid transparent;border-radius:50%}.chat .item>.online{border:2px solid #00a65a}.chat .item>.offline{border:2px solid #dd4b39}.chat .item>.message{margin-left:55px;margin-top:-40px}.chat .item>.message>.name{display:block;font-weight:600}.chat .item>.attachment{border-radius:3px;background:#f4f4f4;margin-left:65px;margin-right:15px;padding:10px}.chat .item>.attachment>h4{margin:0 0 5px 0;font-weight:600;font-size:14px}.chat .item>.attachment>p,.chat .item>.attachment>.filename{font-weight:600;font-size:13px;font-style:italic;margin:0}.chat .item>.attachment:before,.chat .item>.attachment:after{content:" ";display:table}.chat .item>.attachment:after{clear:both}.box-input{max-width:200px}.modal .panel-body{color:#444}.info-box{display:block;min-height:90px;background:#fff;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:2px;margin-bottom:15px}.info-box small{font-size:14px}.info-box .progress{background:rgba(0,0,0,0.2);margin:5px -10px 5px -10px;height:2px}.info-box .progress,.info-box .progress .progress-bar{border-radius:0}.info-box .progress .progress-bar{background:#fff}.info-box-icon{border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px;display:block;float:left;height:90px;width:90px;text-align:center;font-size:45px;line-height:90px;background:rgba(0,0,0,0.2)}.info-box-icon>img{max-width:100%}.info-box-content{padding:5px 10px;margin-left:90px}.info-box-number{display:block;font-weight:bold;font-size:18px}.progress-description,.info-box-text{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.info-box-text{text-transform:uppercase}.info-box-more{display:block}.progress-description{margin:0}.timeline{position:relative;margin:0 0 30px 0;padding:0;list-style:none}.timeline:before{content:'';position:absolute;top:0;bottom:0;width:4px;background:#ddd;left:31px;margin:0;border-radius:2px}.timeline>li{position:relative;margin-right:10px;margin-bottom:15px}.timeline>li:before,.timeline>li:after{content:" ";display:table}.timeline>li:after{clear:both}.timeline>li>.timeline-item{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;margin-top:0;background:#fff;color:#444;margin-left:60px;margin-right:15px;padding:0;position:relative}.timeline>li>.timeline-item>.time{color:#999;float:right;padding:10px;font-size:12px}.timeline>li>.timeline-item>.timeline-header{margin:0;color:#555;border-bottom:1px solid #f4f4f4;padding:10px;font-size:16px;line-height:1.1}.timeline>li>.timeline-item>.timeline-header>a{font-weight:600}.timeline>li>.timeline-item>.timeline-body,.timeline>li>.timeline-item>.timeline-footer{padding:10px}.timeline>li>.fa,.timeline>li>.glyphicon,.timeline>li>.ion{width:30px;height:30px;font-size:15px;line-height:30px;position:absolute;color:#666;background:#d2d6de;border-radius:50%;text-align:center;left:18px;top:0}.timeline>.time-label>span{font-weight:600;padding:5px;display:inline-block;background-color:#fff;border-radius:4px}.timeline-inverse>li>.timeline-item{background:#f0f0f0;border:1px solid #ddd;-webkit-box-shadow:none;box-shadow:none}.timeline-inverse>li>.timeline-item>.timeline-header{border-bottom-color:#ddd}.btn{border-radius:3px;-webkit-box-shadow:none;box-shadow:none;border:1px solid transparent}.btn.uppercase{text-transform:uppercase}.btn.btn-flat{border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border-width:1px}.btn:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:focus{outline:none}.btn.btn-file{position:relative;overflow:hidden}.btn.btn-file>input[type='file']{position:absolute;top:0;right:0;min-width:100%;min-height:100%;font-size:100px;text-align:right;opacity:0;filter:alpha(opacity=0);outline:none;background:white;cursor:inherit;display:block}.btn-default{background-color:#f4f4f4;color:#444;border-color:#ddd}.btn-default:hover,.btn-default:active,.btn-default.hover{background-color:#e7e7e7}.btn-primary{background-color:#3c8dbc;border-color:#367fa9}.btn-primary:hover,.btn-primary:active,.btn-primary.hover{background-color:#367fa9}.btn-success{background-color:#00a65a;border-color:#008d4c}.btn-success:hover,.btn-success:active,.btn-success.hover{background-color:#008d4c}.btn-info{background-color:#00c0ef;border-color:#00acd6}.btn-info:hover,.btn-info:active,.btn-info.hover{background-color:#00acd6}.btn-danger{background-color:#dd4b39;border-color:#d73925}.btn-danger:hover,.btn-danger:active,.btn-danger.hover{background-color:#d73925}.btn-warning{background-color:#f39c12;border-color:#e08e0b}.btn-warning:hover,.btn-warning:active,.btn-warning.hover{background-color:#e08e0b}.btn-outline{border:1px solid #fff;background:transparent;color:#fff}.btn-outline:hover,.btn-outline:focus,.btn-outline:active{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.7)}.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn[class*='bg-']:hover{-webkit-box-shadow:inset 0 0 100px rgba(0,0,0,0.2);box-shadow:inset 0 0 100px rgba(0,0,0,0.2)}.btn-app{border-radius:3px;position:relative;padding:15px 5px;margin:0 0 10px 10px;min-width:80px;height:60px;text-align:center;color:#666;border:1px solid #ddd;background-color:#f4f4f4;font-size:12px}.btn-app>.fa,.btn-app>.glyphicon,.btn-app>.ion{font-size:20px;display:block}.btn-app:hover{background:#f4f4f4;color:#444;border-color:#aaa}.btn-app:active,.btn-app:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-app>.badge{position:absolute;top:-3px;right:-10px;font-size:10px;font-weight:400}.callout{border-radius:3px;margin:0 0 20px 0;padding:15px 30px 15px 15px;border-left:5px solid #eee}.callout a{color:#fff;text-decoration:underline}.callout a:hover{color:#eee}.callout h4{margin-top:0;font-weight:600}.callout p:last-child{margin-bottom:0}.callout code,.callout .highlight{background-color:#fff}.callout.callout-danger{border-color:#c23321}.callout.callout-warning{border-color:#c87f0a}.callout.callout-info{border-color:#0097bc}.callout.callout-success{border-color:#00733e}.alert{border-radius:3px}.alert h4{font-weight:600}.alert .icon{margin-right:10px}.alert .close{color:#000;opacity:.2;filter:alpha(opacity=20)}.alert .close:hover{opacity:.5;filter:alpha(opacity=50)}.alert a{color:#fff;text-decoration:underline}.alert-success{border-color:#008d4c}.alert-danger,.alert-error{border-color:#d73925}.alert-warning{border-color:#e08e0b}.alert-info{border-color:#00acd6}.nav>li>a:hover,.nav>li>a:active,.nav>li>a:focus{color:#444;background:#f7f7f7}.nav-pills>li>a{border-radius:0;border-top:3px solid transparent;color:#444}.nav-pills>li>a>.fa,.nav-pills>li>a>.glyphicon,.nav-pills>li>a>.ion{margin-right:5px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{border-top-color:#3c8dbc}.nav-pills>li.active>a{font-weight:600}.nav-stacked>li>a{border-radius:0;border-top:0;border-left:3px solid transparent;color:#444}.nav-stacked>li.active>a,.nav-stacked>li.active>a:hover{background:transparent;color:#444;border-top:0;border-left-color:#3c8dbc}.nav-stacked>li.header{border-bottom:1px solid #ddd;color:#777;margin-bottom:10px;padding:5px 10px;text-transform:uppercase}.nav-tabs-custom{margin-bottom:20px;background:#fff;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px}.nav-tabs-custom>.nav-tabs{margin:0;border-bottom-color:#f4f4f4;border-top-right-radius:3px;border-top-left-radius:3px}.nav-tabs-custom>.nav-tabs>li{border-top:3px solid transparent;margin-bottom:-2px;margin-right:5px}.nav-tabs-custom>.nav-tabs>li.disabled>a{color:#777}.nav-tabs-custom>.nav-tabs>li>a{color:#444;border-radius:0}.nav-tabs-custom>.nav-tabs>li>a.text-muted{color:#999}.nav-tabs-custom>.nav-tabs>li>a,.nav-tabs-custom>.nav-tabs>li>a:hover{background:transparent;margin:0}.nav-tabs-custom>.nav-tabs>li>a:hover{color:#999}.nav-tabs-custom>.nav-tabs>li:not(.active)>a:hover,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:focus,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:active{border-color:transparent}.nav-tabs-custom>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom>.nav-tabs>li.active>a,.nav-tabs-custom>.nav-tabs>li.active:hover>a{background-color:#fff;color:#444}.nav-tabs-custom>.nav-tabs>li.active>a{border-top-color:transparent;border-left-color:#f4f4f4;border-right-color:#f4f4f4}.nav-tabs-custom>.nav-tabs>li:first-of-type{margin-left:0}.nav-tabs-custom>.nav-tabs>li:first-of-type.active>a{border-left-color:transparent}.nav-tabs-custom>.nav-tabs.pull-right{float:none !important}.nav-tabs-custom>.nav-tabs.pull-right>li{float:right}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type{margin-right:0}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type>a{border-left-width:1px}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type.active>a{border-left-color:#f4f4f4;border-right-color:transparent}.nav-tabs-custom>.nav-tabs>li.header{line-height:35px;padding:0 10px;font-size:20px;color:#444}.nav-tabs-custom>.nav-tabs>li.header>.fa,.nav-tabs-custom>.nav-tabs>li.header>.glyphicon,.nav-tabs-custom>.nav-tabs>li.header>.ion{margin-right:5px}.nav-tabs-custom>.tab-content{background:#fff;padding:10px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.nav-tabs-custom .dropdown.open>a:active,.nav-tabs-custom .dropdown.open>a:focus{background:transparent;color:#999}.nav-tabs-custom.tab-primary>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom.tab-info>.nav-tabs>li.active{border-top-color:#00c0ef}.nav-tabs-custom.tab-danger>.nav-tabs>li.active{border-top-color:#dd4b39}.nav-tabs-custom.tab-warning>.nav-tabs>li.active{border-top-color:#f39c12}.nav-tabs-custom.tab-success>.nav-tabs>li.active{border-top-color:#00a65a}.nav-tabs-custom.tab-default>.nav-tabs>li.active{border-top-color:#d2d6de}.pagination>li>a{background:#fafafa;color:#666}.pagination.pagination-flat>li>a{border-radius:0 !important}.products-list{list-style:none;margin:0;padding:0}.products-list>.item{border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);padding:10px 0;background:#fff}.products-list>.item:before,.products-list>.item:after{content:" ";display:table}.products-list>.item:after{clear:both}.products-list .product-img{float:left}.products-list .product-img img{width:50px;height:50px}.products-list .product-info{margin-left:60px}.products-list .product-title{font-weight:600}.products-list .product-description{display:block;color:#999;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.product-list-in-box>.item{-webkit-box-shadow:none;box-shadow:none;border-radius:0;border-bottom:1px solid #f4f4f4}.product-list-in-box>.item:last-of-type{border-bottom-width:0}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{border-top:1px solid #f4f4f4}.table>thead>tr>th{border-bottom:2px solid #f4f4f4}.table tr td .progress{margin-top:5px}.table-bordered{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table.no-border,.table.no-border td,.table.no-border th{border:0}table.text-center,table.text-center td,table.text-center th{text-align:center}.table.align th{text-align:left}.table.align td{text-align:right}.label-default{background-color:#d2d6de;color:#444}.direct-chat .box-body{border-bottom-right-radius:0;border-bottom-left-radius:0;position:relative;overflow-x:hidden;padding:0}.direct-chat.chat-pane-open .direct-chat-contacts{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.direct-chat-messages{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0);padding:10px;height:250px;overflow:auto}.direct-chat-msg,.direct-chat-text{display:block}.direct-chat-msg{margin-bottom:10px}.direct-chat-msg:before,.direct-chat-msg:after{content:" ";display:table}.direct-chat-msg:after{clear:both}.direct-chat-messages,.direct-chat-contacts{-webkit-transition:-webkit-transform .5s ease-in-out;-moz-transition:-moz-transform .5s ease-in-out;-o-transition:-o-transform .5s ease-in-out;transition:transform .5s ease-in-out}.direct-chat-text{border-radius:5px;position:relative;padding:5px 10px;background:#d2d6de;border:1px solid #d2d6de;margin:5px 0 0 50px;color:#444}.direct-chat-text:after,.direct-chat-text:before{position:absolute;right:100%;top:15px;border:solid transparent;border-right-color:#d2d6de;content:' ';height:0;width:0;pointer-events:none}.direct-chat-text:after{border-width:5px;margin-top:-5px}.direct-chat-text:before{border-width:6px;margin-top:-6px}.right .direct-chat-text{margin-right:50px;margin-left:0}.right .direct-chat-text:after,.right .direct-chat-text:before{right:auto;left:100%;border-right-color:transparent;border-left-color:#d2d6de}.direct-chat-img{border-radius:50%;float:left;width:40px;height:40px}.right .direct-chat-img{float:right}.direct-chat-info{display:block;margin-bottom:2px;font-size:12px}.direct-chat-name{font-weight:600}.direct-chat-timestamp{color:#999}.direct-chat-contacts-open .direct-chat-contacts{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.direct-chat-contacts{-webkit-transform:translate(101%, 0);-ms-transform:translate(101%, 0);-o-transform:translate(101%, 0);transform:translate(101%, 0);position:absolute;top:0;bottom:0;height:250px;width:100%;background:#222d32;color:#fff;overflow:auto}.contacts-list>li{border-bottom:1px solid rgba(0,0,0,0.2);padding:10px;margin:0}.contacts-list>li:before,.contacts-list>li:after{content:" ";display:table}.contacts-list>li:after{clear:both}.contacts-list>li:last-of-type{border-bottom:none}.contacts-list-img{border-radius:50%;width:40px;float:left}.contacts-list-info{margin-left:45px;color:#fff}.contacts-list-name,.contacts-list-status{display:block}.contacts-list-name{font-weight:600}.contacts-list-status{font-size:12px}.contacts-list-date{color:#aaa;font-weight:normal}.contacts-list-msg{color:#999}.direct-chat-danger .right>.direct-chat-text{background:#dd4b39;border-color:#dd4b39;color:#fff}.direct-chat-danger .right>.direct-chat-text:after,.direct-chat-danger .right>.direct-chat-text:before{border-left-color:#dd4b39}.direct-chat-primary .right>.direct-chat-text{background:#3c8dbc;border-color:#3c8dbc;color:#fff}.direct-chat-primary .right>.direct-chat-text:after,.direct-chat-primary .right>.direct-chat-text:before{border-left-color:#3c8dbc}.direct-chat-warning .right>.direct-chat-text{background:#f39c12;border-color:#f39c12;color:#fff}.direct-chat-warning .right>.direct-chat-text:after,.direct-chat-warning .right>.direct-chat-text:before{border-left-color:#f39c12}.direct-chat-info .right>.direct-chat-text{background:#00c0ef;border-color:#00c0ef;color:#fff}.direct-chat-info .right>.direct-chat-text:after,.direct-chat-info .right>.direct-chat-text:before{border-left-color:#00c0ef}.direct-chat-success .right>.direct-chat-text{background:#00a65a;border-color:#00a65a;color:#fff}.direct-chat-success .right>.direct-chat-text:after,.direct-chat-success .right>.direct-chat-text:before{border-left-color:#00a65a}.users-list>li{width:25%;float:left;padding:10px;text-align:center}.users-list>li img{border-radius:50%;max-width:100%;height:auto}.users-list>li>a:hover,.users-list>li>a:hover .users-list-name{color:#999}.users-list-name,.users-list-date{display:block}.users-list-name{font-weight:600;color:#444;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.users-list-date{color:#999;font-size:12px}.carousel-control.left,.carousel-control.right{background-image:none}.carousel-control>.fa{font-size:40px;position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-20px}.modal{background:rgba(0,0,0,0.3)}.modal-content{border-radius:0;-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125);border:0}@media (min-width:768px){.modal-content{-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125)}}.modal-header{border-bottom-color:#f4f4f4}.modal-footer{border-top-color:#f4f4f4}.modal-primary .modal-header,.modal-primary .modal-footer{border-color:#307095}.modal-warning .modal-header,.modal-warning .modal-footer{border-color:#c87f0a}.modal-info .modal-header,.modal-info .modal-footer{border-color:#0097bc}.modal-success .modal-header,.modal-success .modal-footer{border-color:#00733e}.modal-danger .modal-header,.modal-danger .modal-footer{border-color:#c23321}.box-widget{border:none;position:relative}.widget-user .widget-user-header{padding:20px;height:120px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user .widget-user-username{margin-top:0;margin-bottom:5px;font-size:25px;font-weight:300;text-shadow:0 1px 1px rgba(0,0,0,0.2)}.widget-user .widget-user-desc{margin-top:0}.widget-user .widget-user-image{position:absolute;top:65px;left:50%;margin-left:-45px}.widget-user .widget-user-image>img{width:90px;height:auto;border:3px solid #fff}.widget-user .box-footer{padding-top:30px}.widget-user-2 .widget-user-header{padding:20px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user-2 .widget-user-username{margin-top:5px;margin-bottom:5px;font-size:25px;font-weight:300}.widget-user-2 .widget-user-desc{margin-top:0}.widget-user-2 .widget-user-username,.widget-user-2 .widget-user-desc{margin-left:75px}.widget-user-2 .widget-user-image>img{width:65px;height:auto;float:left}.treeview-menu{display:none;list-style:none;padding:0;margin:0;padding-left:5px}.treeview-menu .treeview-menu{padding-left:20px}.treeview-menu>li{margin:0}.treeview-menu>li>a{padding:5px 5px 5px 15px;display:block;font-size:14px}.treeview-menu>li>a>.fa,.treeview-menu>li>a>.glyphicon,.treeview-menu>li>a>.ion{width:20px}.treeview-menu>li>a>.pull-right-container>.fa-angle-left,.treeview-menu>li>a>.pull-right-container>.fa-angle-down,.treeview-menu>li>a>.fa-angle-left,.treeview-menu>li>a>.fa-angle-down{width:auto}.mailbox-messages>.table{margin:0}.mailbox-controls{padding:5px}.mailbox-controls.with-border{border-bottom:1px solid #f4f4f4}.mailbox-read-info{border-bottom:1px solid #f4f4f4;padding:10px}.mailbox-read-info h3{font-size:20px;margin:0}.mailbox-read-info h5{margin:0;padding:5px 0 0 0}.mailbox-read-time{color:#999;font-size:13px}.mailbox-read-message{padding:10px}.mailbox-attachments li{float:left;width:200px;border:1px solid #eee;margin-bottom:10px;margin-right:10px}.mailbox-attachment-name{font-weight:bold;color:#666}.mailbox-attachment-icon,.mailbox-attachment-info,.mailbox-attachment-size{display:block}.mailbox-attachment-info{padding:10px;background:#f4f4f4}.mailbox-attachment-size{color:#999;font-size:12px}.mailbox-attachment-icon{text-align:center;font-size:65px;color:#666;padding:20px 10px}.mailbox-attachment-icon.has-img{padding:0}.mailbox-attachment-icon.has-img>img{max-width:100%;height:auto}.lockscreen{background:#d2d6de}.lockscreen-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.lockscreen-logo a{color:#444}.lockscreen-wrapper{max-width:400px;margin:0 auto;margin-top:10%}.lockscreen .lockscreen-name{text-align:center;font-weight:600}.lockscreen-item{border-radius:4px;padding:0;background:#fff;position:relative;margin:10px auto 30px auto;width:290px}.lockscreen-image{border-radius:50%;position:absolute;left:-10px;top:-25px;background:#fff;padding:5px;z-index:10}.lockscreen-image>img{border-radius:50%;width:70px;height:70px}.lockscreen-credentials{margin-left:70px}.lockscreen-credentials .form-control{border:0}.lockscreen-credentials .btn{background-color:#fff;border:0;padding:0 10px}.lockscreen-footer{margin-top:10px}.login-logo,.register-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.login-logo a,.register-logo a{color:#444}.login-page,.register-page{background:#d2d6de}.login-box,.register-box{width:360px;margin:7% auto}@media (max-width:768px){.login-box,.register-box{width:90%;margin-top:20px}}.login-box-body,.register-box-body{background:#fff;padding:20px;border-top:0;color:#666}.login-box-body .form-control-feedback,.register-box-body .form-control-feedback{color:#777}.login-box-msg,.register-box-msg{margin:0;text-align:center;padding:0 20px 20px 20px}.social-auth-links{margin:10px 0}.error-page{width:600px;margin:20px auto 0 auto}@media (max-width:991px){.error-page{width:100%}}.error-page>.headline{float:left;font-size:100px;font-weight:300}@media (max-width:991px){.error-page>.headline{float:none;text-align:center}}.error-page>.error-content{margin-left:190px;display:block}@media (max-width:991px){.error-page>.error-content{margin-left:0}}.error-page>.error-content>h3{font-weight:300;font-size:25px}@media (max-width:991px){.error-page>.error-content>h3{text-align:center}}.invoice{position:relative;background:#fff;border:1px solid #f4f4f4;padding:20px;margin:10px 25px}.invoice-title{margin-top:0}.profile-user-img{margin:0 auto;width:100px;padding:3px;border:3px solid #d2d6de}.profile-username{font-size:21px;margin-top:5px}.post{border-bottom:1px solid #d2d6de;margin-bottom:15px;padding-bottom:15px;color:#666}.post:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0}.post .user-block{margin-bottom:15px}.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon>:first-child{border:none;text-align:center;width:100%}.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0}.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0}.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0}.btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:focus,.btn-adn.focus{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:hover{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{background-image:none}.btn-adn .badge{color:#d87a68;background-color:#fff}.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:focus,.btn-bitbucket.focus{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{background-image:none}.btn-bitbucket .badge{color:#205081;background-color:#fff}.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:focus,.btn-dropbox.focus{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{background-image:none}.btn-dropbox .badge{color:#1087dd;background-color:#fff}.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{background-image:none}.btn-facebook .badge{color:#3b5998;background-color:#fff}.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:focus,.btn-flickr.focus{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{background-image:none}.btn-flickr .badge{color:#ff0084;background-color:#fff}.btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare:focus,.btn-foursquare.focus{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:hover{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{background-image:none}.btn-foursquare .badge{color:#f94877;background-color:#fff}.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:focus,.btn-github.focus{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:hover{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{background-image:none}.btn-github .badge{color:#444;background-color:#fff}.btn-google{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google:focus,.btn-google.focus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:hover{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{background-image:none}.btn-google .badge{color:#dd4b39;background-color:#fff}.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:focus,.btn-instagram.focus{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{background-image:none}.btn-instagram .badge{color:#3f729b;background-color:#fff}.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:focus,.btn-linkedin.focus{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{background-image:none}.btn-linkedin .badge{color:#007bb6;background-color:#fff}.btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:focus,.btn-microsoft.focus{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:hover{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{background-image:none}.btn-microsoft .badge{color:#2672ec;background-color:#fff}.btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:focus,.btn-openid.focus{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{background-image:none}.btn-openid .badge{color:#f7931e;background-color:#fff}.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:focus,.btn-pinterest.focus{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:hover{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{background-image:none}.btn-pinterest .badge{color:#cb2027;background-color:#fff}.btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:focus,.btn-reddit.focus{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:hover{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{background-image:none}.btn-reddit .badge{color:#eff7ff;background-color:#000}.btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:focus,.btn-soundcloud.focus{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:hover{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{background-image:none}.btn-soundcloud .badge{color:#f50;background-color:#fff}.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:focus,.btn-tumblr.focus{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{background-image:none}.btn-tumblr .badge{color:#2c4762;background-color:#fff}.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:focus,.btn-twitter.focus{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{background-image:none}.btn-twitter .badge{color:#55acee;background-color:#fff}.btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:focus,.btn-vimeo.focus{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:hover{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{background-image:none}.btn-vimeo .badge{color:#1ab7ea;background-color:#fff}.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:focus,.btn-vk.focus{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:hover{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{background-image:none}.btn-vk .badge{color:#587ea3;background-color:#fff}.btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:focus,.btn-yahoo.focus{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:hover{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{background-image:none}.btn-yahoo .badge{color:#720e9e;background-color:#fff}.fc-button{background:#f4f4f4;background-image:none;color:#444;border-color:#ddd;border-bottom-color:#ddd}.fc-button:hover,.fc-button:active,.fc-button.hover{background-color:#e9e9e9}.fc-header-title h2{font-size:15px;line-height:1.6em;color:#666;margin-left:10px}.fc-header-right{padding-right:10px}.fc-header-left{padding-left:10px}.fc-widget-header{background:#fafafa}.fc-grid{width:100%;border:0}.fc-widget-header:first-of-type,.fc-widget-content:first-of-type{border-left:0;border-right:0}.fc-widget-header:last-of-type,.fc-widget-content:last-of-type{border-right:0}.fc-toolbar{padding:10px;margin:0}.fc-day-number{font-size:20px;font-weight:300;padding-right:10px}.fc-color-picker{list-style:none;margin:0;padding:0}.fc-color-picker>li{float:left;font-size:30px;margin-right:5px;line-height:30px}.fc-color-picker>li .fa{-webkit-transition:-webkit-transform linear .3s;-moz-transition:-moz-transform linear .3s;-o-transition:-o-transform linear .3s;transition:transform linear .3s}.fc-color-picker>li .fa:hover{-webkit-transform:rotate(30deg);-ms-transform:rotate(30deg);-o-transform:rotate(30deg);transform:rotate(30deg)}#add-new-event{-webkit-transition:all linear .3s;-o-transition:all linear .3s;transition:all linear .3s}.external-event{padding:5px 10px;font-weight:bold;margin-bottom:4px;box-shadow:0 1px 1px rgba(0,0,0,0.1);text-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;cursor:move}.external-event:hover{box-shadow:inset 0 0 90px rgba(0,0,0,0.2)}.select2-container--default.select2-container--focus,.select2-selection.select2-container--focus,.select2-container--default:focus,.select2-selection:focus,.select2-container--default:active,.select2-selection:active{outline:none}.select2-container--default .select2-selection--single,.select2-selection .select2-selection--single{border:1px solid #d2d6de;border-radius:0;padding:6px 12px;height:34px}.select2-container--default.select2-container--open{border-color:#3c8dbc}.select2-dropdown{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#3c8dbc;color:white}.select2-results__option{padding:6px 12px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{padding-left:0;padding-right:0;height:auto;margin-top:-4px}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px}.select2-container--default .select2-selection--single .select2-selection__arrow{height:28px;right:3px}.select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0}.select2-dropdown .select2-search__field,.select2-search--inline .select2-search__field{border:1px solid #d2d6de}.select2-dropdown .select2-search__field:focus,.select2-search--inline .select2-search__field:focus{outline:none}.select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default .select2-search--dropdown .select2-search__field{border-color:#3c8dbc !important}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#444}.select2-container--default .select2-selection--multiple{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-selection--multiple:focus{border-color:#3c8dbc}.select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#d2d6de}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;padding:1px 10px;color:#fff}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{margin-right:5px;color:rgba(255,255,255,0.7)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container .select2-selection--single .select2-selection__rendered{padding-right:10px}.box .datepicker-inline,.box .datepicker-inline .datepicker-days,.box .datepicker-inline>table,.box .datepicker-inline .datepicker-days>table{width:100%}.box .datepicker-inline td:hover,.box .datepicker-inline .datepicker-days td:hover,.box .datepicker-inline>table td:hover,.box .datepicker-inline .datepicker-days>table td:hover{background-color:rgba(255,255,255,0.3)}.box .datepicker-inline td.day.old,.box .datepicker-inline .datepicker-days td.day.old,.box .datepicker-inline>table td.day.old,.box .datepicker-inline .datepicker-days>table td.day.old,.box .datepicker-inline td.day.new,.box .datepicker-inline .datepicker-days td.day.new,.box .datepicker-inline>table td.day.new,.box .datepicker-inline .datepicker-days>table td.day.new{color:#777}.pad{padding:10px}.margin{margin:10px}.margin-bottom{margin-bottom:20px}.margin-bottom-none{margin-bottom:0}.margin-r-5{margin-right:5px}.inline{display:inline}.description-block{display:block;margin:10px 0;text-align:center}.description-block.margin-bottom{margin-bottom:25px}.description-block>.description-header{margin:0;padding:0;font-weight:600;font-size:16px}.description-block>.description-text{text-transform:uppercase}.bg-red,.bg-yellow,.bg-aqua,.bg-blue,.bg-light-blue,.bg-green,.bg-navy,.bg-teal,.bg-olive,.bg-lime,.bg-orange,.bg-fuchsia,.bg-purple,.bg-maroon,.bg-black,.bg-red-active,.bg-yellow-active,.bg-aqua-active,.bg-blue-active,.bg-light-blue-active,.bg-green-active,.bg-navy-active,.bg-teal-active,.bg-olive-active,.bg-lime-active,.bg-orange-active,.bg-fuchsia-active,.bg-purple-active,.bg-maroon-active,.bg-black-active,.callout.callout-danger,.callout.callout-warning,.callout.callout-info,.callout.callout-success,.alert-success,.alert-danger,.alert-error,.alert-warning,.alert-info,.label-danger,.label-info,.label-warning,.label-primary,.label-success,.modal-primary .modal-body,.modal-primary .modal-header,.modal-primary .modal-footer,.modal-warning .modal-body,.modal-warning .modal-header,.modal-warning .modal-footer,.modal-info .modal-body,.modal-info .modal-header,.modal-info .modal-footer,.modal-success .modal-body,.modal-success .modal-header,.modal-success .modal-footer,.modal-danger .modal-body,.modal-danger .modal-header,.modal-danger .modal-footer{color:#fff !important}.bg-gray{color:#000;background-color:#d2d6de !important}.bg-gray-light{background-color:#f7f7f7}.bg-black{background-color:#111 !important}.bg-red,.callout.callout-danger,.alert-danger,.alert-error,.label-danger,.modal-danger .modal-body{background-color:#dd4b39 !important}.bg-yellow,.callout.callout-warning,.alert-warning,.label-warning,.modal-warning .modal-body{background-color:#f39c12 !important}.bg-aqua,.callout.callout-info,.alert-info,.label-info,.modal-info .modal-body{background-color:#00c0ef !important}.bg-blue{background-color:#0073b7 !important}.bg-light-blue,.label-primary,.modal-primary .modal-body{background-color:#3c8dbc !important}.bg-green,.callout.callout-success,.alert-success,.label-success,.modal-success .modal-body{background-color:#00a65a !important}.bg-navy{background-color:#001f3f !important}.bg-teal{background-color:#39cccc !important}.bg-olive{background-color:#3d9970 !important}.bg-lime{background-color:#01ff70 !important}.bg-orange{background-color:#ff851b !important}.bg-fuchsia{background-color:#f012be !important}.bg-purple{background-color:#605ca8 !important}.bg-maroon{background-color:#d81b60 !important}.bg-gray-active{color:#000;background-color:#b5bbc8 !important}.bg-black-active{background-color:#000 !important}.bg-red-active,.modal-danger .modal-header,.modal-danger .modal-footer{background-color:#d33724 !important}.bg-yellow-active,.modal-warning .modal-header,.modal-warning .modal-footer{background-color:#db8b0b !important}.bg-aqua-active,.modal-info .modal-header,.modal-info .modal-footer{background-color:#00a7d0 !important}.bg-blue-active{background-color:#005384 !important}.bg-light-blue-active,.modal-primary .modal-header,.modal-primary .modal-footer{background-color:#357ca5 !important}.bg-green-active,.modal-success .modal-header,.modal-success .modal-footer{background-color:#008d4c !important}.bg-navy-active{background-color:#001a35 !important}.bg-teal-active{background-color:#30bbbb !important}.bg-olive-active{background-color:#368763 !important}.bg-lime-active{background-color:#00e765 !important}.bg-orange-active{background-color:#ff7701 !important}.bg-fuchsia-active{background-color:#db0ead !important}.bg-purple-active{background-color:#555299 !important}.bg-maroon-active{background-color:#ca195a !important}[class^="bg-"].disabled{opacity:.65;filter:alpha(opacity=65)}.text-red{color:#dd4b39 !important}.text-yellow{color:#f39c12 !important}.text-aqua{color:#00c0ef !important}.text-blue{color:#0073b7 !important}.text-black{color:#111 !important}.text-light-blue{color:#3c8dbc !important}.text-green{color:#00a65a !important}.text-gray{color:#d2d6de !important}.text-navy{color:#001f3f !important}.text-teal{color:#39cccc !important}.text-olive{color:#3d9970 !important}.text-lime{color:#01ff70 !important}.text-orange{color:#ff851b !important}.text-fuchsia{color:#f012be !important}.text-purple{color:#605ca8 !important}.text-maroon{color:#d81b60 !important}.link-muted{color:#7a869d}.link-muted:hover,.link-muted:focus{color:#606c84}.link-black{color:#666}.link-black:hover,.link-black:focus{color:#999}.hide{display:none !important}.no-border{border:0 !important}.no-padding{padding:0 !important}.no-margin{margin:0 !important}.no-shadow{box-shadow:none !important}.list-unstyled,.chart-legend,.contacts-list,.users-list,.mailbox-attachments{list-style:none;margin:0;padding:0}.list-group-unbordered>.list-group-item{border-left:0;border-right:0;border-radius:0;padding-left:0;padding-right:0}.flat{border-radius:0 !important}.text-bold,.text-bold.table td,.text-bold.table th{font-weight:700}.text-sm{font-size:12px}.jqstooltip{padding:5px !important;width:auto !important;height:auto !important}.bg-teal-gradient{background:#39cccc !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #39cccc), color-stop(1, #7adddd)) !important;background:-ms-linear-gradient(bottom, #39cccc, #7adddd) !important;background:-moz-linear-gradient(center bottom, #39cccc 0, #7adddd 100%) !important;background:-o-linear-gradient(#7adddd, #39cccc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39cccc', GradientType=0) !important;color:#fff}.bg-light-blue-gradient{background:#3c8dbc !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #3c8dbc), color-stop(1, #67a8ce)) !important;background:-ms-linear-gradient(bottom, #3c8dbc, #67a8ce) !important;background:-moz-linear-gradient(center bottom, #3c8dbc 0, #67a8ce 100%) !important;background:-o-linear-gradient(#67a8ce, #3c8dbc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important;color:#fff}.bg-blue-gradient{background:#0073b7 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #0073b7), color-stop(1, #0089db)) !important;background:-ms-linear-gradient(bottom, #0073b7, #0089db) !important;background:-moz-linear-gradient(center bottom, #0073b7 0, #0089db 100%) !important;background:-o-linear-gradient(#0089db, #0073b7) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important;color:#fff}.bg-aqua-gradient{background:#00c0ef !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #00c0ef), color-stop(1, #14d1ff)) !important;background:-ms-linear-gradient(bottom, #00c0ef, #14d1ff) !important;background:-moz-linear-gradient(center bottom, #00c0ef 0, #14d1ff 100%) !important;background:-o-linear-gradient(#14d1ff, #00c0ef) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important;color:#fff}.bg-yellow-gradient{background:#f39c12 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #f39c12), color-stop(1, #f7bc60)) !important;background:-ms-linear-gradient(bottom, #f39c12, #f7bc60) !important;background:-moz-linear-gradient(center bottom, #f39c12 0, #f7bc60 100%) !important;background:-o-linear-gradient(#f7bc60, #f39c12) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important;color:#fff}.bg-purple-gradient{background:#605ca8 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #605ca8), color-stop(1, #9491c4)) !important;background:-ms-linear-gradient(bottom, #605ca8, #9491c4) !important;background:-moz-linear-gradient(center bottom, #605ca8 0, #9491c4 100%) !important;background:-o-linear-gradient(#9491c4, #605ca8) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important;color:#fff}.bg-green-gradient{background:#00a65a !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #00a65a), color-stop(1, #00ca6d)) !important;background:-ms-linear-gradient(bottom, #00a65a, #00ca6d) !important;background:-moz-linear-gradient(center bottom, #00a65a 0, #00ca6d 100%) !important;background:-o-linear-gradient(#00ca6d, #00a65a) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important;color:#fff}.bg-red-gradient{background:#dd4b39 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #dd4b39), color-stop(1, #e47365)) !important;background:-ms-linear-gradient(bottom, #dd4b39, #e47365) !important;background:-moz-linear-gradient(center bottom, #dd4b39 0, #e47365 100%) !important;background:-o-linear-gradient(#e47365, #dd4b39) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important;color:#fff}.bg-black-gradient{background:#111 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #111), color-stop(1, #2b2b2b)) !important;background:-ms-linear-gradient(bottom, #111, #2b2b2b) !important;background:-moz-linear-gradient(center bottom, #111 0, #2b2b2b 100%) !important;background:-o-linear-gradient(#2b2b2b, #111) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111111', GradientType=0) !important;color:#fff}.bg-maroon-gradient{background:#d81b60 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #d81b60), color-stop(1, #e73f7c)) !important;background:-ms-linear-gradient(bottom, #d81b60, #e73f7c) !important;background:-moz-linear-gradient(center bottom, #d81b60 0, #e73f7c 100%) !important;background:-o-linear-gradient(#e73f7c, #d81b60) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#d81b60', GradientType=0) !important;color:#fff}.description-block .description-icon{font-size:16px}.no-pad-top{padding-top:0}.position-static{position:static !important}.list-header{font-size:15px;padding:10px 4px;font-weight:bold;color:#666}.list-seperator{height:1px;background:#f4f4f4;margin:15px 0 9px 0}.list-link>a{padding:4px;color:#777}.list-link>a:hover{color:#222}.font-light{font-weight:300}.user-block:before,.user-block:after{content:" ";display:table}.user-block:after{clear:both}.user-block img{width:40px;height:40px;float:left}.user-block .username,.user-block .description,.user-block .comment{display:block;margin-left:50px}.user-block .username{font-size:16px;font-weight:600}.user-block .description{color:#999;font-size:13px}.user-block.user-block-sm .username,.user-block.user-block-sm .description,.user-block.user-block-sm .comment{margin-left:40px}.user-block.user-block-sm .username{font-size:14px}.img-sm,.img-md,.img-lg,.box-comments .box-comment img,.user-block.user-block-sm img{float:left}.img-sm,.box-comments .box-comment img,.user-block.user-block-sm img{width:30px !important;height:30px !important}.img-sm+.img-push{margin-left:40px}.img-md{width:60px;height:60px}.img-md+.img-push{margin-left:70px}.img-lg{width:100px;height:100px}.img-lg+.img-push{margin-left:110px}.img-bordered{border:3px solid #d2d6de;padding:3px}.img-bordered-sm{border:2px solid #d2d6de;padding:2px}.attachment-block{border:1px solid #f4f4f4;padding:5px;margin-bottom:10px;background:#f7f7f7}.attachment-block .attachment-img{max-width:100px;max-height:100px;height:auto;float:left}.attachment-block .attachment-pushed{margin-left:110px}.attachment-block .attachment-heading{margin:0}.attachment-block .attachment-text{color:#555}.connectedSortable{min-height:100px}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sort-highlight{background:#f4f4f4;border:1px dashed #ddd;margin-bottom:10px}.full-opacity-hover{opacity:.65;filter:alpha(opacity=65)}.full-opacity-hover:hover{opacity:1;filter:alpha(opacity=100)}.chart{position:relative;overflow:hidden;width:100%}.chart svg,.chart canvas{width:100% !important}@media print{.no-print,.main-sidebar,.left-side,.main-header,.content-header{display:none !important}.content-wrapper,.right-side,.main-footer{margin-left:0 !important;min-height:0 !important;-webkit-transform:translate(0, 0) !important;-ms-transform:translate(0, 0) !important;-o-transform:translate(0, 0) !important;transform:translate(0, 0) !important}.fixed .content-wrapper,.fixed .right-side{padding-top:0 !important}.invoice{width:100%;border:0;margin:0;padding:0}.invoice-col{float:left;width:33.3333333%}.table-responsive{overflow:auto}.table-responsive>.table tr th,.table-responsive>.table tr td{white-space:normal !important}} \ No newline at end of file diff --git a/src/main/resources/static/css/alt/AdminLTE-bootstrap-social.css b/src/main/resources/static/css/alt/AdminLTE-bootstrap-social.css deleted file mode 100755 index 02513c762..000000000 --- a/src/main/resources/static/css/alt/AdminLTE-bootstrap-social.css +++ /dev/null @@ -1,760 +0,0 @@ -/* - * Social Buttons for Bootstrap - * - * Copyright 2013-2015 Panayiotis Lipiridis - * Licensed under the MIT License - * - * https://github.com/lipis/bootstrap-social - */ -.btn-social { - position: relative; - padding-left: 44px; - text-align: left; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} -.btn-social > :first-child { - position: absolute; - left: 0; - top: 0; - bottom: 0; - width: 32px; - line-height: 34px; - font-size: 1.6em; - text-align: center; - border-right: 1px solid rgba(0, 0, 0, 0.2); -} -.btn-social.btn-lg { - padding-left: 61px; -} -.btn-social.btn-lg > :first-child { - line-height: 45px; - width: 45px; - font-size: 1.8em; -} -.btn-social.btn-sm { - padding-left: 38px; -} -.btn-social.btn-sm > :first-child { - line-height: 28px; - width: 28px; - font-size: 1.4em; -} -.btn-social.btn-xs { - padding-left: 30px; -} -.btn-social.btn-xs > :first-child { - line-height: 20px; - width: 20px; - font-size: 1.2em; -} -.btn-social-icon { - position: relative; - padding-left: 44px; - text-align: left; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - height: 34px; - width: 34px; - padding: 0; -} -.btn-social-icon > :first-child { - position: absolute; - left: 0; - top: 0; - bottom: 0; - width: 32px; - line-height: 34px; - font-size: 1.6em; - text-align: center; - border-right: 1px solid rgba(0, 0, 0, 0.2); -} -.btn-social-icon.btn-lg { - padding-left: 61px; -} -.btn-social-icon.btn-lg > :first-child { - line-height: 45px; - width: 45px; - font-size: 1.8em; -} -.btn-social-icon.btn-sm { - padding-left: 38px; -} -.btn-social-icon.btn-sm > :first-child { - line-height: 28px; - width: 28px; - font-size: 1.4em; -} -.btn-social-icon.btn-xs { - padding-left: 30px; -} -.btn-social-icon.btn-xs > :first-child { - line-height: 20px; - width: 20px; - font-size: 1.2em; -} -.btn-social-icon > :first-child { - border: none; - text-align: center; - width: 100%; -} -.btn-social-icon.btn-lg { - height: 45px; - width: 45px; - padding-left: 0; - padding-right: 0; -} -.btn-social-icon.btn-sm { - height: 30px; - width: 30px; - padding-left: 0; - padding-right: 0; -} -.btn-social-icon.btn-xs { - height: 22px; - width: 22px; - padding-left: 0; - padding-right: 0; -} -.btn-adn { - color: #ffffff; - background-color: #d87a68; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-adn:focus, -.btn-adn.focus { - color: #ffffff; - background-color: #ce563f; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-adn:hover { - color: #ffffff; - background-color: #ce563f; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-adn:active, -.btn-adn.active, -.open > .dropdown-toggle.btn-adn { - color: #ffffff; - background-color: #ce563f; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-adn:active, -.btn-adn.active, -.open > .dropdown-toggle.btn-adn { - background-image: none; -} -.btn-adn .badge { - color: #d87a68; - background-color: #ffffff; -} -.btn-bitbucket { - color: #ffffff; - background-color: #205081; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-bitbucket:focus, -.btn-bitbucket.focus { - color: #ffffff; - background-color: #163758; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-bitbucket:hover { - color: #ffffff; - background-color: #163758; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-bitbucket:active, -.btn-bitbucket.active, -.open > .dropdown-toggle.btn-bitbucket { - color: #ffffff; - background-color: #163758; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-bitbucket:active, -.btn-bitbucket.active, -.open > .dropdown-toggle.btn-bitbucket { - background-image: none; -} -.btn-bitbucket .badge { - color: #205081; - background-color: #ffffff; -} -.btn-dropbox { - color: #ffffff; - background-color: #1087dd; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-dropbox:focus, -.btn-dropbox.focus { - color: #ffffff; - background-color: #0d6aad; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-dropbox:hover { - color: #ffffff; - background-color: #0d6aad; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-dropbox:active, -.btn-dropbox.active, -.open > .dropdown-toggle.btn-dropbox { - color: #ffffff; - background-color: #0d6aad; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-dropbox:active, -.btn-dropbox.active, -.open > .dropdown-toggle.btn-dropbox { - background-image: none; -} -.btn-dropbox .badge { - color: #1087dd; - background-color: #ffffff; -} -.btn-facebook { - color: #ffffff; - background-color: #3b5998; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-facebook:focus, -.btn-facebook.focus { - color: #ffffff; - background-color: #2d4373; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-facebook:hover { - color: #ffffff; - background-color: #2d4373; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-facebook:active, -.btn-facebook.active, -.open > .dropdown-toggle.btn-facebook { - color: #ffffff; - background-color: #2d4373; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-facebook:active, -.btn-facebook.active, -.open > .dropdown-toggle.btn-facebook { - background-image: none; -} -.btn-facebook .badge { - color: #3b5998; - background-color: #ffffff; -} -.btn-flickr { - color: #ffffff; - background-color: #ff0084; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-flickr:focus, -.btn-flickr.focus { - color: #ffffff; - background-color: #cc006a; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-flickr:hover { - color: #ffffff; - background-color: #cc006a; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-flickr:active, -.btn-flickr.active, -.open > .dropdown-toggle.btn-flickr { - color: #ffffff; - background-color: #cc006a; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-flickr:active, -.btn-flickr.active, -.open > .dropdown-toggle.btn-flickr { - background-image: none; -} -.btn-flickr .badge { - color: #ff0084; - background-color: #ffffff; -} -.btn-foursquare { - color: #ffffff; - background-color: #f94877; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-foursquare:focus, -.btn-foursquare.focus { - color: #ffffff; - background-color: #f71752; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-foursquare:hover { - color: #ffffff; - background-color: #f71752; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-foursquare:active, -.btn-foursquare.active, -.open > .dropdown-toggle.btn-foursquare { - color: #ffffff; - background-color: #f71752; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-foursquare:active, -.btn-foursquare.active, -.open > .dropdown-toggle.btn-foursquare { - background-image: none; -} -.btn-foursquare .badge { - color: #f94877; - background-color: #ffffff; -} -.btn-github { - color: #ffffff; - background-color: #444444; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-github:focus, -.btn-github.focus { - color: #ffffff; - background-color: #2b2b2b; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-github:hover { - color: #ffffff; - background-color: #2b2b2b; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-github:active, -.btn-github.active, -.open > .dropdown-toggle.btn-github { - color: #ffffff; - background-color: #2b2b2b; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-github:active, -.btn-github.active, -.open > .dropdown-toggle.btn-github { - background-image: none; -} -.btn-github .badge { - color: #444444; - background-color: #ffffff; -} -.btn-google { - color: #ffffff; - background-color: #dd4b39; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-google:focus, -.btn-google.focus { - color: #ffffff; - background-color: #c23321; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-google:hover { - color: #ffffff; - background-color: #c23321; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-google:active, -.btn-google.active, -.open > .dropdown-toggle.btn-google { - color: #ffffff; - background-color: #c23321; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-google:active, -.btn-google.active, -.open > .dropdown-toggle.btn-google { - background-image: none; -} -.btn-google .badge { - color: #dd4b39; - background-color: #ffffff; -} -.btn-instagram { - color: #ffffff; - background-color: #3f729b; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-instagram:focus, -.btn-instagram.focus { - color: #ffffff; - background-color: #305777; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-instagram:hover { - color: #ffffff; - background-color: #305777; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-instagram:active, -.btn-instagram.active, -.open > .dropdown-toggle.btn-instagram { - color: #ffffff; - background-color: #305777; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-instagram:active, -.btn-instagram.active, -.open > .dropdown-toggle.btn-instagram { - background-image: none; -} -.btn-instagram .badge { - color: #3f729b; - background-color: #ffffff; -} -.btn-linkedin { - color: #ffffff; - background-color: #007bb6; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-linkedin:focus, -.btn-linkedin.focus { - color: #ffffff; - background-color: #005983; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-linkedin:hover { - color: #ffffff; - background-color: #005983; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-linkedin:active, -.btn-linkedin.active, -.open > .dropdown-toggle.btn-linkedin { - color: #ffffff; - background-color: #005983; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-linkedin:active, -.btn-linkedin.active, -.open > .dropdown-toggle.btn-linkedin { - background-image: none; -} -.btn-linkedin .badge { - color: #007bb6; - background-color: #ffffff; -} -.btn-microsoft { - color: #ffffff; - background-color: #2672ec; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-microsoft:focus, -.btn-microsoft.focus { - color: #ffffff; - background-color: #125acd; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-microsoft:hover { - color: #ffffff; - background-color: #125acd; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-microsoft:active, -.btn-microsoft.active, -.open > .dropdown-toggle.btn-microsoft { - color: #ffffff; - background-color: #125acd; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-microsoft:active, -.btn-microsoft.active, -.open > .dropdown-toggle.btn-microsoft { - background-image: none; -} -.btn-microsoft .badge { - color: #2672ec; - background-color: #ffffff; -} -.btn-openid { - color: #ffffff; - background-color: #f7931e; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-openid:focus, -.btn-openid.focus { - color: #ffffff; - background-color: #da7908; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-openid:hover { - color: #ffffff; - background-color: #da7908; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-openid:active, -.btn-openid.active, -.open > .dropdown-toggle.btn-openid { - color: #ffffff; - background-color: #da7908; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-openid:active, -.btn-openid.active, -.open > .dropdown-toggle.btn-openid { - background-image: none; -} -.btn-openid .badge { - color: #f7931e; - background-color: #ffffff; -} -.btn-pinterest { - color: #ffffff; - background-color: #cb2027; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-pinterest:focus, -.btn-pinterest.focus { - color: #ffffff; - background-color: #9f191f; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-pinterest:hover { - color: #ffffff; - background-color: #9f191f; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-pinterest:active, -.btn-pinterest.active, -.open > .dropdown-toggle.btn-pinterest { - color: #ffffff; - background-color: #9f191f; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-pinterest:active, -.btn-pinterest.active, -.open > .dropdown-toggle.btn-pinterest { - background-image: none; -} -.btn-pinterest .badge { - color: #cb2027; - background-color: #ffffff; -} -.btn-reddit { - color: #000000; - background-color: #eff7ff; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-reddit:focus, -.btn-reddit.focus { - color: #000000; - background-color: #bcddff; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-reddit:hover { - color: #000000; - background-color: #bcddff; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-reddit:active, -.btn-reddit.active, -.open > .dropdown-toggle.btn-reddit { - color: #000000; - background-color: #bcddff; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-reddit:active, -.btn-reddit.active, -.open > .dropdown-toggle.btn-reddit { - background-image: none; -} -.btn-reddit .badge { - color: #eff7ff; - background-color: #000000; -} -.btn-soundcloud { - color: #ffffff; - background-color: #ff5500; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-soundcloud:focus, -.btn-soundcloud.focus { - color: #ffffff; - background-color: #cc4400; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-soundcloud:hover { - color: #ffffff; - background-color: #cc4400; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-soundcloud:active, -.btn-soundcloud.active, -.open > .dropdown-toggle.btn-soundcloud { - color: #ffffff; - background-color: #cc4400; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-soundcloud:active, -.btn-soundcloud.active, -.open > .dropdown-toggle.btn-soundcloud { - background-image: none; -} -.btn-soundcloud .badge { - color: #ff5500; - background-color: #ffffff; -} -.btn-tumblr { - color: #ffffff; - background-color: #2c4762; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-tumblr:focus, -.btn-tumblr.focus { - color: #ffffff; - background-color: #1c2d3f; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-tumblr:hover { - color: #ffffff; - background-color: #1c2d3f; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-tumblr:active, -.btn-tumblr.active, -.open > .dropdown-toggle.btn-tumblr { - color: #ffffff; - background-color: #1c2d3f; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-tumblr:active, -.btn-tumblr.active, -.open > .dropdown-toggle.btn-tumblr { - background-image: none; -} -.btn-tumblr .badge { - color: #2c4762; - background-color: #ffffff; -} -.btn-twitter { - color: #ffffff; - background-color: #55acee; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-twitter:focus, -.btn-twitter.focus { - color: #ffffff; - background-color: #2795e9; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-twitter:hover { - color: #ffffff; - background-color: #2795e9; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-twitter:active, -.btn-twitter.active, -.open > .dropdown-toggle.btn-twitter { - color: #ffffff; - background-color: #2795e9; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-twitter:active, -.btn-twitter.active, -.open > .dropdown-toggle.btn-twitter { - background-image: none; -} -.btn-twitter .badge { - color: #55acee; - background-color: #ffffff; -} -.btn-vimeo { - color: #ffffff; - background-color: #1ab7ea; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-vimeo:focus, -.btn-vimeo.focus { - color: #ffffff; - background-color: #1295bf; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-vimeo:hover { - color: #ffffff; - background-color: #1295bf; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-vimeo:active, -.btn-vimeo.active, -.open > .dropdown-toggle.btn-vimeo { - color: #ffffff; - background-color: #1295bf; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-vimeo:active, -.btn-vimeo.active, -.open > .dropdown-toggle.btn-vimeo { - background-image: none; -} -.btn-vimeo .badge { - color: #1ab7ea; - background-color: #ffffff; -} -.btn-vk { - color: #ffffff; - background-color: #587ea3; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-vk:focus, -.btn-vk.focus { - color: #ffffff; - background-color: #466482; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-vk:hover { - color: #ffffff; - background-color: #466482; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-vk:active, -.btn-vk.active, -.open > .dropdown-toggle.btn-vk { - color: #ffffff; - background-color: #466482; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-vk:active, -.btn-vk.active, -.open > .dropdown-toggle.btn-vk { - background-image: none; -} -.btn-vk .badge { - color: #587ea3; - background-color: #ffffff; -} -.btn-yahoo { - color: #ffffff; - background-color: #720e9e; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-yahoo:focus, -.btn-yahoo.focus { - color: #ffffff; - background-color: #500a6f; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-yahoo:hover { - color: #ffffff; - background-color: #500a6f; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-yahoo:active, -.btn-yahoo.active, -.open > .dropdown-toggle.btn-yahoo { - color: #ffffff; - background-color: #500a6f; - border-color: rgba(0, 0, 0, 0.2); -} -.btn-yahoo:active, -.btn-yahoo.active, -.open > .dropdown-toggle.btn-yahoo { - background-image: none; -} -.btn-yahoo .badge { - color: #720e9e; - background-color: #ffffff; -} diff --git a/src/main/resources/static/css/alt/AdminLTE-bootstrap-social.min.css b/src/main/resources/static/css/alt/AdminLTE-bootstrap-social.min.css deleted file mode 100755 index 59cf7f235..000000000 --- a/src/main/resources/static/css/alt/AdminLTE-bootstrap-social.min.css +++ /dev/null @@ -1 +0,0 @@ -.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon>:first-child{border:none;text-align:center;width:100%}.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0}.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0}.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0}.btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:focus,.btn-adn.focus{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:hover{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{background-image:none}.btn-adn .badge{color:#d87a68;background-color:#fff}.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:focus,.btn-bitbucket.focus{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{background-image:none}.btn-bitbucket .badge{color:#205081;background-color:#fff}.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:focus,.btn-dropbox.focus{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{background-image:none}.btn-dropbox .badge{color:#1087dd;background-color:#fff}.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{background-image:none}.btn-facebook .badge{color:#3b5998;background-color:#fff}.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:focus,.btn-flickr.focus{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{background-image:none}.btn-flickr .badge{color:#ff0084;background-color:#fff}.btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare:focus,.btn-foursquare.focus{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:hover{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{background-image:none}.btn-foursquare .badge{color:#f94877;background-color:#fff}.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:focus,.btn-github.focus{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:hover{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{background-image:none}.btn-github .badge{color:#444;background-color:#fff}.btn-google{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google:focus,.btn-google.focus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:hover{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{background-image:none}.btn-google .badge{color:#dd4b39;background-color:#fff}.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:focus,.btn-instagram.focus{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{background-image:none}.btn-instagram .badge{color:#3f729b;background-color:#fff}.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:focus,.btn-linkedin.focus{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{background-image:none}.btn-linkedin .badge{color:#007bb6;background-color:#fff}.btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:focus,.btn-microsoft.focus{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:hover{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{background-image:none}.btn-microsoft .badge{color:#2672ec;background-color:#fff}.btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:focus,.btn-openid.focus{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{background-image:none}.btn-openid .badge{color:#f7931e;background-color:#fff}.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:focus,.btn-pinterest.focus{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:hover{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{background-image:none}.btn-pinterest .badge{color:#cb2027;background-color:#fff}.btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:focus,.btn-reddit.focus{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:hover{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{background-image:none}.btn-reddit .badge{color:#eff7ff;background-color:#000}.btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:focus,.btn-soundcloud.focus{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:hover{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{background-image:none}.btn-soundcloud .badge{color:#f50;background-color:#fff}.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:focus,.btn-tumblr.focus{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{background-image:none}.btn-tumblr .badge{color:#2c4762;background-color:#fff}.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:focus,.btn-twitter.focus{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{background-image:none}.btn-twitter .badge{color:#55acee;background-color:#fff}.btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:focus,.btn-vimeo.focus{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:hover{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{background-image:none}.btn-vimeo .badge{color:#1ab7ea;background-color:#fff}.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:focus,.btn-vk.focus{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:hover{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{background-image:none}.btn-vk .badge{color:#587ea3;background-color:#fff}.btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:focus,.btn-yahoo.focus{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:hover{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{background-image:none}.btn-yahoo .badge{color:#720e9e;background-color:#fff} \ No newline at end of file diff --git a/src/main/resources/static/css/alt/AdminLTE-select2.css b/src/main/resources/static/css/alt/AdminLTE-select2.css deleted file mode 100755 index 36bc2d12e..000000000 --- a/src/main/resources/static/css/alt/AdminLTE-select2.css +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Plugin: Select2 - * --------------- - */ -.select2-container--default.select2-container--focus, -.select2-selection.select2-container--focus, -.select2-container--default:focus, -.select2-selection:focus, -.select2-container--default:active, -.select2-selection:active { - outline: none; -} -.select2-container--default .select2-selection--single, -.select2-selection .select2-selection--single { - border: 1px solid #d2d6de; - border-radius: 0; - padding: 6px 12px; - height: 34px; -} -.select2-container--default.select2-container--open { - border-color: #3c8dbc; -} -.select2-dropdown { - border: 1px solid #d2d6de; - border-radius: 0; -} -.select2-container--default .select2-results__option--highlighted[aria-selected] { - background-color: #3c8dbc; - color: white; -} -.select2-results__option { - padding: 6px 12px; - user-select: none; - -webkit-user-select: none; -} -.select2-container .select2-selection--single .select2-selection__rendered { - padding-left: 0; - padding-right: 0; - height: auto; - margin-top: -4px; -} -.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { - padding-right: 6px; - padding-left: 20px; -} -.select2-container--default .select2-selection--single .select2-selection__arrow { - height: 28px; - right: 3px; -} -.select2-container--default .select2-selection--single .select2-selection__arrow b { - margin-top: 0; -} -.select2-dropdown .select2-search__field, -.select2-search--inline .select2-search__field { - border: 1px solid #d2d6de; -} -.select2-dropdown .select2-search__field:focus, -.select2-search--inline .select2-search__field:focus { - outline: none; -} -.select2-container--default.select2-container--focus .select2-selection--multiple, -.select2-container--default .select2-search--dropdown .select2-search__field { - border-color: #3c8dbc !important; -} -.select2-container--default .select2-results__option[aria-disabled=true] { - color: #999; -} -.select2-container--default .select2-results__option[aria-selected=true] { - background-color: #ddd; -} -.select2-container--default .select2-results__option[aria-selected=true], -.select2-container--default .select2-results__option[aria-selected=true]:hover { - color: #444; -} -.select2-container--default .select2-selection--multiple { - border: 1px solid #d2d6de; - border-radius: 0; -} -.select2-container--default .select2-selection--multiple:focus { - border-color: #3c8dbc; -} -.select2-container--default.select2-container--focus .select2-selection--multiple { - border-color: #d2d6de; -} -.select2-container--default .select2-selection--multiple .select2-selection__choice { - background-color: #3c8dbc; - border-color: #367fa9; - padding: 1px 10px; - color: #fff; -} -.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { - margin-right: 5px; - color: rgba(255, 255, 255, 0.7); -} -.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { - color: #fff; -} -.select2-container .select2-selection--single .select2-selection__rendered { - padding-right: 10px; -} diff --git a/src/main/resources/static/css/alt/AdminLTE-select2.min.css b/src/main/resources/static/css/alt/AdminLTE-select2.min.css deleted file mode 100755 index e711e7c8b..000000000 --- a/src/main/resources/static/css/alt/AdminLTE-select2.min.css +++ /dev/null @@ -1 +0,0 @@ -.select2-container--default.select2-container--focus,.select2-selection.select2-container--focus,.select2-container--default:focus,.select2-selection:focus,.select2-container--default:active,.select2-selection:active{outline:none}.select2-container--default .select2-selection--single,.select2-selection .select2-selection--single{border:1px solid #d2d6de;border-radius:0;padding:6px 12px;height:34px}.select2-container--default.select2-container--open{border-color:#3c8dbc}.select2-dropdown{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#3c8dbc;color:white}.select2-results__option{padding:6px 12px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{padding-left:0;padding-right:0;height:auto;margin-top:-4px}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px}.select2-container--default .select2-selection--single .select2-selection__arrow{height:28px;right:3px}.select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0}.select2-dropdown .select2-search__field,.select2-search--inline .select2-search__field{border:1px solid #d2d6de}.select2-dropdown .select2-search__field:focus,.select2-search--inline .select2-search__field:focus{outline:none}.select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default .select2-search--dropdown .select2-search__field{border-color:#3c8dbc !important}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#444}.select2-container--default .select2-selection--multiple{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-selection--multiple:focus{border-color:#3c8dbc}.select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#d2d6de}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;padding:1px 10px;color:#fff}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{margin-right:5px;color:rgba(255,255,255,0.7)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container .select2-selection--single .select2-selection__rendered{padding-right:10px} \ No newline at end of file diff --git a/src/main/resources/static/css/alt/AdminLTE-without-plugins.css b/src/main/resources/static/css/alt/AdminLTE-without-plugins.css deleted file mode 100755 index 75f707106..000000000 --- a/src/main/resources/static/css/alt/AdminLTE-without-plugins.css +++ /dev/null @@ -1,4002 +0,0 @@ -/*! - * AdminLTE v2.4.0 Without Third-Party Plugins - * Author: Almsaeed Studio - * Website: Almsaeed Studio - * License: Open source - MIT - * Please visit http://opensource.org/licenses/MIT for more information -!*/ -/* - * Core: General Layout Style - * ------------------------- - */ -html, -body { - height: 100%; -} -.layout-boxed html, -.layout-boxed body { - height: 100%; -} -body { - font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif; - font-weight: 400; - overflow-x: hidden; - overflow-y: auto; -} -/* Layout */ -.wrapper { - height: 100%; - position: relative; - overflow-x: hidden; - overflow-y: auto; -} -.wrapper:before, -.wrapper:after { - content: " "; - display: table; -} -.wrapper:after { - clear: both; -} -.layout-boxed .wrapper { - max-width: 1250px; - margin: 0 auto; - min-height: 100%; - box-shadow: 0 0 8px rgba(0, 0, 0, 0.5); - position: relative; -} -.layout-boxed { - background-color: #f9fafc; -} -/* - * Content Wrapper - contains the main content - */ -.content-wrapper, -.main-footer { - -webkit-transition: -webkit-transform 0.3s ease-in-out, margin 0.3s ease-in-out; - -moz-transition: -moz-transform 0.3s ease-in-out, margin 0.3s ease-in-out; - -o-transition: -o-transform 0.3s ease-in-out, margin 0.3s ease-in-out; - transition: transform 0.3s ease-in-out, margin 0.3s ease-in-out; - margin-left: 230px; - z-index: 820; -} -.layout-top-nav .content-wrapper, -.layout-top-nav .main-footer { - margin-left: 0; -} -@media (max-width: 767px) { - .content-wrapper, - .main-footer { - margin-left: 0; - } -} -@media (min-width: 768px) { - .sidebar-collapse .content-wrapper, - .sidebar-collapse .main-footer { - margin-left: 0; - } -} -@media (max-width: 767px) { - .sidebar-open .content-wrapper, - .sidebar-open .main-footer { - -webkit-transform: translate(230px, 0); - -ms-transform: translate(230px, 0); - -o-transform: translate(230px, 0); - transform: translate(230px, 0); - } -} -.content-wrapper { - min-height: 100%; - background-color: #ecf0f5; - z-index: 800; -} -.main-footer { - background: #fff; - padding: 15px; - color: #444; - border-top: 1px solid #d2d6de; -} -/* Fixed layout */ -.fixed .main-header, -.fixed .main-sidebar, -.fixed .left-side { - position: fixed; -} -.fixed .main-header { - top: 0; - right: 0; - left: 0; -} -.fixed .content-wrapper, -.fixed .right-side { - padding-top: 50px; -} -@media (max-width: 767px) { - .fixed .content-wrapper, - .fixed .right-side { - padding-top: 100px; - } -} -.fixed.layout-boxed .wrapper { - max-width: 100%; -} -.fixed .wrapper { - overflow: hidden; -} -.hold-transition .content-wrapper, -.hold-transition .right-side, -.hold-transition .main-footer, -.hold-transition .main-sidebar, -.hold-transition .left-side, -.hold-transition .main-header .navbar, -.hold-transition .main-header .logo, -.hold-transition .menu-open .fa-angle-left { - /* Fix for IE */ - -webkit-transition: none; - -o-transition: none; - transition: none; -} -/* Content */ -.content { - min-height: 250px; - padding: 15px; - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -/* H1 - H6 font */ -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: 'Source Sans Pro', sans-serif; -} -/* General Links */ -a { - color: #3c8dbc; -} -a:hover, -a:active, -a:focus { - outline: none; - text-decoration: none; - color: #72afd2; -} -/* Page Header */ -.page-header { - margin: 10px 0 20px 0; - font-size: 22px; -} -.page-header > small { - color: #666; - display: block; - margin-top: 5px; -} -/* - * Component: Main Header - * ---------------------- - */ -.main-header { - position: relative; - max-height: 100px; - z-index: 1030; -} -.main-header .navbar { - -webkit-transition: margin-left 0.3s ease-in-out; - -o-transition: margin-left 0.3s ease-in-out; - transition: margin-left 0.3s ease-in-out; - margin-bottom: 0; - margin-left: 230px; - border: none; - min-height: 50px; - border-radius: 0; -} -.layout-top-nav .main-header .navbar { - margin-left: 0; -} -.main-header #navbar-search-input.form-control { - background: rgba(255, 255, 255, 0.2); - border-color: transparent; -} -.main-header #navbar-search-input.form-control:focus, -.main-header #navbar-search-input.form-control:active { - border-color: rgba(0, 0, 0, 0.1); - background: rgba(255, 255, 255, 0.9); -} -.main-header #navbar-search-input.form-control::-moz-placeholder { - color: #ccc; - opacity: 1; -} -.main-header #navbar-search-input.form-control:-ms-input-placeholder { - color: #ccc; -} -.main-header #navbar-search-input.form-control::-webkit-input-placeholder { - color: #ccc; -} -.main-header .navbar-custom-menu, -.main-header .navbar-right { - float: right; -} -@media (max-width: 991px) { - .main-header .navbar-custom-menu a, - .main-header .navbar-right a { - color: inherit; - background: transparent; - } -} -@media (max-width: 767px) { - .main-header .navbar-right { - float: none; - } - .navbar-collapse .main-header .navbar-right { - margin: 7.5px -15px; - } - .main-header .navbar-right > li { - color: inherit; - border: 0; - } -} -.main-header .sidebar-toggle { - float: left; - background-color: transparent; - background-image: none; - padding: 15px 15px; - font-family: fontAwesome; -} -.main-header .sidebar-toggle:before { - content: "\f0c9"; -} -.main-header .sidebar-toggle:hover { - color: #fff; -} -.main-header .sidebar-toggle:focus, -.main-header .sidebar-toggle:active { - background: transparent; -} -.main-header .sidebar-toggle .icon-bar { - display: none; -} -.main-header .navbar .nav > li.user > a > .fa, -.main-header .navbar .nav > li.user > a > .glyphicon, -.main-header .navbar .nav > li.user > a > .ion { - margin-right: 5px; -} -.main-header .navbar .nav > li > a > .label { - position: absolute; - top: 9px; - right: 7px; - text-align: center; - font-size: 9px; - padding: 2px 3px; - line-height: .9; -} -.main-header .logo { - -webkit-transition: width 0.3s ease-in-out; - -o-transition: width 0.3s ease-in-out; - transition: width 0.3s ease-in-out; - display: block; - float: left; - height: 50px; - font-size: 20px; - line-height: 50px; - text-align: center; - width: 230px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - padding: 0 15px; - font-weight: 300; - overflow: hidden; -} -.main-header .logo .logo-lg { - display: block; -} -.main-header .logo .logo-mini { - display: none; -} -.main-header .navbar-brand { - color: #fff; -} -.content-header { - position: relative; - padding: 15px 15px 0 15px; -} -.content-header > h1 { - margin: 0; - font-size: 24px; -} -.content-header > h1 > small { - font-size: 15px; - display: inline-block; - padding-left: 4px; - font-weight: 300; -} -.content-header > .breadcrumb { - float: right; - background: transparent; - margin-top: 0; - margin-bottom: 0; - font-size: 12px; - padding: 7px 5px; - position: absolute; - top: 15px; - right: 10px; - border-radius: 2px; -} -.content-header > .breadcrumb > li > a { - color: #444; - text-decoration: none; - display: inline-block; -} -.content-header > .breadcrumb > li > a > .fa, -.content-header > .breadcrumb > li > a > .glyphicon, -.content-header > .breadcrumb > li > a > .ion { - margin-right: 5px; -} -.content-header > .breadcrumb > li + li:before { - content: '>\00a0'; -} -@media (max-width: 991px) { - .content-header > .breadcrumb { - position: relative; - margin-top: 5px; - top: 0; - right: 0; - float: none; - background: #d2d6de; - padding-left: 10px; - } - .content-header > .breadcrumb li:before { - color: #97a0b3; - } -} -.navbar-toggle { - color: #fff; - border: 0; - margin: 0; - padding: 15px 15px; -} -@media (max-width: 991px) { - .navbar-custom-menu .navbar-nav > li { - float: left; - } - .navbar-custom-menu .navbar-nav { - margin: 0; - float: left; - } - .navbar-custom-menu .navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 15px; - line-height: 20px; - } -} -@media (max-width: 767px) { - .main-header { - position: relative; - } - .main-header .logo, - .main-header .navbar { - width: 100%; - float: none; - } - .main-header .navbar { - margin: 0; - } - .main-header .navbar-custom-menu { - float: right; - } -} -@media (max-width: 991px) { - .navbar-collapse.pull-left { - float: none !important; - } - .navbar-collapse.pull-left + .navbar-custom-menu { - display: block; - position: absolute; - top: 0; - right: 40px; - } -} -/* - * Component: Sidebar - * ------------------ - */ -.main-sidebar { - position: absolute; - top: 0; - left: 0; - padding-top: 50px; - min-height: 100%; - width: 230px; - z-index: 810; - -webkit-transition: -webkit-transform 0.3s ease-in-out, width 0.3s ease-in-out; - -moz-transition: -moz-transform 0.3s ease-in-out, width 0.3s ease-in-out; - -o-transition: -o-transform 0.3s ease-in-out, width 0.3s ease-in-out; - transition: transform 0.3s ease-in-out, width 0.3s ease-in-out; -} -@media (max-width: 767px) { - .main-sidebar { - padding-top: 100px; - } -} -@media (max-width: 767px) { - .main-sidebar { - -webkit-transform: translate(-230px, 0); - -ms-transform: translate(-230px, 0); - -o-transform: translate(-230px, 0); - transform: translate(-230px, 0); - } -} -@media (min-width: 768px) { - .sidebar-collapse .main-sidebar { - -webkit-transform: translate(-230px, 0); - -ms-transform: translate(-230px, 0); - -o-transform: translate(-230px, 0); - transform: translate(-230px, 0); - } -} -@media (max-width: 767px) { - .sidebar-open .main-sidebar { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); - } -} -.sidebar { - padding-bottom: 10px; -} -.sidebar-form input:focus { - border-color: transparent; -} -.user-panel { - position: relative; - width: 100%; - padding: 10px; - overflow: hidden; -} -.user-panel:before, -.user-panel:after { - content: " "; - display: table; -} -.user-panel:after { - clear: both; -} -.user-panel > .image > img { - width: 100%; - max-width: 45px; - height: auto; -} -.user-panel > .info { - padding: 5px 5px 5px 15px; - line-height: 1; - position: absolute; - left: 55px; -} -.user-panel > .info > p { - font-weight: 600; - margin-bottom: 9px; -} -.user-panel > .info > a { - text-decoration: none; - padding-right: 5px; - margin-top: 3px; - font-size: 11px; -} -.user-panel > .info > a > .fa, -.user-panel > .info > a > .ion, -.user-panel > .info > a > .glyphicon { - margin-right: 3px; -} -.sidebar-menu { - list-style: none; - margin: 0; - padding: 0; -} -.sidebar-menu > li { - position: relative; - margin: 0; - padding: 0; -} -.sidebar-menu > li > a { - padding: 12px 5px 12px 15px; - display: block; -} -.sidebar-menu > li > a > .fa, -.sidebar-menu > li > a > .glyphicon, -.sidebar-menu > li > a > .ion { - width: 20px; -} -.sidebar-menu > li .label, -.sidebar-menu > li .badge { - margin-right: 5px; -} -.sidebar-menu > li .badge { - margin-top: 3px; -} -.sidebar-menu li.header { - padding: 10px 25px 10px 15px; - font-size: 12px; -} -.sidebar-menu li > a > .fa-angle-left, -.sidebar-menu li > a > .pull-right-container > .fa-angle-left { - width: auto; - height: auto; - padding: 0; - margin-right: 10px; - -webkit-transition: transform 0.5s ease; - -o-transition: transform 0.5s ease; - transition: transform 0.5s ease; -} -.sidebar-menu li > a > .fa-angle-left { - position: absolute; - top: 50%; - right: 10px; - margin-top: -8px; -} -.sidebar-menu .menu-open > a > .fa-angle-left, -.sidebar-menu .menu-open > a > .pull-right-container > .fa-angle-left { - -webkit-transform: rotate(-90deg); - -ms-transform: rotate(-90deg); - -o-transform: rotate(-90deg); - transform: rotate(-90deg); -} -.sidebar-menu .active > .treeview-menu { - display: block; -} -/* - * Component: Sidebar Mini - */ -@media (min-width: 768px) { - .sidebar-mini.sidebar-collapse .content-wrapper, - .sidebar-mini.sidebar-collapse .right-side, - .sidebar-mini.sidebar-collapse .main-footer { - margin-left: 50px !important; - z-index: 840; - } - .sidebar-mini.sidebar-collapse .main-sidebar { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); - width: 50px !important; - z-index: 850; - } - .sidebar-mini.sidebar-collapse .sidebar-menu > li { - position: relative; - } - .sidebar-mini.sidebar-collapse .sidebar-menu > li > a { - margin-right: 0; - } - .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span { - border-top-right-radius: 4px; - } - .sidebar-mini.sidebar-collapse .sidebar-menu > li:not(.treeview) > a > span { - border-bottom-right-radius: 4px; - } - .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { - padding-top: 5px; - padding-bottom: 5px; - border-bottom-right-radius: 4px; - } - .sidebar-mini.sidebar-collapse .main-sidebar .user-panel > .info, - .sidebar-mini.sidebar-collapse .sidebar-form, - .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span, - .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu, - .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > .pull-right, - .sidebar-mini.sidebar-collapse .sidebar-menu li.header { - display: none !important; - -webkit-transform: translateZ(0); - } - .sidebar-mini.sidebar-collapse .main-header .logo { - width: 50px; - } - .sidebar-mini.sidebar-collapse .main-header .logo > .logo-mini { - display: block; - margin-left: -15px; - margin-right: -15px; - font-size: 18px; - } - .sidebar-mini.sidebar-collapse .main-header .logo > .logo-lg { - display: none; - } - .sidebar-mini.sidebar-collapse .main-header .navbar { - margin-left: 50px; - } -} -.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > span:not(.pull-right), -.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > .treeview-menu { - display: block !important; - position: absolute; - width: 180px; - left: 50px; -} -.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > span { - top: 0; - margin-left: -3px; - padding: 12px 5px 12px 20px; - background-color: inherit; -} -.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container { - position: relative !important; - float: right; - width: auto !important; - left: 180px !important; - top: -22px !important; - z-index: 900; -} -.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container > .label:not(:first-of-type) { - display: none; -} -.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > .treeview-menu { - top: 44px; - margin-left: 0; -} -.sidebar-expanded-on-hover .main-footer, -.sidebar-expanded-on-hover .content-wrapper { - margin-left: 50px; -} -.sidebar-expanded-on-hover .main-sidebar { - box-shadow: 3px 0 8px rgba(0, 0, 0, 0.125); -} -.sidebar-menu, -.main-sidebar .user-panel, -.sidebar-menu > li.header { - white-space: nowrap; - overflow: hidden; -} -.sidebar-menu:hover { - overflow: visible; -} -.sidebar-form, -.sidebar-menu > li.header { - overflow: hidden; - text-overflow: clip; -} -.sidebar-menu li > a { - position: relative; -} -.sidebar-menu li > a > .pull-right-container { - position: absolute; - right: 10px; - top: 50%; - margin-top: -7px; -} -/* - * Component: Control sidebar. By default, this is the right sidebar. - */ -.control-sidebar-bg { - position: fixed; - z-index: 1000; - bottom: 0; -} -.control-sidebar-bg, -.control-sidebar { - top: 0; - right: -230px; - width: 230px; - -webkit-transition: right 0.3s ease-in-out; - -o-transition: right 0.3s ease-in-out; - transition: right 0.3s ease-in-out; -} -.control-sidebar { - position: absolute; - padding-top: 50px; - z-index: 1010; -} -@media (max-width: 767px) { - .control-sidebar { - padding-top: 100px; - } -} -.control-sidebar > .tab-content { - padding: 10px 15px; -} -.control-sidebar.control-sidebar-open, -.control-sidebar.control-sidebar-open + .control-sidebar-bg { - right: 0; -} -.control-sidebar-open .control-sidebar-bg, -.control-sidebar-open .control-sidebar { - right: 0; -} -@media (min-width: 768px) { - .control-sidebar-open .content-wrapper, - .control-sidebar-open .right-side, - .control-sidebar-open .main-footer { - margin-right: 230px; - } -} -.fixed .control-sidebar { - position: fixed; - height: 100%; - overflow-y: auto; - padding-bottom: 50px; -} -.nav-tabs.control-sidebar-tabs > li:first-of-type > a, -.nav-tabs.control-sidebar-tabs > li:first-of-type > a:hover, -.nav-tabs.control-sidebar-tabs > li:first-of-type > a:focus { - border-left-width: 0; -} -.nav-tabs.control-sidebar-tabs > li > a { - border-radius: 0; -} -.nav-tabs.control-sidebar-tabs > li > a, -.nav-tabs.control-sidebar-tabs > li > a:hover { - border-top: none; - border-right: none; - border-left: 1px solid transparent; - border-bottom: 1px solid transparent; -} -.nav-tabs.control-sidebar-tabs > li > a .icon { - font-size: 16px; -} -.nav-tabs.control-sidebar-tabs > li.active > a, -.nav-tabs.control-sidebar-tabs > li.active > a:hover, -.nav-tabs.control-sidebar-tabs > li.active > a:focus, -.nav-tabs.control-sidebar-tabs > li.active > a:active { - border-top: none; - border-right: none; - border-bottom: none; -} -@media (max-width: 768px) { - .nav-tabs.control-sidebar-tabs { - display: table; - } - .nav-tabs.control-sidebar-tabs > li { - display: table-cell; - } -} -.control-sidebar-heading { - font-weight: 400; - font-size: 16px; - padding: 10px 0; - margin-bottom: 10px; -} -.control-sidebar-subheading { - display: block; - font-weight: 400; - font-size: 14px; -} -.control-sidebar-menu { - list-style: none; - padding: 0; - margin: 0 -15px; -} -.control-sidebar-menu > li > a { - display: block; - padding: 10px 15px; -} -.control-sidebar-menu > li > a:before, -.control-sidebar-menu > li > a:after { - content: " "; - display: table; -} -.control-sidebar-menu > li > a:after { - clear: both; -} -.control-sidebar-menu > li > a > .control-sidebar-subheading { - margin-top: 0; -} -.control-sidebar-menu .menu-icon { - float: left; - width: 35px; - height: 35px; - border-radius: 50%; - text-align: center; - line-height: 35px; -} -.control-sidebar-menu .menu-info { - margin-left: 45px; - margin-top: 3px; -} -.control-sidebar-menu .menu-info > .control-sidebar-subheading { - margin: 0; -} -.control-sidebar-menu .menu-info > p { - margin: 0; - font-size: 11px; -} -.control-sidebar-menu .progress { - margin: 0; -} -.control-sidebar-dark { - color: #b8c7ce; -} -.control-sidebar-dark, -.control-sidebar-dark + .control-sidebar-bg { - background: #222d32; -} -.control-sidebar-dark .nav-tabs.control-sidebar-tabs { - border-bottom: #1c2529; -} -.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a { - background: #181f23; - color: #b8c7ce; -} -.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a, -.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover, -.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus { - border-left-color: #141a1d; - border-bottom-color: #141a1d; -} -.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover, -.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus, -.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:active { - background: #1c2529; -} -.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover { - color: #fff; -} -.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a, -.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:hover, -.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:focus, -.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:active { - background: #222d32; - color: #fff; -} -.control-sidebar-dark .control-sidebar-heading, -.control-sidebar-dark .control-sidebar-subheading { - color: #fff; -} -.control-sidebar-dark .control-sidebar-menu > li > a:hover { - background: #1e282c; -} -.control-sidebar-dark .control-sidebar-menu > li > a .menu-info > p { - color: #b8c7ce; -} -.control-sidebar-light { - color: #5e5e5e; -} -.control-sidebar-light, -.control-sidebar-light + .control-sidebar-bg { - background: #f9fafc; - border-left: 1px solid #d2d6de; -} -.control-sidebar-light .nav-tabs.control-sidebar-tabs { - border-bottom: #d2d6de; -} -.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a { - background: #e8ecf4; - color: #444444; -} -.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a, -.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover, -.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus { - border-left-color: #d2d6de; - border-bottom-color: #d2d6de; -} -.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover, -.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus, -.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:active { - background: #eff1f7; -} -.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a, -.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:hover, -.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:focus, -.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:active { - background: #f9fafc; - color: #111; -} -.control-sidebar-light .control-sidebar-heading, -.control-sidebar-light .control-sidebar-subheading { - color: #111; -} -.control-sidebar-light .control-sidebar-menu { - margin-left: -14px; -} -.control-sidebar-light .control-sidebar-menu > li > a:hover { - background: #f4f4f5; -} -.control-sidebar-light .control-sidebar-menu > li > a .menu-info > p { - color: #5e5e5e; -} -/* - * Component: Dropdown menus - * ------------------------- - */ -/*Dropdowns in general*/ -.dropdown-menu { - box-shadow: none; - border-color: #eee; -} -.dropdown-menu > li > a { - color: #777; -} -.dropdown-menu > li > a > .glyphicon, -.dropdown-menu > li > a > .fa, -.dropdown-menu > li > a > .ion { - margin-right: 10px; -} -.dropdown-menu > li > a:hover { - background-color: #e1e3e9; - color: #333; -} -.dropdown-menu > .divider { - background-color: #eee; -} -.navbar-nav > .notifications-menu > .dropdown-menu, -.navbar-nav > .messages-menu > .dropdown-menu, -.navbar-nav > .tasks-menu > .dropdown-menu { - width: 280px; - padding: 0 0 0 0; - margin: 0; - top: 100%; -} -.navbar-nav > .notifications-menu > .dropdown-menu > li, -.navbar-nav > .messages-menu > .dropdown-menu > li, -.navbar-nav > .tasks-menu > .dropdown-menu > li { - position: relative; -} -.navbar-nav > .notifications-menu > .dropdown-menu > li.header, -.navbar-nav > .messages-menu > .dropdown-menu > li.header, -.navbar-nav > .tasks-menu > .dropdown-menu > li.header { - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - background-color: #ffffff; - padding: 7px 10px; - border-bottom: 1px solid #f4f4f4; - color: #444444; - font-size: 14px; -} -.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a, -.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a, -.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a { - border-top-left-radius: 0; - border-top-right-radius: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; - font-size: 12px; - background-color: #fff; - padding: 7px 10px; - border-bottom: 1px solid #eeeeee; - color: #444 !important; - text-align: center; -} -@media (max-width: 991px) { - .navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a, - .navbar-nav > .messages-menu > .dropdown-menu > li.footer > a, - .navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a { - background: #fff !important; - color: #444 !important; - } -} -.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a:hover, -.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a:hover, -.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a:hover { - text-decoration: none; - font-weight: normal; -} -.navbar-nav > .notifications-menu > .dropdown-menu > li .menu, -.navbar-nav > .messages-menu > .dropdown-menu > li .menu, -.navbar-nav > .tasks-menu > .dropdown-menu > li .menu { - max-height: 200px; - margin: 0; - padding: 0; - list-style: none; - overflow-x: hidden; -} -.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a, -.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a, -.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a { - display: block; - white-space: nowrap; - /* Prevent text from breaking */ - border-bottom: 1px solid #f4f4f4; -} -.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a:hover, -.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:hover, -.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a:hover { - background: #f4f4f4; - text-decoration: none; -} -.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a { - color: #444444; - overflow: hidden; - text-overflow: ellipsis; - padding: 10px; -} -.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .glyphicon, -.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .fa, -.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .ion { - width: 20px; -} -.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a { - margin: 0; - padding: 10px 10px; -} -.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > div > img { - margin: auto 10px auto auto; - width: 40px; - height: 40px; -} -.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 { - padding: 0; - margin: 0 0 0 45px; - color: #444444; - font-size: 15px; - position: relative; -} -.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 > small { - color: #999999; - font-size: 10px; - position: absolute; - top: 0; - right: 0; -} -.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > p { - margin: 0 0 0 45px; - font-size: 12px; - color: #888888; -} -.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:before, -.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after { - content: " "; - display: table; -} -.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after { - clear: both; -} -.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a { - padding: 10px; -} -.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > h3 { - font-size: 14px; - padding: 0; - margin: 0 0 10px 0; - color: #666666; -} -.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > .progress { - padding: 0; - margin: 0; -} -.navbar-nav > .user-menu > .dropdown-menu { - border-top-right-radius: 0; - border-top-left-radius: 0; - padding: 1px 0 0 0; - border-top-width: 0; - width: 280px; -} -.navbar-nav > .user-menu > .dropdown-menu, -.navbar-nav > .user-menu > .dropdown-menu > .user-body { - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -.navbar-nav > .user-menu > .dropdown-menu > li.user-header { - height: 175px; - padding: 10px; - text-align: center; -} -.navbar-nav > .user-menu > .dropdown-menu > li.user-header > img { - z-index: 5; - height: 90px; - width: 90px; - border: 3px solid; - border-color: transparent; - border-color: rgba(255, 255, 255, 0.2); -} -.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p { - z-index: 5; - color: #fff; - color: rgba(255, 255, 255, 0.8); - font-size: 17px; - margin-top: 10px; -} -.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p > small { - display: block; - font-size: 12px; -} -.navbar-nav > .user-menu > .dropdown-menu > .user-body { - padding: 15px; - border-bottom: 1px solid #f4f4f4; - border-top: 1px solid #dddddd; -} -.navbar-nav > .user-menu > .dropdown-menu > .user-body:before, -.navbar-nav > .user-menu > .dropdown-menu > .user-body:after { - content: " "; - display: table; -} -.navbar-nav > .user-menu > .dropdown-menu > .user-body:after { - clear: both; -} -.navbar-nav > .user-menu > .dropdown-menu > .user-body a { - color: #444 !important; -} -@media (max-width: 991px) { - .navbar-nav > .user-menu > .dropdown-menu > .user-body a { - background: #fff !important; - color: #444 !important; - } -} -.navbar-nav > .user-menu > .dropdown-menu > .user-footer { - background-color: #f9f9f9; - padding: 10px; -} -.navbar-nav > .user-menu > .dropdown-menu > .user-footer:before, -.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after { - content: " "; - display: table; -} -.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after { - clear: both; -} -.navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default { - color: #666666; -} -@media (max-width: 991px) { - .navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default:hover { - background-color: #f9f9f9; - } -} -.navbar-nav > .user-menu .user-image { - float: left; - width: 25px; - height: 25px; - border-radius: 50%; - margin-right: 10px; - margin-top: -2px; -} -@media (max-width: 767px) { - .navbar-nav > .user-menu .user-image { - float: none; - margin-right: 0; - margin-top: -8px; - line-height: 10px; - } -} -/* Add fade animation to dropdown menus by appending - the class .animated-dropdown-menu to the .dropdown-menu ul (or ol)*/ -.open:not(.dropup) > .animated-dropdown-menu { - backface-visibility: visible !important; - -webkit-animation: flipInX 0.7s both; - -o-animation: flipInX 0.7s both; - animation: flipInX 0.7s both; -} -@keyframes flipInX { - 0% { - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transition-timing-function: ease-in; - opacity: 0; - } - 40% { - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transition-timing-function: ease-in; - } - 60% { - transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - opacity: 1; - } - 80% { - transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - } - 100% { - transform: perspective(400px); - } -} -@-webkit-keyframes flipInX { - 0% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - -webkit-transition-timing-function: ease-in; - opacity: 0; - } - 40% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - -webkit-transition-timing-function: ease-in; - } - 60% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - opacity: 1; - } - 80% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - } - 100% { - -webkit-transform: perspective(400px); - } -} -/* Fix dropdown menu in navbars */ -.navbar-custom-menu > .navbar-nav > li { - position: relative; -} -.navbar-custom-menu > .navbar-nav > li > .dropdown-menu { - position: absolute; - right: 0; - left: auto; -} -@media (max-width: 991px) { - .navbar-custom-menu > .navbar-nav { - float: right; - } - .navbar-custom-menu > .navbar-nav > li { - position: static; - } - .navbar-custom-menu > .navbar-nav > li > .dropdown-menu { - position: absolute; - right: 5%; - left: auto; - border: 1px solid #ddd; - background: #fff; - } -} -/* - * Component: Form - * --------------- - */ -.form-control { - border-radius: 0; - box-shadow: none; - border-color: #d2d6de; -} -.form-control:focus { - border-color: #3c8dbc; - box-shadow: none; -} -.form-control::-moz-placeholder, -.form-control:-ms-input-placeholder, -.form-control::-webkit-input-placeholder { - color: #bbb; - opacity: 1; -} -.form-control:not(select) { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} -.form-group.has-success label { - color: #00a65a; -} -.form-group.has-success .form-control, -.form-group.has-success .input-group-addon { - border-color: #00a65a; - box-shadow: none; -} -.form-group.has-success .help-block { - color: #00a65a; -} -.form-group.has-warning label { - color: #f39c12; -} -.form-group.has-warning .form-control, -.form-group.has-warning .input-group-addon { - border-color: #f39c12; - box-shadow: none; -} -.form-group.has-warning .help-block { - color: #f39c12; -} -.form-group.has-error label { - color: #dd4b39; -} -.form-group.has-error .form-control, -.form-group.has-error .input-group-addon { - border-color: #dd4b39; - box-shadow: none; -} -.form-group.has-error .help-block { - color: #dd4b39; -} -/* Input group */ -.input-group .input-group-addon { - border-radius: 0; - border-color: #d2d6de; - background-color: #fff; -} -/* button groups */ -.btn-group-vertical .btn.btn-flat:first-of-type, -.btn-group-vertical .btn.btn-flat:last-of-type { - border-radius: 0; -} -.icheck > label { - padding-left: 0; -} -/* support Font Awesome icons in form-control */ -.form-control-feedback.fa { - line-height: 34px; -} -.input-lg + .form-control-feedback.fa, -.input-group-lg + .form-control-feedback.fa, -.form-group-lg .form-control + .form-control-feedback.fa { - line-height: 46px; -} -.input-sm + .form-control-feedback.fa, -.input-group-sm + .form-control-feedback.fa, -.form-group-sm .form-control + .form-control-feedback.fa { - line-height: 30px; -} -/* - * Component: Progress Bar - * ----------------------- - */ -.progress, -.progress > .progress-bar { - -webkit-box-shadow: none; - box-shadow: none; -} -.progress, -.progress > .progress-bar, -.progress .progress-bar, -.progress > .progress-bar .progress-bar { - border-radius: 1px; -} -/* size variation */ -.progress.sm, -.progress-sm { - height: 10px; -} -.progress.sm, -.progress-sm, -.progress.sm .progress-bar, -.progress-sm .progress-bar { - border-radius: 1px; -} -.progress.xs, -.progress-xs { - height: 7px; -} -.progress.xs, -.progress-xs, -.progress.xs .progress-bar, -.progress-xs .progress-bar { - border-radius: 1px; -} -.progress.xxs, -.progress-xxs { - height: 3px; -} -.progress.xxs, -.progress-xxs, -.progress.xxs .progress-bar, -.progress-xxs .progress-bar { - border-radius: 1px; -} -/* Vertical bars */ -.progress.vertical { - position: relative; - width: 30px; - height: 200px; - display: inline-block; - margin-right: 10px; -} -.progress.vertical > .progress-bar { - width: 100%; - position: absolute; - bottom: 0; -} -.progress.vertical.sm, -.progress.vertical.progress-sm { - width: 20px; -} -.progress.vertical.xs, -.progress.vertical.progress-xs { - width: 10px; -} -.progress.vertical.xxs, -.progress.vertical.progress-xxs { - width: 3px; -} -.progress-group .progress-text { - font-weight: 600; -} -.progress-group .progress-number { - float: right; -} -/* Remove margins from progress bars when put in a table */ -.table tr > td .progress { - margin: 0; -} -.progress-bar-light-blue, -.progress-bar-primary { - background-color: #3c8dbc; -} -.progress-striped .progress-bar-light-blue, -.progress-striped .progress-bar-primary { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-green, -.progress-bar-success { - background-color: #00a65a; -} -.progress-striped .progress-bar-green, -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-aqua, -.progress-bar-info { - background-color: #00c0ef; -} -.progress-striped .progress-bar-aqua, -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-yellow, -.progress-bar-warning { - background-color: #f39c12; -} -.progress-striped .progress-bar-yellow, -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-red, -.progress-bar-danger { - background-color: #dd4b39; -} -.progress-striped .progress-bar-red, -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -/* - * Component: Small Box - * -------------------- - */ -.small-box { - border-radius: 2px; - position: relative; - display: block; - margin-bottom: 20px; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); -} -.small-box > .inner { - padding: 10px; -} -.small-box > .small-box-footer { - position: relative; - text-align: center; - padding: 3px 0; - color: #fff; - color: rgba(255, 255, 255, 0.8); - display: block; - z-index: 10; - background: rgba(0, 0, 0, 0.1); - text-decoration: none; -} -.small-box > .small-box-footer:hover { - color: #fff; - background: rgba(0, 0, 0, 0.15); -} -.small-box h3 { - font-size: 38px; - font-weight: bold; - margin: 0 0 10px 0; - white-space: nowrap; - padding: 0; -} -.small-box p { - font-size: 15px; -} -.small-box p > small { - display: block; - color: #f9f9f9; - font-size: 13px; - margin-top: 5px; -} -.small-box h3, -.small-box p { - z-index: 5; -} -.small-box .icon { - -webkit-transition: all 0.3s linear; - -o-transition: all 0.3s linear; - transition: all 0.3s linear; - position: absolute; - top: -10px; - right: 10px; - z-index: 0; - font-size: 90px; - color: rgba(0, 0, 0, 0.15); -} -.small-box:hover { - text-decoration: none; - color: #f9f9f9; -} -.small-box:hover .icon { - font-size: 95px; -} -@media (max-width: 767px) { - .small-box { - text-align: center; - } - .small-box .icon { - display: none; - } - .small-box p { - font-size: 12px; - } -} -/* - * Component: Box - * -------------- - */ -.box { - position: relative; - border-radius: 3px; - background: #ffffff; - border-top: 3px solid #d2d6de; - margin-bottom: 20px; - width: 100%; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); -} -.box.box-primary { - border-top-color: #3c8dbc; -} -.box.box-info { - border-top-color: #00c0ef; -} -.box.box-danger { - border-top-color: #dd4b39; -} -.box.box-warning { - border-top-color: #f39c12; -} -.box.box-success { - border-top-color: #00a65a; -} -.box.box-default { - border-top-color: #d2d6de; -} -.box.collapsed-box .box-body, -.box.collapsed-box .box-footer { - display: none; -} -.box .nav-stacked > li { - border-bottom: 1px solid #f4f4f4; - margin: 0; -} -.box .nav-stacked > li:last-of-type { - border-bottom: none; -} -.box.height-control .box-body { - max-height: 300px; - overflow: auto; -} -.box .border-right { - border-right: 1px solid #f4f4f4; -} -.box .border-left { - border-left: 1px solid #f4f4f4; -} -.box.box-solid { - border-top: 0; -} -.box.box-solid > .box-header .btn.btn-default { - background: transparent; -} -.box.box-solid > .box-header .btn:hover, -.box.box-solid > .box-header a:hover { - background: rgba(0, 0, 0, 0.1); -} -.box.box-solid.box-default { - border: 1px solid #d2d6de; -} -.box.box-solid.box-default > .box-header { - color: #444444; - background: #d2d6de; - background-color: #d2d6de; -} -.box.box-solid.box-default > .box-header a, -.box.box-solid.box-default > .box-header .btn { - color: #444444; -} -.box.box-solid.box-primary { - border: 1px solid #3c8dbc; -} -.box.box-solid.box-primary > .box-header { - color: #ffffff; - background: #3c8dbc; - background-color: #3c8dbc; -} -.box.box-solid.box-primary > .box-header a, -.box.box-solid.box-primary > .box-header .btn { - color: #ffffff; -} -.box.box-solid.box-info { - border: 1px solid #00c0ef; -} -.box.box-solid.box-info > .box-header { - color: #ffffff; - background: #00c0ef; - background-color: #00c0ef; -} -.box.box-solid.box-info > .box-header a, -.box.box-solid.box-info > .box-header .btn { - color: #ffffff; -} -.box.box-solid.box-danger { - border: 1px solid #dd4b39; -} -.box.box-solid.box-danger > .box-header { - color: #ffffff; - background: #dd4b39; - background-color: #dd4b39; -} -.box.box-solid.box-danger > .box-header a, -.box.box-solid.box-danger > .box-header .btn { - color: #ffffff; -} -.box.box-solid.box-warning { - border: 1px solid #f39c12; -} -.box.box-solid.box-warning > .box-header { - color: #ffffff; - background: #f39c12; - background-color: #f39c12; -} -.box.box-solid.box-warning > .box-header a, -.box.box-solid.box-warning > .box-header .btn { - color: #ffffff; -} -.box.box-solid.box-success { - border: 1px solid #00a65a; -} -.box.box-solid.box-success > .box-header { - color: #ffffff; - background: #00a65a; - background-color: #00a65a; -} -.box.box-solid.box-success > .box-header a, -.box.box-solid.box-success > .box-header .btn { - color: #ffffff; -} -.box.box-solid > .box-header > .box-tools .btn { - border: 0; - box-shadow: none; -} -.box.box-solid[class*='bg'] > .box-header { - color: #fff; -} -.box .box-group > .box { - margin-bottom: 5px; -} -.box .knob-label { - text-align: center; - color: #333; - font-weight: 100; - font-size: 12px; - margin-bottom: 0.3em; -} -.box > .overlay, -.overlay-wrapper > .overlay, -.box > .loading-img, -.overlay-wrapper > .loading-img { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; -} -.box .overlay, -.overlay-wrapper .overlay { - z-index: 50; - background: rgba(255, 255, 255, 0.7); - border-radius: 3px; -} -.box .overlay > .fa, -.overlay-wrapper .overlay > .fa { - position: absolute; - top: 50%; - left: 50%; - margin-left: -15px; - margin-top: -15px; - color: #000; - font-size: 30px; -} -.box .overlay.dark, -.overlay-wrapper .overlay.dark { - background: rgba(0, 0, 0, 0.5); -} -.box-header:before, -.box-body:before, -.box-footer:before, -.box-header:after, -.box-body:after, -.box-footer:after { - content: " "; - display: table; -} -.box-header:after, -.box-body:after, -.box-footer:after { - clear: both; -} -.box-header { - color: #444; - display: block; - padding: 10px; - position: relative; -} -.box-header.with-border { - border-bottom: 1px solid #f4f4f4; -} -.collapsed-box .box-header.with-border { - border-bottom: none; -} -.box-header > .fa, -.box-header > .glyphicon, -.box-header > .ion, -.box-header .box-title { - display: inline-block; - font-size: 18px; - margin: 0; - line-height: 1; -} -.box-header > .fa, -.box-header > .glyphicon, -.box-header > .ion { - margin-right: 5px; -} -.box-header > .box-tools { - position: absolute; - right: 10px; - top: 5px; -} -.box-header > .box-tools [data-toggle="tooltip"] { - position: relative; -} -.box-header > .box-tools.pull-right .dropdown-menu { - right: 0; - left: auto; -} -.box-header > .box-tools .dropdown-menu > li > a { - color: #444!important; -} -.btn-box-tool { - padding: 5px; - font-size: 12px; - background: transparent; - color: #97a0b3; -} -.open .btn-box-tool, -.btn-box-tool:hover { - color: #606c84; -} -.btn-box-tool.btn:active { - box-shadow: none; -} -.box-body { - border-top-left-radius: 0; - border-top-right-radius: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; - padding: 10px; -} -.no-header .box-body { - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.box-body > .table { - margin-bottom: 0; -} -.box-body .fc { - margin-top: 5px; -} -.box-body .full-width-chart { - margin: -19px; -} -.box-body.no-padding .full-width-chart { - margin: -9px; -} -.box-body .box-pane { - border-top-left-radius: 0; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 3px; -} -.box-body .box-pane-right { - border-top-left-radius: 0; - border-top-right-radius: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 0; -} -.box-footer { - border-top-left-radius: 0; - border-top-right-radius: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; - border-top: 1px solid #f4f4f4; - padding: 10px; - background-color: #ffffff; -} -.chart-legend { - margin: 10px 0; -} -@media (max-width: 991px) { - .chart-legend > li { - float: left; - margin-right: 10px; - } -} -.box-comments { - background: #f7f7f7; -} -.box-comments .box-comment { - padding: 8px 0; - border-bottom: 1px solid #eee; -} -.box-comments .box-comment:before, -.box-comments .box-comment:after { - content: " "; - display: table; -} -.box-comments .box-comment:after { - clear: both; -} -.box-comments .box-comment:last-of-type { - border-bottom: 0; -} -.box-comments .box-comment:first-of-type { - padding-top: 0; -} -.box-comments .box-comment img { - float: left; -} -.box-comments .comment-text { - margin-left: 40px; - color: #555; -} -.box-comments .username { - color: #444; - display: block; - font-weight: 600; -} -.box-comments .text-muted { - font-weight: 400; - font-size: 12px; -} -/* Widget: TODO LIST */ -.todo-list { - margin: 0; - padding: 0; - list-style: none; - overflow: auto; -} -.todo-list > li { - border-radius: 2px; - padding: 10px; - background: #f4f4f4; - margin-bottom: 2px; - border-left: 2px solid #e6e7e8; - color: #444; -} -.todo-list > li:last-of-type { - margin-bottom: 0; -} -.todo-list > li > input[type='checkbox'] { - margin: 0 10px 0 5px; -} -.todo-list > li .text { - display: inline-block; - margin-left: 5px; - font-weight: 600; -} -.todo-list > li .label { - margin-left: 10px; - font-size: 9px; -} -.todo-list > li .tools { - display: none; - float: right; - color: #dd4b39; -} -.todo-list > li .tools > .fa, -.todo-list > li .tools > .glyphicon, -.todo-list > li .tools > .ion { - margin-right: 5px; - cursor: pointer; -} -.todo-list > li:hover .tools { - display: inline-block; -} -.todo-list > li.done { - color: #999; -} -.todo-list > li.done .text { - text-decoration: line-through; - font-weight: 500; -} -.todo-list > li.done .label { - background: #d2d6de !important; -} -.todo-list .danger { - border-left-color: #dd4b39; -} -.todo-list .warning { - border-left-color: #f39c12; -} -.todo-list .info { - border-left-color: #00c0ef; -} -.todo-list .success { - border-left-color: #00a65a; -} -.todo-list .primary { - border-left-color: #3c8dbc; -} -.todo-list .handle { - display: inline-block; - cursor: move; - margin: 0 5px; -} -/* Chat widget (DEPRECATED - this will be removed in the next major release. Use Direct Chat instead)*/ -.chat { - padding: 5px 20px 5px 10px; -} -.chat .item { - margin-bottom: 10px; -} -.chat .item:before, -.chat .item:after { - content: " "; - display: table; -} -.chat .item:after { - clear: both; -} -.chat .item > img { - width: 40px; - height: 40px; - border: 2px solid transparent; - border-radius: 50%; -} -.chat .item > .online { - border: 2px solid #00a65a; -} -.chat .item > .offline { - border: 2px solid #dd4b39; -} -.chat .item > .message { - margin-left: 55px; - margin-top: -40px; -} -.chat .item > .message > .name { - display: block; - font-weight: 600; -} -.chat .item > .attachment { - border-radius: 3px; - background: #f4f4f4; - margin-left: 65px; - margin-right: 15px; - padding: 10px; -} -.chat .item > .attachment > h4 { - margin: 0 0 5px 0; - font-weight: 600; - font-size: 14px; -} -.chat .item > .attachment > p, -.chat .item > .attachment > .filename { - font-weight: 600; - font-size: 13px; - font-style: italic; - margin: 0; -} -.chat .item > .attachment:before, -.chat .item > .attachment:after { - content: " "; - display: table; -} -.chat .item > .attachment:after { - clear: both; -} -.box-input { - max-width: 200px; -} -.modal .panel-body { - color: #444; -} -/* - * Component: Info Box - * ------------------- - */ -.info-box { - display: block; - min-height: 90px; - background: #fff; - width: 100%; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); - border-radius: 2px; - margin-bottom: 15px; -} -.info-box small { - font-size: 14px; -} -.info-box .progress { - background: rgba(0, 0, 0, 0.2); - margin: 5px -10px 5px -10px; - height: 2px; -} -.info-box .progress, -.info-box .progress .progress-bar { - border-radius: 0; -} -.info-box .progress .progress-bar { - background: #fff; -} -.info-box-icon { - border-top-left-radius: 2px; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 2px; - display: block; - float: left; - height: 90px; - width: 90px; - text-align: center; - font-size: 45px; - line-height: 90px; - background: rgba(0, 0, 0, 0.2); -} -.info-box-icon > img { - max-width: 100%; -} -.info-box-content { - padding: 5px 10px; - margin-left: 90px; -} -.info-box-number { - display: block; - font-weight: bold; - font-size: 18px; -} -.progress-description, -.info-box-text { - display: block; - font-size: 14px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} -.info-box-text { - text-transform: uppercase; -} -.info-box-more { - display: block; -} -.progress-description { - margin: 0; -} -/* - * Component: Timeline - * ------------------- - */ -.timeline { - position: relative; - margin: 0 0 30px 0; - padding: 0; - list-style: none; -} -.timeline:before { - content: ''; - position: absolute; - top: 0; - bottom: 0; - width: 4px; - background: #ddd; - left: 31px; - margin: 0; - border-radius: 2px; -} -.timeline > li { - position: relative; - margin-right: 10px; - margin-bottom: 15px; -} -.timeline > li:before, -.timeline > li:after { - content: " "; - display: table; -} -.timeline > li:after { - clear: both; -} -.timeline > li > .timeline-item { - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); - border-radius: 3px; - margin-top: 0; - background: #fff; - color: #444; - margin-left: 60px; - margin-right: 15px; - padding: 0; - position: relative; -} -.timeline > li > .timeline-item > .time { - color: #999; - float: right; - padding: 10px; - font-size: 12px; -} -.timeline > li > .timeline-item > .timeline-header { - margin: 0; - color: #555; - border-bottom: 1px solid #f4f4f4; - padding: 10px; - font-size: 16px; - line-height: 1.1; -} -.timeline > li > .timeline-item > .timeline-header > a { - font-weight: 600; -} -.timeline > li > .timeline-item > .timeline-body, -.timeline > li > .timeline-item > .timeline-footer { - padding: 10px; -} -.timeline > li > .fa, -.timeline > li > .glyphicon, -.timeline > li > .ion { - width: 30px; - height: 30px; - font-size: 15px; - line-height: 30px; - position: absolute; - color: #666; - background: #d2d6de; - border-radius: 50%; - text-align: center; - left: 18px; - top: 0; -} -.timeline > .time-label > span { - font-weight: 600; - padding: 5px; - display: inline-block; - background-color: #fff; - border-radius: 4px; -} -.timeline-inverse > li > .timeline-item { - background: #f0f0f0; - border: 1px solid #ddd; - -webkit-box-shadow: none; - box-shadow: none; -} -.timeline-inverse > li > .timeline-item > .timeline-header { - border-bottom-color: #ddd; -} -/* - * Component: Button - * ----------------- - */ -.btn { - border-radius: 3px; - -webkit-box-shadow: none; - box-shadow: none; - border: 1px solid transparent; -} -.btn.uppercase { - text-transform: uppercase; -} -.btn.btn-flat { - border-radius: 0; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - border-width: 1px; -} -.btn:active { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn:focus { - outline: none; -} -.btn.btn-file { - position: relative; - overflow: hidden; -} -.btn.btn-file > input[type='file'] { - position: absolute; - top: 0; - right: 0; - min-width: 100%; - min-height: 100%; - font-size: 100px; - text-align: right; - opacity: 0; - filter: alpha(opacity=0); - outline: none; - background: white; - cursor: inherit; - display: block; -} -.btn-default { - background-color: #f4f4f4; - color: #444; - border-color: #ddd; -} -.btn-default:hover, -.btn-default:active, -.btn-default.hover { - background-color: #e7e7e7; -} -.btn-primary { - background-color: #3c8dbc; - border-color: #367fa9; -} -.btn-primary:hover, -.btn-primary:active, -.btn-primary.hover { - background-color: #367fa9; -} -.btn-success { - background-color: #00a65a; - border-color: #008d4c; -} -.btn-success:hover, -.btn-success:active, -.btn-success.hover { - background-color: #008d4c; -} -.btn-info { - background-color: #00c0ef; - border-color: #00acd6; -} -.btn-info:hover, -.btn-info:active, -.btn-info.hover { - background-color: #00acd6; -} -.btn-danger { - background-color: #dd4b39; - border-color: #d73925; -} -.btn-danger:hover, -.btn-danger:active, -.btn-danger.hover { - background-color: #d73925; -} -.btn-warning { - background-color: #f39c12; - border-color: #e08e0b; -} -.btn-warning:hover, -.btn-warning:active, -.btn-warning.hover { - background-color: #e08e0b; -} -.btn-outline { - border: 1px solid #fff; - background: transparent; - color: #fff; -} -.btn-outline:hover, -.btn-outline:focus, -.btn-outline:active { - color: rgba(255, 255, 255, 0.7); - border-color: rgba(255, 255, 255, 0.7); -} -.btn-link { - -webkit-box-shadow: none; - box-shadow: none; -} -.btn[class*='bg-']:hover { - -webkit-box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2); - box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2); -} -.btn-app { - border-radius: 3px; - position: relative; - padding: 15px 5px; - margin: 0 0 10px 10px; - min-width: 80px; - height: 60px; - text-align: center; - color: #666; - border: 1px solid #ddd; - background-color: #f4f4f4; - font-size: 12px; -} -.btn-app > .fa, -.btn-app > .glyphicon, -.btn-app > .ion { - font-size: 20px; - display: block; -} -.btn-app:hover { - background: #f4f4f4; - color: #444; - border-color: #aaa; -} -.btn-app:active, -.btn-app:focus { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn-app > .badge { - position: absolute; - top: -3px; - right: -10px; - font-size: 10px; - font-weight: 400; -} -/* - * Component: Callout - * ------------------ - */ -.callout { - border-radius: 3px; - margin: 0 0 20px 0; - padding: 15px 30px 15px 15px; - border-left: 5px solid #eee; -} -.callout a { - color: #fff; - text-decoration: underline; -} -.callout a:hover { - color: #eee; -} -.callout h4 { - margin-top: 0; - font-weight: 600; -} -.callout p:last-child { - margin-bottom: 0; -} -.callout code, -.callout .highlight { - background-color: #fff; -} -.callout.callout-danger { - border-color: #c23321; -} -.callout.callout-warning { - border-color: #c87f0a; -} -.callout.callout-info { - border-color: #0097bc; -} -.callout.callout-success { - border-color: #00733e; -} -/* - * Component: alert - * ---------------- - */ -.alert { - border-radius: 3px; -} -.alert h4 { - font-weight: 600; -} -.alert .icon { - margin-right: 10px; -} -.alert .close { - color: #000; - opacity: 0.2; - filter: alpha(opacity=20); -} -.alert .close:hover { - opacity: 0.5; - filter: alpha(opacity=50); -} -.alert a { - color: #fff; - text-decoration: underline; -} -.alert-success { - border-color: #008d4c; -} -.alert-danger, -.alert-error { - border-color: #d73925; -} -.alert-warning { - border-color: #e08e0b; -} -.alert-info { - border-color: #00acd6; -} -/* - * Component: Nav - * -------------- - */ -.nav > li > a:hover, -.nav > li > a:active, -.nav > li > a:focus { - color: #444; - background: #f7f7f7; -} -/* NAV PILLS */ -.nav-pills > li > a { - border-radius: 0; - border-top: 3px solid transparent; - color: #444; -} -.nav-pills > li > a > .fa, -.nav-pills > li > a > .glyphicon, -.nav-pills > li > a > .ion { - margin-right: 5px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - border-top-color: #3c8dbc; -} -.nav-pills > li.active > a { - font-weight: 600; -} -/* NAV STACKED */ -.nav-stacked > li > a { - border-radius: 0; - border-top: 0; - border-left: 3px solid transparent; - color: #444; -} -.nav-stacked > li.active > a, -.nav-stacked > li.active > a:hover { - background: transparent; - color: #444; - border-top: 0; - border-left-color: #3c8dbc; -} -.nav-stacked > li.header { - border-bottom: 1px solid #ddd; - color: #777; - margin-bottom: 10px; - padding: 5px 10px; - text-transform: uppercase; -} -/* NAV TABS */ -.nav-tabs-custom { - margin-bottom: 20px; - background: #fff; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); - border-radius: 3px; -} -.nav-tabs-custom > .nav-tabs { - margin: 0; - border-bottom-color: #f4f4f4; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.nav-tabs-custom > .nav-tabs > li { - border-top: 3px solid transparent; - margin-bottom: -2px; - margin-right: 5px; -} -.nav-tabs-custom > .nav-tabs > li.disabled > a { - color: #777; -} -.nav-tabs-custom > .nav-tabs > li > a { - color: #444; - border-radius: 0; -} -.nav-tabs-custom > .nav-tabs > li > a.text-muted { - color: #999; -} -.nav-tabs-custom > .nav-tabs > li > a, -.nav-tabs-custom > .nav-tabs > li > a:hover { - background: transparent; - margin: 0; -} -.nav-tabs-custom > .nav-tabs > li > a:hover { - color: #999; -} -.nav-tabs-custom > .nav-tabs > li:not(.active) > a:hover, -.nav-tabs-custom > .nav-tabs > li:not(.active) > a:focus, -.nav-tabs-custom > .nav-tabs > li:not(.active) > a:active { - border-color: transparent; -} -.nav-tabs-custom > .nav-tabs > li.active { - border-top-color: #3c8dbc; -} -.nav-tabs-custom > .nav-tabs > li.active > a, -.nav-tabs-custom > .nav-tabs > li.active:hover > a { - background-color: #fff; - color: #444; -} -.nav-tabs-custom > .nav-tabs > li.active > a { - border-top-color: transparent; - border-left-color: #f4f4f4; - border-right-color: #f4f4f4; -} -.nav-tabs-custom > .nav-tabs > li:first-of-type { - margin-left: 0; -} -.nav-tabs-custom > .nav-tabs > li:first-of-type.active > a { - border-left-color: transparent; -} -.nav-tabs-custom > .nav-tabs.pull-right { - float: none !important; -} -.nav-tabs-custom > .nav-tabs.pull-right > li { - float: right; -} -.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type { - margin-right: 0; -} -.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type > a { - border-left-width: 1px; -} -.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type.active > a { - border-left-color: #f4f4f4; - border-right-color: transparent; -} -.nav-tabs-custom > .nav-tabs > li.header { - line-height: 35px; - padding: 0 10px; - font-size: 20px; - color: #444; -} -.nav-tabs-custom > .nav-tabs > li.header > .fa, -.nav-tabs-custom > .nav-tabs > li.header > .glyphicon, -.nav-tabs-custom > .nav-tabs > li.header > .ion { - margin-right: 5px; -} -.nav-tabs-custom > .tab-content { - background: #fff; - padding: 10px; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.nav-tabs-custom .dropdown.open > a:active, -.nav-tabs-custom .dropdown.open > a:focus { - background: transparent; - color: #999; -} -.nav-tabs-custom.tab-primary > .nav-tabs > li.active { - border-top-color: #3c8dbc; -} -.nav-tabs-custom.tab-info > .nav-tabs > li.active { - border-top-color: #00c0ef; -} -.nav-tabs-custom.tab-danger > .nav-tabs > li.active { - border-top-color: #dd4b39; -} -.nav-tabs-custom.tab-warning > .nav-tabs > li.active { - border-top-color: #f39c12; -} -.nav-tabs-custom.tab-success > .nav-tabs > li.active { - border-top-color: #00a65a; -} -.nav-tabs-custom.tab-default > .nav-tabs > li.active { - border-top-color: #d2d6de; -} -/* PAGINATION */ -.pagination > li > a { - background: #fafafa; - color: #666; -} -.pagination.pagination-flat > li > a { - border-radius: 0 !important; -} -/* - * Component: Products List - * ------------------------ - */ -.products-list { - list-style: none; - margin: 0; - padding: 0; -} -.products-list > .item { - border-radius: 3px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); - padding: 10px 0; - background: #fff; -} -.products-list > .item:before, -.products-list > .item:after { - content: " "; - display: table; -} -.products-list > .item:after { - clear: both; -} -.products-list .product-img { - float: left; -} -.products-list .product-img img { - width: 50px; - height: 50px; -} -.products-list .product-info { - margin-left: 60px; -} -.products-list .product-title { - font-weight: 600; -} -.products-list .product-description { - display: block; - color: #999; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} -.product-list-in-box > .item { - -webkit-box-shadow: none; - box-shadow: none; - border-radius: 0; - border-bottom: 1px solid #f4f4f4; -} -.product-list-in-box > .item:last-of-type { - border-bottom-width: 0; -} -/* - * Component: 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 { - border-top: 1px solid #f4f4f4; -} -.table > thead > tr > th { - border-bottom: 2px solid #f4f4f4; -} -.table tr td .progress { - margin-top: 5px; -} -.table-bordered { - border: 1px solid #f4f4f4; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #f4f4f4; -} -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.table.no-border, -.table.no-border td, -.table.no-border th { - border: 0; -} -/* .text-center in tables */ -table.text-center, -table.text-center td, -table.text-center th { - text-align: center; -} -.table.align th { - text-align: left; -} -.table.align td { - text-align: right; -} -/* - * Component: Label - * ---------------- - */ -.label-default { - background-color: #d2d6de; - color: #444; -} -/* - * Component: Direct Chat - * ---------------------- - */ -.direct-chat .box-body { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - position: relative; - overflow-x: hidden; - padding: 0; -} -.direct-chat.chat-pane-open .direct-chat-contacts { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} -.direct-chat-messages { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); - padding: 10px; - height: 250px; - overflow: auto; -} -.direct-chat-msg, -.direct-chat-text { - display: block; -} -.direct-chat-msg { - margin-bottom: 10px; -} -.direct-chat-msg:before, -.direct-chat-msg:after { - content: " "; - display: table; -} -.direct-chat-msg:after { - clear: both; -} -.direct-chat-messages, -.direct-chat-contacts { - -webkit-transition: -webkit-transform 0.5s ease-in-out; - -moz-transition: -moz-transform 0.5s ease-in-out; - -o-transition: -o-transform 0.5s ease-in-out; - transition: transform 0.5s ease-in-out; -} -.direct-chat-text { - border-radius: 5px; - position: relative; - padding: 5px 10px; - background: #d2d6de; - border: 1px solid #d2d6de; - margin: 5px 0 0 50px; - color: #444444; -} -.direct-chat-text:after, -.direct-chat-text:before { - position: absolute; - right: 100%; - top: 15px; - border: solid transparent; - border-right-color: #d2d6de; - content: ' '; - height: 0; - width: 0; - pointer-events: none; -} -.direct-chat-text:after { - border-width: 5px; - margin-top: -5px; -} -.direct-chat-text:before { - border-width: 6px; - margin-top: -6px; -} -.right .direct-chat-text { - margin-right: 50px; - margin-left: 0; -} -.right .direct-chat-text:after, -.right .direct-chat-text:before { - right: auto; - left: 100%; - border-right-color: transparent; - border-left-color: #d2d6de; -} -.direct-chat-img { - border-radius: 50%; - float: left; - width: 40px; - height: 40px; -} -.right .direct-chat-img { - float: right; -} -.direct-chat-info { - display: block; - margin-bottom: 2px; - font-size: 12px; -} -.direct-chat-name { - font-weight: 600; -} -.direct-chat-timestamp { - color: #999; -} -.direct-chat-contacts-open .direct-chat-contacts { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} -.direct-chat-contacts { - -webkit-transform: translate(101%, 0); - -ms-transform: translate(101%, 0); - -o-transform: translate(101%, 0); - transform: translate(101%, 0); - position: absolute; - top: 0; - bottom: 0; - height: 250px; - width: 100%; - background: #222d32; - color: #fff; - overflow: auto; -} -.contacts-list > li { - border-bottom: 1px solid rgba(0, 0, 0, 0.2); - padding: 10px; - margin: 0; -} -.contacts-list > li:before, -.contacts-list > li:after { - content: " "; - display: table; -} -.contacts-list > li:after { - clear: both; -} -.contacts-list > li:last-of-type { - border-bottom: none; -} -.contacts-list-img { - border-radius: 50%; - width: 40px; - float: left; -} -.contacts-list-info { - margin-left: 45px; - color: #fff; -} -.contacts-list-name, -.contacts-list-status { - display: block; -} -.contacts-list-name { - font-weight: 600; -} -.contacts-list-status { - font-size: 12px; -} -.contacts-list-date { - color: #aaa; - font-weight: normal; -} -.contacts-list-msg { - color: #999; -} -.direct-chat-danger .right > .direct-chat-text { - background: #dd4b39; - border-color: #dd4b39; - color: #ffffff; -} -.direct-chat-danger .right > .direct-chat-text:after, -.direct-chat-danger .right > .direct-chat-text:before { - border-left-color: #dd4b39; -} -.direct-chat-primary .right > .direct-chat-text { - background: #3c8dbc; - border-color: #3c8dbc; - color: #ffffff; -} -.direct-chat-primary .right > .direct-chat-text:after, -.direct-chat-primary .right > .direct-chat-text:before { - border-left-color: #3c8dbc; -} -.direct-chat-warning .right > .direct-chat-text { - background: #f39c12; - border-color: #f39c12; - color: #ffffff; -} -.direct-chat-warning .right > .direct-chat-text:after, -.direct-chat-warning .right > .direct-chat-text:before { - border-left-color: #f39c12; -} -.direct-chat-info .right > .direct-chat-text { - background: #00c0ef; - border-color: #00c0ef; - color: #ffffff; -} -.direct-chat-info .right > .direct-chat-text:after, -.direct-chat-info .right > .direct-chat-text:before { - border-left-color: #00c0ef; -} -.direct-chat-success .right > .direct-chat-text { - background: #00a65a; - border-color: #00a65a; - color: #ffffff; -} -.direct-chat-success .right > .direct-chat-text:after, -.direct-chat-success .right > .direct-chat-text:before { - border-left-color: #00a65a; -} -/* - * Component: Users List - * --------------------- - */ -.users-list > li { - width: 25%; - float: left; - padding: 10px; - text-align: center; -} -.users-list > li img { - border-radius: 50%; - max-width: 100%; - height: auto; -} -.users-list > li > a:hover, -.users-list > li > a:hover .users-list-name { - color: #999; -} -.users-list-name, -.users-list-date { - display: block; -} -.users-list-name { - font-weight: 600; - color: #444; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} -.users-list-date { - color: #999; - font-size: 12px; -} -/* - * Component: Carousel - * ------------------- - */ -.carousel-control.left, -.carousel-control.right { - background-image: none; -} -.carousel-control > .fa { - font-size: 40px; - position: absolute; - top: 50%; - z-index: 5; - display: inline-block; - margin-top: -20px; -} -/* - * Component: modal - * ---------------- - */ -.modal { - background: rgba(0, 0, 0, 0.3); -} -.modal-content { - border-radius: 0; - -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125); - box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125); - border: 0; -} -@media (min-width: 768px) { - .modal-content { - -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125); - box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125); - } -} -.modal-header { - border-bottom-color: #f4f4f4; -} -.modal-footer { - border-top-color: #f4f4f4; -} -.modal-primary .modal-header, -.modal-primary .modal-footer { - border-color: #307095; -} -.modal-warning .modal-header, -.modal-warning .modal-footer { - border-color: #c87f0a; -} -.modal-info .modal-header, -.modal-info .modal-footer { - border-color: #0097bc; -} -.modal-success .modal-header, -.modal-success .modal-footer { - border-color: #00733e; -} -.modal-danger .modal-header, -.modal-danger .modal-footer { - border-color: #c23321; -} -/* - * Component: Social Widgets - * ------------------------- - */ -.box-widget { - border: none; - position: relative; -} -.widget-user .widget-user-header { - padding: 20px; - height: 120px; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.widget-user .widget-user-username { - margin-top: 0; - margin-bottom: 5px; - font-size: 25px; - font-weight: 300; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); -} -.widget-user .widget-user-desc { - margin-top: 0; -} -.widget-user .widget-user-image { - position: absolute; - top: 65px; - left: 50%; - margin-left: -45px; -} -.widget-user .widget-user-image > img { - width: 90px; - height: auto; - border: 3px solid #fff; -} -.widget-user .box-footer { - padding-top: 30px; -} -.widget-user-2 .widget-user-header { - padding: 20px; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.widget-user-2 .widget-user-username { - margin-top: 5px; - margin-bottom: 5px; - font-size: 25px; - font-weight: 300; -} -.widget-user-2 .widget-user-desc { - margin-top: 0; -} -.widget-user-2 .widget-user-username, -.widget-user-2 .widget-user-desc { - margin-left: 75px; -} -.widget-user-2 .widget-user-image > img { - width: 65px; - height: auto; - float: left; -} -.treeview-menu { - display: none; - list-style: none; - padding: 0; - margin: 0; - padding-left: 5px; -} -.treeview-menu .treeview-menu { - padding-left: 20px; -} -.treeview-menu > li { - margin: 0; -} -.treeview-menu > li > a { - padding: 5px 5px 5px 15px; - display: block; - font-size: 14px; -} -.treeview-menu > li > a > .fa, -.treeview-menu > li > a > .glyphicon, -.treeview-menu > li > a > .ion { - width: 20px; -} -.treeview-menu > li > a > .pull-right-container > .fa-angle-left, -.treeview-menu > li > a > .pull-right-container > .fa-angle-down, -.treeview-menu > li > a > .fa-angle-left, -.treeview-menu > li > a > .fa-angle-down { - width: auto; -} -/* - * Page: Mailbox - * ------------- - */ -.mailbox-messages > .table { - margin: 0; -} -.mailbox-controls { - padding: 5px; -} -.mailbox-controls.with-border { - border-bottom: 1px solid #f4f4f4; -} -.mailbox-read-info { - border-bottom: 1px solid #f4f4f4; - padding: 10px; -} -.mailbox-read-info h3 { - font-size: 20px; - margin: 0; -} -.mailbox-read-info h5 { - margin: 0; - padding: 5px 0 0 0; -} -.mailbox-read-time { - color: #999; - font-size: 13px; -} -.mailbox-read-message { - padding: 10px; -} -.mailbox-attachments li { - float: left; - width: 200px; - border: 1px solid #eee; - margin-bottom: 10px; - margin-right: 10px; -} -.mailbox-attachment-name { - font-weight: bold; - color: #666; -} -.mailbox-attachment-icon, -.mailbox-attachment-info, -.mailbox-attachment-size { - display: block; -} -.mailbox-attachment-info { - padding: 10px; - background: #f4f4f4; -} -.mailbox-attachment-size { - color: #999; - font-size: 12px; -} -.mailbox-attachment-icon { - text-align: center; - font-size: 65px; - color: #666; - padding: 20px 10px; -} -.mailbox-attachment-icon.has-img { - padding: 0; -} -.mailbox-attachment-icon.has-img > img { - max-width: 100%; - height: auto; -} -/* - * Page: Lock Screen - * ----------------- - */ -/* ADD THIS CLASS TO THE TAG */ -.lockscreen { - background: #d2d6de; -} -.lockscreen-logo { - font-size: 35px; - text-align: center; - margin-bottom: 25px; - font-weight: 300; -} -.lockscreen-logo a { - color: #444; -} -.lockscreen-wrapper { - max-width: 400px; - margin: 0 auto; - margin-top: 10%; -} -/* User name [optional] */ -.lockscreen .lockscreen-name { - text-align: center; - font-weight: 600; -} -/* Will contain the image and the sign in form */ -.lockscreen-item { - border-radius: 4px; - padding: 0; - background: #fff; - position: relative; - margin: 10px auto 30px auto; - width: 290px; -} -/* User image */ -.lockscreen-image { - border-radius: 50%; - position: absolute; - left: -10px; - top: -25px; - background: #fff; - padding: 5px; - z-index: 10; -} -.lockscreen-image > img { - border-radius: 50%; - width: 70px; - height: 70px; -} -/* Contains the password input and the login button */ -.lockscreen-credentials { - margin-left: 70px; -} -.lockscreen-credentials .form-control { - border: 0; -} -.lockscreen-credentials .btn { - background-color: #fff; - border: 0; - padding: 0 10px; -} -.lockscreen-footer { - margin-top: 10px; -} -/* - * Page: Login & Register - * ---------------------- - */ -.login-logo, -.register-logo { - font-size: 35px; - text-align: center; - margin-bottom: 25px; - font-weight: 300; -} -.login-logo a, -.register-logo a { - color: #444; -} -.login-page, -.register-page { - background: #d2d6de; -} -.login-box, -.register-box { - width: 360px; - margin: 7% auto; -} -@media (max-width: 768px) { - .login-box, - .register-box { - width: 90%; - margin-top: 20px; - } -} -.login-box-body, -.register-box-body { - background: #fff; - padding: 20px; - border-top: 0; - color: #666; -} -.login-box-body .form-control-feedback, -.register-box-body .form-control-feedback { - color: #777; -} -.login-box-msg, -.register-box-msg { - margin: 0; - text-align: center; - padding: 0 20px 20px 20px; -} -.social-auth-links { - margin: 10px 0; -} -/* - * Page: 400 and 500 error pages - * ------------------------------ - */ -.error-page { - width: 600px; - margin: 20px auto 0 auto; -} -@media (max-width: 991px) { - .error-page { - width: 100%; - } -} -.error-page > .headline { - float: left; - font-size: 100px; - font-weight: 300; -} -@media (max-width: 991px) { - .error-page > .headline { - float: none; - text-align: center; - } -} -.error-page > .error-content { - margin-left: 190px; - display: block; -} -@media (max-width: 991px) { - .error-page > .error-content { - margin-left: 0; - } -} -.error-page > .error-content > h3 { - font-weight: 300; - font-size: 25px; -} -@media (max-width: 991px) { - .error-page > .error-content > h3 { - text-align: center; - } -} -/* - * Page: Invoice - * ------------- - */ -.invoice { - position: relative; - background: #fff; - border: 1px solid #f4f4f4; - padding: 20px; - margin: 10px 25px; -} -.invoice-title { - margin-top: 0; -} -/* - * Page: Profile - * ------------- - */ -.profile-user-img { - margin: 0 auto; - width: 100px; - padding: 3px; - border: 3px solid #d2d6de; -} -.profile-username { - font-size: 21px; - margin-top: 5px; -} -.post { - border-bottom: 1px solid #d2d6de; - margin-bottom: 15px; - padding-bottom: 15px; - color: #666; -} -.post:last-of-type { - border-bottom: 0; - margin-bottom: 0; - padding-bottom: 0; -} -.post .user-block { - margin-bottom: 15px; -} -/* - * General: Miscellaneous - * ---------------------- - */ -.pad { - padding: 10px; -} -.margin { - margin: 10px; -} -.margin-bottom { - margin-bottom: 20px; -} -.margin-bottom-none { - margin-bottom: 0; -} -.margin-r-5 { - margin-right: 5px; -} -.inline { - display: inline; -} -.description-block { - display: block; - margin: 10px 0; - text-align: center; -} -.description-block.margin-bottom { - margin-bottom: 25px; -} -.description-block > .description-header { - margin: 0; - padding: 0; - font-weight: 600; - font-size: 16px; -} -.description-block > .description-text { - text-transform: uppercase; -} -.bg-red, -.bg-yellow, -.bg-aqua, -.bg-blue, -.bg-light-blue, -.bg-green, -.bg-navy, -.bg-teal, -.bg-olive, -.bg-lime, -.bg-orange, -.bg-fuchsia, -.bg-purple, -.bg-maroon, -.bg-black, -.bg-red-active, -.bg-yellow-active, -.bg-aqua-active, -.bg-blue-active, -.bg-light-blue-active, -.bg-green-active, -.bg-navy-active, -.bg-teal-active, -.bg-olive-active, -.bg-lime-active, -.bg-orange-active, -.bg-fuchsia-active, -.bg-purple-active, -.bg-maroon-active, -.bg-black-active, -.callout.callout-danger, -.callout.callout-warning, -.callout.callout-info, -.callout.callout-success, -.alert-success, -.alert-danger, -.alert-error, -.alert-warning, -.alert-info, -.label-danger, -.label-info, -.label-warning, -.label-primary, -.label-success, -.modal-primary .modal-body, -.modal-primary .modal-header, -.modal-primary .modal-footer, -.modal-warning .modal-body, -.modal-warning .modal-header, -.modal-warning .modal-footer, -.modal-info .modal-body, -.modal-info .modal-header, -.modal-info .modal-footer, -.modal-success .modal-body, -.modal-success .modal-header, -.modal-success .modal-footer, -.modal-danger .modal-body, -.modal-danger .modal-header, -.modal-danger .modal-footer { - color: #fff !important; -} -.bg-gray { - color: #000; - background-color: #d2d6de !important; -} -.bg-gray-light { - background-color: #f7f7f7; -} -.bg-black { - background-color: #111111 !important; -} -.bg-red, -.callout.callout-danger, -.alert-danger, -.alert-error, -.label-danger, -.modal-danger .modal-body { - background-color: #dd4b39 !important; -} -.bg-yellow, -.callout.callout-warning, -.alert-warning, -.label-warning, -.modal-warning .modal-body { - background-color: #f39c12 !important; -} -.bg-aqua, -.callout.callout-info, -.alert-info, -.label-info, -.modal-info .modal-body { - background-color: #00c0ef !important; -} -.bg-blue { - background-color: #0073b7 !important; -} -.bg-light-blue, -.label-primary, -.modal-primary .modal-body { - background-color: #3c8dbc !important; -} -.bg-green, -.callout.callout-success, -.alert-success, -.label-success, -.modal-success .modal-body { - background-color: #00a65a !important; -} -.bg-navy { - background-color: #001f3f !important; -} -.bg-teal { - background-color: #39cccc !important; -} -.bg-olive { - background-color: #3d9970 !important; -} -.bg-lime { - background-color: #01ff70 !important; -} -.bg-orange { - background-color: #ff851b !important; -} -.bg-fuchsia { - background-color: #f012be !important; -} -.bg-purple { - background-color: #605ca8 !important; -} -.bg-maroon { - background-color: #d81b60 !important; -} -.bg-gray-active { - color: #000; - background-color: #b5bbc8 !important; -} -.bg-black-active { - background-color: #000000 !important; -} -.bg-red-active, -.modal-danger .modal-header, -.modal-danger .modal-footer { - background-color: #d33724 !important; -} -.bg-yellow-active, -.modal-warning .modal-header, -.modal-warning .modal-footer { - background-color: #db8b0b !important; -} -.bg-aqua-active, -.modal-info .modal-header, -.modal-info .modal-footer { - background-color: #00a7d0 !important; -} -.bg-blue-active { - background-color: #005384 !important; -} -.bg-light-blue-active, -.modal-primary .modal-header, -.modal-primary .modal-footer { - background-color: #357ca5 !important; -} -.bg-green-active, -.modal-success .modal-header, -.modal-success .modal-footer { - background-color: #008d4c !important; -} -.bg-navy-active { - background-color: #001a35 !important; -} -.bg-teal-active { - background-color: #30bbbb !important; -} -.bg-olive-active { - background-color: #368763 !important; -} -.bg-lime-active { - background-color: #00e765 !important; -} -.bg-orange-active { - background-color: #ff7701 !important; -} -.bg-fuchsia-active { - background-color: #db0ead !important; -} -.bg-purple-active { - background-color: #555299 !important; -} -.bg-maroon-active { - background-color: #ca195a !important; -} -[class^="bg-"].disabled { - opacity: 0.65; - filter: alpha(opacity=65); -} -.text-red { - color: #dd4b39 !important; -} -.text-yellow { - color: #f39c12 !important; -} -.text-aqua { - color: #00c0ef !important; -} -.text-blue { - color: #0073b7 !important; -} -.text-black { - color: #111111 !important; -} -.text-light-blue { - color: #3c8dbc !important; -} -.text-green { - color: #00a65a !important; -} -.text-gray { - color: #d2d6de !important; -} -.text-navy { - color: #001f3f !important; -} -.text-teal { - color: #39cccc !important; -} -.text-olive { - color: #3d9970 !important; -} -.text-lime { - color: #01ff70 !important; -} -.text-orange { - color: #ff851b !important; -} -.text-fuchsia { - color: #f012be !important; -} -.text-purple { - color: #605ca8 !important; -} -.text-maroon { - color: #d81b60 !important; -} -.link-muted { - color: #7a869d; -} -.link-muted:hover, -.link-muted:focus { - color: #606c84; -} -.link-black { - color: #666; -} -.link-black:hover, -.link-black:focus { - color: #999; -} -.hide { - display: none !important; -} -.no-border { - border: 0 !important; -} -.no-padding { - padding: 0 !important; -} -.no-margin { - margin: 0 !important; -} -.no-shadow { - box-shadow: none !important; -} -.list-unstyled, -.chart-legend, -.contacts-list, -.users-list, -.mailbox-attachments { - list-style: none; - margin: 0; - padding: 0; -} -.list-group-unbordered > .list-group-item { - border-left: 0; - border-right: 0; - border-radius: 0; - padding-left: 0; - padding-right: 0; -} -.flat { - border-radius: 0 !important; -} -.text-bold, -.text-bold.table td, -.text-bold.table th { - font-weight: 700; -} -.text-sm { - font-size: 12px; -} -.jqstooltip { - padding: 5px !important; - width: auto !important; - height: auto !important; -} -.bg-teal-gradient { - background: #39cccc !important; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #39cccc), color-stop(1, #7adddd)) !important; - background: -ms-linear-gradient(bottom, #39cccc, #7adddd) !important; - background: -moz-linear-gradient(center bottom, #39cccc 0%, #7adddd 100%) !important; - background: -o-linear-gradient(#7adddd, #39cccc) !important; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39cccc', GradientType=0) !important; - color: #fff; -} -.bg-light-blue-gradient { - background: #3c8dbc !important; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #3c8dbc), color-stop(1, #67a8ce)) !important; - background: -ms-linear-gradient(bottom, #3c8dbc, #67a8ce) !important; - background: -moz-linear-gradient(center bottom, #3c8dbc 0%, #67a8ce 100%) !important; - background: -o-linear-gradient(#67a8ce, #3c8dbc) !important; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important; - color: #fff; -} -.bg-blue-gradient { - background: #0073b7 !important; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #0073b7), color-stop(1, #0089db)) !important; - background: -ms-linear-gradient(bottom, #0073b7, #0089db) !important; - background: -moz-linear-gradient(center bottom, #0073b7 0%, #0089db 100%) !important; - background: -o-linear-gradient(#0089db, #0073b7) !important; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important; - color: #fff; -} -.bg-aqua-gradient { - background: #00c0ef !important; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00c0ef), color-stop(1, #14d1ff)) !important; - background: -ms-linear-gradient(bottom, #00c0ef, #14d1ff) !important; - background: -moz-linear-gradient(center bottom, #00c0ef 0%, #14d1ff 100%) !important; - background: -o-linear-gradient(#14d1ff, #00c0ef) !important; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important; - color: #fff; -} -.bg-yellow-gradient { - background: #f39c12 !important; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #f39c12), color-stop(1, #f7bc60)) !important; - background: -ms-linear-gradient(bottom, #f39c12, #f7bc60) !important; - background: -moz-linear-gradient(center bottom, #f39c12 0%, #f7bc60 100%) !important; - background: -o-linear-gradient(#f7bc60, #f39c12) !important; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important; - color: #fff; -} -.bg-purple-gradient { - background: #605ca8 !important; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #605ca8), color-stop(1, #9491c4)) !important; - background: -ms-linear-gradient(bottom, #605ca8, #9491c4) !important; - background: -moz-linear-gradient(center bottom, #605ca8 0%, #9491c4 100%) !important; - background: -o-linear-gradient(#9491c4, #605ca8) !important; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important; - color: #fff; -} -.bg-green-gradient { - background: #00a65a !important; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00a65a), color-stop(1, #00ca6d)) !important; - background: -ms-linear-gradient(bottom, #00a65a, #00ca6d) !important; - background: -moz-linear-gradient(center bottom, #00a65a 0%, #00ca6d 100%) !important; - background: -o-linear-gradient(#00ca6d, #00a65a) !important; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important; - color: #fff; -} -.bg-red-gradient { - background: #dd4b39 !important; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #dd4b39), color-stop(1, #e47365)) !important; - background: -ms-linear-gradient(bottom, #dd4b39, #e47365) !important; - background: -moz-linear-gradient(center bottom, #dd4b39 0%, #e47365 100%) !important; - background: -o-linear-gradient(#e47365, #dd4b39) !important; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important; - color: #fff; -} -.bg-black-gradient { - background: #111111 !important; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #111111), color-stop(1, #2b2b2b)) !important; - background: -ms-linear-gradient(bottom, #111111, #2b2b2b) !important; - background: -moz-linear-gradient(center bottom, #111111 0%, #2b2b2b 100%) !important; - background: -o-linear-gradient(#2b2b2b, #111111) !important; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111111', GradientType=0) !important; - color: #fff; -} -.bg-maroon-gradient { - background: #d81b60 !important; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #d81b60), color-stop(1, #e73f7c)) !important; - background: -ms-linear-gradient(bottom, #d81b60, #e73f7c) !important; - background: -moz-linear-gradient(center bottom, #d81b60 0%, #e73f7c 100%) !important; - background: -o-linear-gradient(#e73f7c, #d81b60) !important; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#d81b60', GradientType=0) !important; - color: #fff; -} -.description-block .description-icon { - font-size: 16px; -} -.no-pad-top { - padding-top: 0; -} -.position-static { - position: static !important; -} -.list-header { - font-size: 15px; - padding: 10px 4px; - font-weight: bold; - color: #666; -} -.list-seperator { - height: 1px; - background: #f4f4f4; - margin: 15px 0 9px 0; -} -.list-link > a { - padding: 4px; - color: #777; -} -.list-link > a:hover { - color: #222; -} -.font-light { - font-weight: 300; -} -.user-block:before, -.user-block:after { - content: " "; - display: table; -} -.user-block:after { - clear: both; -} -.user-block img { - width: 40px; - height: 40px; - float: left; -} -.user-block .username, -.user-block .description, -.user-block .comment { - display: block; - margin-left: 50px; -} -.user-block .username { - font-size: 16px; - font-weight: 600; -} -.user-block .description { - color: #999; - font-size: 13px; -} -.user-block.user-block-sm .username, -.user-block.user-block-sm .description, -.user-block.user-block-sm .comment { - margin-left: 40px; -} -.user-block.user-block-sm .username { - font-size: 14px; -} -.img-sm, -.img-md, -.img-lg, -.box-comments .box-comment img, -.user-block.user-block-sm img { - float: left; -} -.img-sm, -.box-comments .box-comment img, -.user-block.user-block-sm img { - width: 30px !important; - height: 30px !important; -} -.img-sm + .img-push { - margin-left: 40px; -} -.img-md { - width: 60px; - height: 60px; -} -.img-md + .img-push { - margin-left: 70px; -} -.img-lg { - width: 100px; - height: 100px; -} -.img-lg + .img-push { - margin-left: 110px; -} -.img-bordered { - border: 3px solid #d2d6de; - padding: 3px; -} -.img-bordered-sm { - border: 2px solid #d2d6de; - padding: 2px; -} -.attachment-block { - border: 1px solid #f4f4f4; - padding: 5px; - margin-bottom: 10px; - background: #f7f7f7; -} -.attachment-block .attachment-img { - max-width: 100px; - max-height: 100px; - height: auto; - float: left; -} -.attachment-block .attachment-pushed { - margin-left: 110px; -} -.attachment-block .attachment-heading { - margin: 0; -} -.attachment-block .attachment-text { - color: #555; -} -.connectedSortable { - min-height: 100px; -} -.ui-helper-hidden-accessible { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} -.sort-highlight { - background: #f4f4f4; - border: 1px dashed #ddd; - margin-bottom: 10px; -} -.full-opacity-hover { - opacity: 0.65; - filter: alpha(opacity=65); -} -.full-opacity-hover:hover { - opacity: 1; - filter: alpha(opacity=100); -} -.chart { - position: relative; - overflow: hidden; - width: 100%; -} -.chart svg, -.chart canvas { - width: 100% !important; -} -/* - * Misc: print - * ----------- - */ -@media print { - .no-print, - .main-sidebar, - .left-side, - .main-header, - .content-header { - display: none !important; - } - .content-wrapper, - .right-side, - .main-footer { - margin-left: 0 !important; - min-height: 0 !important; - -webkit-transform: translate(0, 0) !important; - -ms-transform: translate(0, 0) !important; - -o-transform: translate(0, 0) !important; - transform: translate(0, 0) !important; - } - .fixed .content-wrapper, - .fixed .right-side { - padding-top: 0 !important; - } - .invoice { - width: 100%; - border: 0; - margin: 0; - padding: 0; - } - .invoice-col { - float: left; - width: 33.3333333%; - } - .table-responsive { - overflow: auto; - } - .table-responsive > .table tr th, - .table-responsive > .table tr td { - white-space: normal !important; - } -} diff --git a/src/main/resources/static/css/alt/AdminLTE-without-plugins.min.css b/src/main/resources/static/css/alt/AdminLTE-without-plugins.min.css deleted file mode 100755 index efe6be536..000000000 --- a/src/main/resources/static/css/alt/AdminLTE-without-plugins.min.css +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * AdminLTE v2.4.0 Without Third-Party Plugins - * Author: Almsaeed Studio - * Website: Almsaeed Studio - * License: Open source - MIT - * Please visit http://opensource.org/licenses/MIT for more information -!*/html,body{height:100%}.layout-boxed html,.layout-boxed body{height:100%}body{font-family:'Source Sans Pro','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:400;overflow-x:hidden;overflow-y:auto}.wrapper{height:100%;position:relative;overflow-x:hidden;overflow-y:auto}.wrapper:before,.wrapper:after{content:" ";display:table}.wrapper:after{clear:both}.layout-boxed .wrapper{max-width:1250px;margin:0 auto;min-height:100%;box-shadow:0 0 8px rgba(0,0,0,0.5);position:relative}.layout-boxed{background-color:#f9fafc}.content-wrapper,.main-footer{-webkit-transition:-webkit-transform .3s ease-in-out,margin .3s ease-in-out;-moz-transition:-moz-transform .3s ease-in-out,margin .3s ease-in-out;-o-transition:-o-transform .3s ease-in-out,margin .3s ease-in-out;transition:transform .3s ease-in-out,margin .3s ease-in-out;margin-left:230px;z-index:820}.layout-top-nav .content-wrapper,.layout-top-nav .main-footer{margin-left:0}@media (max-width:767px){.content-wrapper,.main-footer{margin-left:0}}@media (min-width:768px){.sidebar-collapse .content-wrapper,.sidebar-collapse .main-footer{margin-left:0}}@media (max-width:767px){.sidebar-open .content-wrapper,.sidebar-open .main-footer{-webkit-transform:translate(230px, 0);-ms-transform:translate(230px, 0);-o-transform:translate(230px, 0);transform:translate(230px, 0)}}.content-wrapper{min-height:100%;background-color:#ecf0f5;z-index:800}.main-footer{background:#fff;padding:15px;color:#444;border-top:1px solid #d2d6de}.fixed .main-header,.fixed .main-sidebar,.fixed .left-side{position:fixed}.fixed .main-header{top:0;right:0;left:0}.fixed .content-wrapper,.fixed .right-side{padding-top:50px}@media (max-width:767px){.fixed .content-wrapper,.fixed .right-side{padding-top:100px}}.fixed.layout-boxed .wrapper{max-width:100%}.fixed .wrapper{overflow:hidden}.hold-transition .content-wrapper,.hold-transition .right-side,.hold-transition .main-footer,.hold-transition .main-sidebar,.hold-transition .left-side,.hold-transition .main-header .navbar,.hold-transition .main-header .logo,.hold-transition .menu-open .fa-angle-left{-webkit-transition:none;-o-transition:none;transition:none}.content{min-height:250px;padding:15px;margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:'Source Sans Pro',sans-serif}a{color:#3c8dbc}a:hover,a:active,a:focus{outline:none;text-decoration:none;color:#72afd2}.page-header{margin:10px 0 20px 0;font-size:22px}.page-header>small{color:#666;display:block;margin-top:5px}.main-header{position:relative;max-height:100px;z-index:1030}.main-header .navbar{-webkit-transition:margin-left .3s ease-in-out;-o-transition:margin-left .3s ease-in-out;transition:margin-left .3s ease-in-out;margin-bottom:0;margin-left:230px;border:none;min-height:50px;border-radius:0}.layout-top-nav .main-header .navbar{margin-left:0}.main-header #navbar-search-input.form-control{background:rgba(255,255,255,0.2);border-color:transparent}.main-header #navbar-search-input.form-control:focus,.main-header #navbar-search-input.form-control:active{border-color:rgba(0,0,0,0.1);background:rgba(255,255,255,0.9)}.main-header #navbar-search-input.form-control::-moz-placeholder{color:#ccc;opacity:1}.main-header #navbar-search-input.form-control:-ms-input-placeholder{color:#ccc}.main-header #navbar-search-input.form-control::-webkit-input-placeholder{color:#ccc}.main-header .navbar-custom-menu,.main-header .navbar-right{float:right}@media (max-width:991px){.main-header .navbar-custom-menu a,.main-header .navbar-right a{color:inherit;background:transparent}}@media (max-width:767px){.main-header .navbar-right{float:none}.navbar-collapse .main-header .navbar-right{margin:7.5px -15px}.main-header .navbar-right>li{color:inherit;border:0}}.main-header .sidebar-toggle{float:left;background-color:transparent;background-image:none;padding:15px 15px;font-family:fontAwesome}.main-header .sidebar-toggle:before{content:"\f0c9"}.main-header .sidebar-toggle:hover{color:#fff}.main-header .sidebar-toggle:focus,.main-header .sidebar-toggle:active{background:transparent}.main-header .sidebar-toggle .icon-bar{display:none}.main-header .navbar .nav>li.user>a>.fa,.main-header .navbar .nav>li.user>a>.glyphicon,.main-header .navbar .nav>li.user>a>.ion{margin-right:5px}.main-header .navbar .nav>li>a>.label{position:absolute;top:9px;right:7px;text-align:center;font-size:9px;padding:2px 3px;line-height:.9}.main-header .logo{-webkit-transition:width .3s ease-in-out;-o-transition:width .3s ease-in-out;transition:width .3s ease-in-out;display:block;float:left;height:50px;font-size:20px;line-height:50px;text-align:center;width:230px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;padding:0 15px;font-weight:300;overflow:hidden}.main-header .logo .logo-lg{display:block}.main-header .logo .logo-mini{display:none}.main-header .navbar-brand{color:#fff}.content-header{position:relative;padding:15px 15px 0 15px}.content-header>h1{margin:0;font-size:24px}.content-header>h1>small{font-size:15px;display:inline-block;padding-left:4px;font-weight:300}.content-header>.breadcrumb{float:right;background:transparent;margin-top:0;margin-bottom:0;font-size:12px;padding:7px 5px;position:absolute;top:15px;right:10px;border-radius:2px}.content-header>.breadcrumb>li>a{color:#444;text-decoration:none;display:inline-block}.content-header>.breadcrumb>li>a>.fa,.content-header>.breadcrumb>li>a>.glyphicon,.content-header>.breadcrumb>li>a>.ion{margin-right:5px}.content-header>.breadcrumb>li+li:before{content:'>\00a0'}@media (max-width:991px){.content-header>.breadcrumb{position:relative;margin-top:5px;top:0;right:0;float:none;background:#d2d6de;padding-left:10px}.content-header>.breadcrumb li:before{color:#97a0b3}}.navbar-toggle{color:#fff;border:0;margin:0;padding:15px 15px}@media (max-width:991px){.navbar-custom-menu .navbar-nav>li{float:left}.navbar-custom-menu .navbar-nav{margin:0;float:left}.navbar-custom-menu .navbar-nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px}}@media (max-width:767px){.main-header{position:relative}.main-header .logo,.main-header .navbar{width:100%;float:none}.main-header .navbar{margin:0}.main-header .navbar-custom-menu{float:right}}@media (max-width:991px){.navbar-collapse.pull-left{float:none !important}.navbar-collapse.pull-left+.navbar-custom-menu{display:block;position:absolute;top:0;right:40px}}.main-sidebar{position:absolute;top:0;left:0;padding-top:50px;min-height:100%;width:230px;z-index:810;-webkit-transition:-webkit-transform .3s ease-in-out,width .3s ease-in-out;-moz-transition:-moz-transform .3s ease-in-out,width .3s ease-in-out;-o-transition:-o-transform .3s ease-in-out,width .3s ease-in-out;transition:transform .3s ease-in-out,width .3s ease-in-out}@media (max-width:767px){.main-sidebar{padding-top:100px}}@media (max-width:767px){.main-sidebar{-webkit-transform:translate(-230px, 0);-ms-transform:translate(-230px, 0);-o-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (min-width:768px){.sidebar-collapse .main-sidebar{-webkit-transform:translate(-230px, 0);-ms-transform:translate(-230px, 0);-o-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (max-width:767px){.sidebar-open .main-sidebar{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}}.sidebar{padding-bottom:10px}.sidebar-form input:focus{border-color:transparent}.user-panel{position:relative;width:100%;padding:10px;overflow:hidden}.user-panel:before,.user-panel:after{content:" ";display:table}.user-panel:after{clear:both}.user-panel>.image>img{width:100%;max-width:45px;height:auto}.user-panel>.info{padding:5px 5px 5px 15px;line-height:1;position:absolute;left:55px}.user-panel>.info>p{font-weight:600;margin-bottom:9px}.user-panel>.info>a{text-decoration:none;padding-right:5px;margin-top:3px;font-size:11px}.user-panel>.info>a>.fa,.user-panel>.info>a>.ion,.user-panel>.info>a>.glyphicon{margin-right:3px}.sidebar-menu{list-style:none;margin:0;padding:0}.sidebar-menu>li{position:relative;margin:0;padding:0}.sidebar-menu>li>a{padding:12px 5px 12px 15px;display:block}.sidebar-menu>li>a>.fa,.sidebar-menu>li>a>.glyphicon,.sidebar-menu>li>a>.ion{width:20px}.sidebar-menu>li .label,.sidebar-menu>li .badge{margin-right:5px}.sidebar-menu>li .badge{margin-top:3px}.sidebar-menu li.header{padding:10px 25px 10px 15px;font-size:12px}.sidebar-menu li>a>.fa-angle-left,.sidebar-menu li>a>.pull-right-container>.fa-angle-left{width:auto;height:auto;padding:0;margin-right:10px;-webkit-transition:transform .5s ease;-o-transition:transform .5s ease;transition:transform .5s ease}.sidebar-menu li>a>.fa-angle-left{position:absolute;top:50%;right:10px;margin-top:-8px}.sidebar-menu .menu-open>a>.fa-angle-left,.sidebar-menu .menu-open>a>.pull-right-container>.fa-angle-left{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.sidebar-menu .active>.treeview-menu{display:block}@media (min-width:768px){.sidebar-mini.sidebar-collapse .content-wrapper,.sidebar-mini.sidebar-collapse .right-side,.sidebar-mini.sidebar-collapse .main-footer{margin-left:50px !important;z-index:840}.sidebar-mini.sidebar-collapse .main-sidebar{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0);width:50px !important;z-index:850}.sidebar-mini.sidebar-collapse .sidebar-menu>li{position:relative}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a{margin-right:0}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span{border-top-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li:not(.treeview)>a>span{border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{padding-top:5px;padding-bottom:5px;border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .main-sidebar .user-panel>.info,.sidebar-mini.sidebar-collapse .sidebar-form,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span,.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>.pull-right,.sidebar-mini.sidebar-collapse .sidebar-menu li.header{display:none !important;-webkit-transform:translateZ(0)}.sidebar-mini.sidebar-collapse .main-header .logo{width:50px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-mini{display:block;margin-left:-15px;margin-right:-15px;font-size:18px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-lg{display:none}.sidebar-mini.sidebar-collapse .main-header .navbar{margin-left:50px}}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span:not(.pull-right),.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{display:block !important;position:absolute;width:180px;left:50px}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span{top:0;margin-left:-3px;padding:12px 5px 12px 20px;background-color:inherit}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container{position:relative !important;float:right;width:auto !important;left:180px !important;top:-22px !important;z-index:900}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container>.label:not(:first-of-type){display:none}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{top:44px;margin-left:0}.sidebar-expanded-on-hover .main-footer,.sidebar-expanded-on-hover .content-wrapper{margin-left:50px}.sidebar-expanded-on-hover .main-sidebar{box-shadow:3px 0 8px rgba(0,0,0,0.125)}.sidebar-menu,.main-sidebar .user-panel,.sidebar-menu>li.header{white-space:nowrap;overflow:hidden}.sidebar-menu:hover{overflow:visible}.sidebar-form,.sidebar-menu>li.header{overflow:hidden;text-overflow:clip}.sidebar-menu li>a{position:relative}.sidebar-menu li>a>.pull-right-container{position:absolute;right:10px;top:50%;margin-top:-7px}.control-sidebar-bg{position:fixed;z-index:1000;bottom:0}.control-sidebar-bg,.control-sidebar{top:0;right:-230px;width:230px;-webkit-transition:right .3s ease-in-out;-o-transition:right .3s ease-in-out;transition:right .3s ease-in-out}.control-sidebar{position:absolute;padding-top:50px;z-index:1010}@media (max-width:767px){.control-sidebar{padding-top:100px}}.control-sidebar>.tab-content{padding:10px 15px}.control-sidebar.control-sidebar-open,.control-sidebar.control-sidebar-open+.control-sidebar-bg{right:0}.control-sidebar-open .control-sidebar-bg,.control-sidebar-open .control-sidebar{right:0}@media (min-width:768px){.control-sidebar-open .content-wrapper,.control-sidebar-open .right-side,.control-sidebar-open .main-footer{margin-right:230px}}.fixed .control-sidebar{position:fixed;height:100%;overflow-y:auto;padding-bottom:50px}.nav-tabs.control-sidebar-tabs>li:first-of-type>a,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:hover,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:focus{border-left-width:0}.nav-tabs.control-sidebar-tabs>li>a{border-radius:0}.nav-tabs.control-sidebar-tabs>li>a,.nav-tabs.control-sidebar-tabs>li>a:hover{border-top:none;border-right:none;border-left:1px solid transparent;border-bottom:1px solid transparent}.nav-tabs.control-sidebar-tabs>li>a .icon{font-size:16px}.nav-tabs.control-sidebar-tabs>li.active>a,.nav-tabs.control-sidebar-tabs>li.active>a:hover,.nav-tabs.control-sidebar-tabs>li.active>a:focus,.nav-tabs.control-sidebar-tabs>li.active>a:active{border-top:none;border-right:none;border-bottom:none}@media (max-width:768px){.nav-tabs.control-sidebar-tabs{display:table}.nav-tabs.control-sidebar-tabs>li{display:table-cell}}.control-sidebar-heading{font-weight:400;font-size:16px;padding:10px 0;margin-bottom:10px}.control-sidebar-subheading{display:block;font-weight:400;font-size:14px}.control-sidebar-menu{list-style:none;padding:0;margin:0 -15px}.control-sidebar-menu>li>a{display:block;padding:10px 15px}.control-sidebar-menu>li>a:before,.control-sidebar-menu>li>a:after{content:" ";display:table}.control-sidebar-menu>li>a:after{clear:both}.control-sidebar-menu>li>a>.control-sidebar-subheading{margin-top:0}.control-sidebar-menu .menu-icon{float:left;width:35px;height:35px;border-radius:50%;text-align:center;line-height:35px}.control-sidebar-menu .menu-info{margin-left:45px;margin-top:3px}.control-sidebar-menu .menu-info>.control-sidebar-subheading{margin:0}.control-sidebar-menu .menu-info>p{margin:0;font-size:11px}.control-sidebar-menu .progress{margin:0}.control-sidebar-dark{color:#b8c7ce}.control-sidebar-dark,.control-sidebar-dark+.control-sidebar-bg{background:#222d32}.control-sidebar-dark .nav-tabs.control-sidebar-tabs{border-bottom:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a{background:#181f23;color:#b8c7ce}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#141a1d;border-bottom-color:#141a1d}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:active{background:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover{color:#fff}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#222d32;color:#fff}.control-sidebar-dark .control-sidebar-heading,.control-sidebar-dark .control-sidebar-subheading{color:#fff}.control-sidebar-dark .control-sidebar-menu>li>a:hover{background:#1e282c}.control-sidebar-dark .control-sidebar-menu>li>a .menu-info>p{color:#b8c7ce}.control-sidebar-light{color:#5e5e5e}.control-sidebar-light,.control-sidebar-light+.control-sidebar-bg{background:#f9fafc;border-left:1px solid #d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs{border-bottom:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a{background:#e8ecf4;color:#444}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#d2d6de;border-bottom-color:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:active{background:#eff1f7}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#f9fafc;color:#111}.control-sidebar-light .control-sidebar-heading,.control-sidebar-light .control-sidebar-subheading{color:#111}.control-sidebar-light .control-sidebar-menu{margin-left:-14px}.control-sidebar-light .control-sidebar-menu>li>a:hover{background:#f4f4f5}.control-sidebar-light .control-sidebar-menu>li>a .menu-info>p{color:#5e5e5e}.dropdown-menu{box-shadow:none;border-color:#eee}.dropdown-menu>li>a{color:#777}.dropdown-menu>li>a>.glyphicon,.dropdown-menu>li>a>.fa,.dropdown-menu>li>a>.ion{margin-right:10px}.dropdown-menu>li>a:hover{background-color:#e1e3e9;color:#333}.dropdown-menu>.divider{background-color:#eee}.navbar-nav>.notifications-menu>.dropdown-menu,.navbar-nav>.messages-menu>.dropdown-menu,.navbar-nav>.tasks-menu>.dropdown-menu{width:280px;padding:0 0 0 0;margin:0;top:100%}.navbar-nav>.notifications-menu>.dropdown-menu>li,.navbar-nav>.messages-menu>.dropdown-menu>li,.navbar-nav>.tasks-menu>.dropdown-menu>li{position:relative}.navbar-nav>.notifications-menu>.dropdown-menu>li.header,.navbar-nav>.messages-menu>.dropdown-menu>li.header,.navbar-nav>.tasks-menu>.dropdown-menu>li.header{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:#ffffff;padding:7px 10px;border-bottom:1px solid #f4f4f4;color:#444444;font-size:14px}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px;font-size:12px;background-color:#fff;padding:7px 10px;border-bottom:1px solid #eeeeee;color:#444 !important;text-align:center}@media (max-width:991px){.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{background:#fff !important;color:#444 !important}}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a:hover{text-decoration:none;font-weight:normal}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu,.navbar-nav>.messages-menu>.dropdown-menu>li .menu,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu{max-height:200px;margin:0;padding:0;list-style:none;overflow-x:hidden}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{display:block;white-space:nowrap;border-bottom:1px solid #f4f4f4}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a:hover{background:#f4f4f4;text-decoration:none}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a{color:#444444;overflow:hidden;text-overflow:ellipsis;padding:10px}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.glyphicon,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.fa,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.ion{width:20px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a{margin:0;padding:10px 10px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>div>img{margin:auto 10px auto auto;width:40px;height:40px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4{padding:0;margin:0 0 0 45px;color:#444444;font-size:15px;position:relative}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4>small{color:#999999;font-size:10px;position:absolute;top:0;right:0}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>p{margin:0 0 0 45px;font-size:12px;color:#888888}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:before,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{content:" ";display:table}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{clear:both}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{padding:10px}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>h3{font-size:14px;padding:0;margin:0 0 10px 0;color:#666666}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>.progress{padding:0;margin:0}.navbar-nav>.user-menu>.dropdown-menu{border-top-right-radius:0;border-top-left-radius:0;padding:1px 0 0 0;border-top-width:0;width:280px}.navbar-nav>.user-menu>.dropdown-menu,.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header{height:175px;padding:10px;text-align:center}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>img{z-index:5;height:90px;width:90px;border:3px solid;border-color:transparent;border-color:rgba(255,255,255,0.2)}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p{z-index:5;color:#fff;color:rgba(255,255,255,0.8);font-size:17px;margin-top:10px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p>small{display:block;font-size:12px}.navbar-nav>.user-menu>.dropdown-menu>.user-body{padding:15px;border-bottom:1px solid #f4f4f4;border-top:1px solid #dddddd}.navbar-nav>.user-menu>.dropdown-menu>.user-body:before,.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-body a{color:#444 !important}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-body a{background:#fff !important;color:#444 !important}}.navbar-nav>.user-menu>.dropdown-menu>.user-footer{background-color:#f9f9f9;padding:10px}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:before,.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default{color:#666666}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default:hover{background-color:#f9f9f9}}.navbar-nav>.user-menu .user-image{float:left;width:25px;height:25px;border-radius:50%;margin-right:10px;margin-top:-2px}@media (max-width:767px){.navbar-nav>.user-menu .user-image{float:none;margin-right:0;margin-top:-8px;line-height:10px}}.open:not(.dropup)>.animated-dropdown-menu{backface-visibility:visible !important;-webkit-animation:flipInX .7s both;-o-animation:flipInX .7s both;animation:flipInX .7s both}@keyframes flipInX{0%{transform:perspective(400px) rotate3d(1, 0, 0, 90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotate3d(1, 0, 0, -20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{transform:perspective(400px)}}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 90deg);-webkit-transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -20deg);-webkit-transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{-webkit-transform:perspective(400px)}}.navbar-custom-menu>.navbar-nav>li{position:relative}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:0;left:auto}@media (max-width:991px){.navbar-custom-menu>.navbar-nav{float:right}.navbar-custom-menu>.navbar-nav>li{position:static}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:5%;left:auto;border:1px solid #ddd;background:#fff}}.form-control{border-radius:0;box-shadow:none;border-color:#d2d6de}.form-control:focus{border-color:#3c8dbc;box-shadow:none}.form-control::-moz-placeholder,.form-control:-ms-input-placeholder,.form-control::-webkit-input-placeholder{color:#bbb;opacity:1}.form-control:not(select){-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-group.has-success label{color:#00a65a}.form-group.has-success .form-control,.form-group.has-success .input-group-addon{border-color:#00a65a;box-shadow:none}.form-group.has-success .help-block{color:#00a65a}.form-group.has-warning label{color:#f39c12}.form-group.has-warning .form-control,.form-group.has-warning .input-group-addon{border-color:#f39c12;box-shadow:none}.form-group.has-warning .help-block{color:#f39c12}.form-group.has-error label{color:#dd4b39}.form-group.has-error .form-control,.form-group.has-error .input-group-addon{border-color:#dd4b39;box-shadow:none}.form-group.has-error .help-block{color:#dd4b39}.input-group .input-group-addon{border-radius:0;border-color:#d2d6de;background-color:#fff}.btn-group-vertical .btn.btn-flat:first-of-type,.btn-group-vertical .btn.btn-flat:last-of-type{border-radius:0}.icheck>label{padding-left:0}.form-control-feedback.fa{line-height:34px}.input-lg+.form-control-feedback.fa,.input-group-lg+.form-control-feedback.fa,.form-group-lg .form-control+.form-control-feedback.fa{line-height:46px}.input-sm+.form-control-feedback.fa,.input-group-sm+.form-control-feedback.fa,.form-group-sm .form-control+.form-control-feedback.fa{line-height:30px}.progress,.progress>.progress-bar{-webkit-box-shadow:none;box-shadow:none}.progress,.progress>.progress-bar,.progress .progress-bar,.progress>.progress-bar .progress-bar{border-radius:1px}.progress.sm,.progress-sm{height:10px}.progress.sm,.progress-sm,.progress.sm .progress-bar,.progress-sm .progress-bar{border-radius:1px}.progress.xs,.progress-xs{height:7px}.progress.xs,.progress-xs,.progress.xs .progress-bar,.progress-xs .progress-bar{border-radius:1px}.progress.xxs,.progress-xxs{height:3px}.progress.xxs,.progress-xxs,.progress.xxs .progress-bar,.progress-xxs .progress-bar{border-radius:1px}.progress.vertical{position:relative;width:30px;height:200px;display:inline-block;margin-right:10px}.progress.vertical>.progress-bar{width:100%;position:absolute;bottom:0}.progress.vertical.sm,.progress.vertical.progress-sm{width:20px}.progress.vertical.xs,.progress.vertical.progress-xs{width:10px}.progress.vertical.xxs,.progress.vertical.progress-xxs{width:3px}.progress-group .progress-text{font-weight:600}.progress-group .progress-number{float:right}.table tr>td .progress{margin:0}.progress-bar-light-blue,.progress-bar-primary{background-color:#3c8dbc}.progress-striped .progress-bar-light-blue,.progress-striped .progress-bar-primary{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-green,.progress-bar-success{background-color:#00a65a}.progress-striped .progress-bar-green,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-aqua,.progress-bar-info{background-color:#00c0ef}.progress-striped .progress-bar-aqua,.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-yellow,.progress-bar-warning{background-color:#f39c12}.progress-striped .progress-bar-yellow,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-red,.progress-bar-danger{background-color:#dd4b39}.progress-striped .progress-bar-red,.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.small-box{border-radius:2px;position:relative;display:block;margin-bottom:20px;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.small-box>.inner{padding:10px}.small-box>.small-box-footer{position:relative;text-align:center;padding:3px 0;color:#fff;color:rgba(255,255,255,0.8);display:block;z-index:10;background:rgba(0,0,0,0.1);text-decoration:none}.small-box>.small-box-footer:hover{color:#fff;background:rgba(0,0,0,0.15)}.small-box h3{font-size:38px;font-weight:bold;margin:0 0 10px 0;white-space:nowrap;padding:0}.small-box p{font-size:15px}.small-box p>small{display:block;color:#f9f9f9;font-size:13px;margin-top:5px}.small-box h3,.small-box p{z-index:5}.small-box .icon{-webkit-transition:all .3s linear;-o-transition:all .3s linear;transition:all .3s linear;position:absolute;top:-10px;right:10px;z-index:0;font-size:90px;color:rgba(0,0,0,0.15)}.small-box:hover{text-decoration:none;color:#f9f9f9}.small-box:hover .icon{font-size:95px}@media (max-width:767px){.small-box{text-align:center}.small-box .icon{display:none}.small-box p{font-size:12px}}.box{position:relative;border-radius:3px;background:#ffffff;border-top:3px solid #d2d6de;margin-bottom:20px;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.box.box-primary{border-top-color:#3c8dbc}.box.box-info{border-top-color:#00c0ef}.box.box-danger{border-top-color:#dd4b39}.box.box-warning{border-top-color:#f39c12}.box.box-success{border-top-color:#00a65a}.box.box-default{border-top-color:#d2d6de}.box.collapsed-box .box-body,.box.collapsed-box .box-footer{display:none}.box .nav-stacked>li{border-bottom:1px solid #f4f4f4;margin:0}.box .nav-stacked>li:last-of-type{border-bottom:none}.box.height-control .box-body{max-height:300px;overflow:auto}.box .border-right{border-right:1px solid #f4f4f4}.box .border-left{border-left:1px solid #f4f4f4}.box.box-solid{border-top:0}.box.box-solid>.box-header .btn.btn-default{background:transparent}.box.box-solid>.box-header .btn:hover,.box.box-solid>.box-header a:hover{background:rgba(0,0,0,0.1)}.box.box-solid.box-default{border:1px solid #d2d6de}.box.box-solid.box-default>.box-header{color:#444;background:#d2d6de;background-color:#d2d6de}.box.box-solid.box-default>.box-header a,.box.box-solid.box-default>.box-header .btn{color:#444}.box.box-solid.box-primary{border:1px solid #3c8dbc}.box.box-solid.box-primary>.box-header{color:#fff;background:#3c8dbc;background-color:#3c8dbc}.box.box-solid.box-primary>.box-header a,.box.box-solid.box-primary>.box-header .btn{color:#fff}.box.box-solid.box-info{border:1px solid #00c0ef}.box.box-solid.box-info>.box-header{color:#fff;background:#00c0ef;background-color:#00c0ef}.box.box-solid.box-info>.box-header a,.box.box-solid.box-info>.box-header .btn{color:#fff}.box.box-solid.box-danger{border:1px solid #dd4b39}.box.box-solid.box-danger>.box-header{color:#fff;background:#dd4b39;background-color:#dd4b39}.box.box-solid.box-danger>.box-header a,.box.box-solid.box-danger>.box-header .btn{color:#fff}.box.box-solid.box-warning{border:1px solid #f39c12}.box.box-solid.box-warning>.box-header{color:#fff;background:#f39c12;background-color:#f39c12}.box.box-solid.box-warning>.box-header a,.box.box-solid.box-warning>.box-header .btn{color:#fff}.box.box-solid.box-success{border:1px solid #00a65a}.box.box-solid.box-success>.box-header{color:#fff;background:#00a65a;background-color:#00a65a}.box.box-solid.box-success>.box-header a,.box.box-solid.box-success>.box-header .btn{color:#fff}.box.box-solid>.box-header>.box-tools .btn{border:0;box-shadow:none}.box.box-solid[class*='bg']>.box-header{color:#fff}.box .box-group>.box{margin-bottom:5px}.box .knob-label{text-align:center;color:#333;font-weight:100;font-size:12px;margin-bottom:0.3em}.box>.overlay,.overlay-wrapper>.overlay,.box>.loading-img,.overlay-wrapper>.loading-img{position:absolute;top:0;left:0;width:100%;height:100%}.box .overlay,.overlay-wrapper .overlay{z-index:50;background:rgba(255,255,255,0.7);border-radius:3px}.box .overlay>.fa,.overlay-wrapper .overlay>.fa{position:absolute;top:50%;left:50%;margin-left:-15px;margin-top:-15px;color:#000;font-size:30px}.box .overlay.dark,.overlay-wrapper .overlay.dark{background:rgba(0,0,0,0.5)}.box-header:before,.box-body:before,.box-footer:before,.box-header:after,.box-body:after,.box-footer:after{content:" ";display:table}.box-header:after,.box-body:after,.box-footer:after{clear:both}.box-header{color:#444;display:block;padding:10px;position:relative}.box-header.with-border{border-bottom:1px solid #f4f4f4}.collapsed-box .box-header.with-border{border-bottom:none}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion,.box-header .box-title{display:inline-block;font-size:18px;margin:0;line-height:1}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion{margin-right:5px}.box-header>.box-tools{position:absolute;right:10px;top:5px}.box-header>.box-tools [data-toggle="tooltip"]{position:relative}.box-header>.box-tools.pull-right .dropdown-menu{right:0;left:auto}.box-header>.box-tools .dropdown-menu>li>a{color:#444!important}.btn-box-tool{padding:5px;font-size:12px;background:transparent;color:#97a0b3}.open .btn-box-tool,.btn-box-tool:hover{color:#606c84}.btn-box-tool.btn:active{box-shadow:none}.box-body{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;padding:10px}.no-header .box-body{border-top-right-radius:3px;border-top-left-radius:3px}.box-body>.table{margin-bottom:0}.box-body .fc{margin-top:5px}.box-body .full-width-chart{margin:-19px}.box-body.no-padding .full-width-chart{margin:-9px}.box-body .box-pane{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:3px}.box-body .box-pane-right{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:0}.box-footer{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-top:1px solid #f4f4f4;padding:10px;background-color:#fff}.chart-legend{margin:10px 0}@media (max-width:991px){.chart-legend>li{float:left;margin-right:10px}}.box-comments{background:#f7f7f7}.box-comments .box-comment{padding:8px 0;border-bottom:1px solid #eee}.box-comments .box-comment:before,.box-comments .box-comment:after{content:" ";display:table}.box-comments .box-comment:after{clear:both}.box-comments .box-comment:last-of-type{border-bottom:0}.box-comments .box-comment:first-of-type{padding-top:0}.box-comments .box-comment img{float:left}.box-comments .comment-text{margin-left:40px;color:#555}.box-comments .username{color:#444;display:block;font-weight:600}.box-comments .text-muted{font-weight:400;font-size:12px}.todo-list{margin:0;padding:0;list-style:none;overflow:auto}.todo-list>li{border-radius:2px;padding:10px;background:#f4f4f4;margin-bottom:2px;border-left:2px solid #e6e7e8;color:#444}.todo-list>li:last-of-type{margin-bottom:0}.todo-list>li>input[type='checkbox']{margin:0 10px 0 5px}.todo-list>li .text{display:inline-block;margin-left:5px;font-weight:600}.todo-list>li .label{margin-left:10px;font-size:9px}.todo-list>li .tools{display:none;float:right;color:#dd4b39}.todo-list>li .tools>.fa,.todo-list>li .tools>.glyphicon,.todo-list>li .tools>.ion{margin-right:5px;cursor:pointer}.todo-list>li:hover .tools{display:inline-block}.todo-list>li.done{color:#999}.todo-list>li.done .text{text-decoration:line-through;font-weight:500}.todo-list>li.done .label{background:#d2d6de !important}.todo-list .danger{border-left-color:#dd4b39}.todo-list .warning{border-left-color:#f39c12}.todo-list .info{border-left-color:#00c0ef}.todo-list .success{border-left-color:#00a65a}.todo-list .primary{border-left-color:#3c8dbc}.todo-list .handle{display:inline-block;cursor:move;margin:0 5px}.chat{padding:5px 20px 5px 10px}.chat .item{margin-bottom:10px}.chat .item:before,.chat .item:after{content:" ";display:table}.chat .item:after{clear:both}.chat .item>img{width:40px;height:40px;border:2px solid transparent;border-radius:50%}.chat .item>.online{border:2px solid #00a65a}.chat .item>.offline{border:2px solid #dd4b39}.chat .item>.message{margin-left:55px;margin-top:-40px}.chat .item>.message>.name{display:block;font-weight:600}.chat .item>.attachment{border-radius:3px;background:#f4f4f4;margin-left:65px;margin-right:15px;padding:10px}.chat .item>.attachment>h4{margin:0 0 5px 0;font-weight:600;font-size:14px}.chat .item>.attachment>p,.chat .item>.attachment>.filename{font-weight:600;font-size:13px;font-style:italic;margin:0}.chat .item>.attachment:before,.chat .item>.attachment:after{content:" ";display:table}.chat .item>.attachment:after{clear:both}.box-input{max-width:200px}.modal .panel-body{color:#444}.info-box{display:block;min-height:90px;background:#fff;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:2px;margin-bottom:15px}.info-box small{font-size:14px}.info-box .progress{background:rgba(0,0,0,0.2);margin:5px -10px 5px -10px;height:2px}.info-box .progress,.info-box .progress .progress-bar{border-radius:0}.info-box .progress .progress-bar{background:#fff}.info-box-icon{border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px;display:block;float:left;height:90px;width:90px;text-align:center;font-size:45px;line-height:90px;background:rgba(0,0,0,0.2)}.info-box-icon>img{max-width:100%}.info-box-content{padding:5px 10px;margin-left:90px}.info-box-number{display:block;font-weight:bold;font-size:18px}.progress-description,.info-box-text{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.info-box-text{text-transform:uppercase}.info-box-more{display:block}.progress-description{margin:0}.timeline{position:relative;margin:0 0 30px 0;padding:0;list-style:none}.timeline:before{content:'';position:absolute;top:0;bottom:0;width:4px;background:#ddd;left:31px;margin:0;border-radius:2px}.timeline>li{position:relative;margin-right:10px;margin-bottom:15px}.timeline>li:before,.timeline>li:after{content:" ";display:table}.timeline>li:after{clear:both}.timeline>li>.timeline-item{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;margin-top:0;background:#fff;color:#444;margin-left:60px;margin-right:15px;padding:0;position:relative}.timeline>li>.timeline-item>.time{color:#999;float:right;padding:10px;font-size:12px}.timeline>li>.timeline-item>.timeline-header{margin:0;color:#555;border-bottom:1px solid #f4f4f4;padding:10px;font-size:16px;line-height:1.1}.timeline>li>.timeline-item>.timeline-header>a{font-weight:600}.timeline>li>.timeline-item>.timeline-body,.timeline>li>.timeline-item>.timeline-footer{padding:10px}.timeline>li>.fa,.timeline>li>.glyphicon,.timeline>li>.ion{width:30px;height:30px;font-size:15px;line-height:30px;position:absolute;color:#666;background:#d2d6de;border-radius:50%;text-align:center;left:18px;top:0}.timeline>.time-label>span{font-weight:600;padding:5px;display:inline-block;background-color:#fff;border-radius:4px}.timeline-inverse>li>.timeline-item{background:#f0f0f0;border:1px solid #ddd;-webkit-box-shadow:none;box-shadow:none}.timeline-inverse>li>.timeline-item>.timeline-header{border-bottom-color:#ddd}.btn{border-radius:3px;-webkit-box-shadow:none;box-shadow:none;border:1px solid transparent}.btn.uppercase{text-transform:uppercase}.btn.btn-flat{border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border-width:1px}.btn:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:focus{outline:none}.btn.btn-file{position:relative;overflow:hidden}.btn.btn-file>input[type='file']{position:absolute;top:0;right:0;min-width:100%;min-height:100%;font-size:100px;text-align:right;opacity:0;filter:alpha(opacity=0);outline:none;background:white;cursor:inherit;display:block}.btn-default{background-color:#f4f4f4;color:#444;border-color:#ddd}.btn-default:hover,.btn-default:active,.btn-default.hover{background-color:#e7e7e7}.btn-primary{background-color:#3c8dbc;border-color:#367fa9}.btn-primary:hover,.btn-primary:active,.btn-primary.hover{background-color:#367fa9}.btn-success{background-color:#00a65a;border-color:#008d4c}.btn-success:hover,.btn-success:active,.btn-success.hover{background-color:#008d4c}.btn-info{background-color:#00c0ef;border-color:#00acd6}.btn-info:hover,.btn-info:active,.btn-info.hover{background-color:#00acd6}.btn-danger{background-color:#dd4b39;border-color:#d73925}.btn-danger:hover,.btn-danger:active,.btn-danger.hover{background-color:#d73925}.btn-warning{background-color:#f39c12;border-color:#e08e0b}.btn-warning:hover,.btn-warning:active,.btn-warning.hover{background-color:#e08e0b}.btn-outline{border:1px solid #fff;background:transparent;color:#fff}.btn-outline:hover,.btn-outline:focus,.btn-outline:active{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.7)}.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn[class*='bg-']:hover{-webkit-box-shadow:inset 0 0 100px rgba(0,0,0,0.2);box-shadow:inset 0 0 100px rgba(0,0,0,0.2)}.btn-app{border-radius:3px;position:relative;padding:15px 5px;margin:0 0 10px 10px;min-width:80px;height:60px;text-align:center;color:#666;border:1px solid #ddd;background-color:#f4f4f4;font-size:12px}.btn-app>.fa,.btn-app>.glyphicon,.btn-app>.ion{font-size:20px;display:block}.btn-app:hover{background:#f4f4f4;color:#444;border-color:#aaa}.btn-app:active,.btn-app:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-app>.badge{position:absolute;top:-3px;right:-10px;font-size:10px;font-weight:400}.callout{border-radius:3px;margin:0 0 20px 0;padding:15px 30px 15px 15px;border-left:5px solid #eee}.callout a{color:#fff;text-decoration:underline}.callout a:hover{color:#eee}.callout h4{margin-top:0;font-weight:600}.callout p:last-child{margin-bottom:0}.callout code,.callout .highlight{background-color:#fff}.callout.callout-danger{border-color:#c23321}.callout.callout-warning{border-color:#c87f0a}.callout.callout-info{border-color:#0097bc}.callout.callout-success{border-color:#00733e}.alert{border-radius:3px}.alert h4{font-weight:600}.alert .icon{margin-right:10px}.alert .close{color:#000;opacity:.2;filter:alpha(opacity=20)}.alert .close:hover{opacity:.5;filter:alpha(opacity=50)}.alert a{color:#fff;text-decoration:underline}.alert-success{border-color:#008d4c}.alert-danger,.alert-error{border-color:#d73925}.alert-warning{border-color:#e08e0b}.alert-info{border-color:#00acd6}.nav>li>a:hover,.nav>li>a:active,.nav>li>a:focus{color:#444;background:#f7f7f7}.nav-pills>li>a{border-radius:0;border-top:3px solid transparent;color:#444}.nav-pills>li>a>.fa,.nav-pills>li>a>.glyphicon,.nav-pills>li>a>.ion{margin-right:5px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{border-top-color:#3c8dbc}.nav-pills>li.active>a{font-weight:600}.nav-stacked>li>a{border-radius:0;border-top:0;border-left:3px solid transparent;color:#444}.nav-stacked>li.active>a,.nav-stacked>li.active>a:hover{background:transparent;color:#444;border-top:0;border-left-color:#3c8dbc}.nav-stacked>li.header{border-bottom:1px solid #ddd;color:#777;margin-bottom:10px;padding:5px 10px;text-transform:uppercase}.nav-tabs-custom{margin-bottom:20px;background:#fff;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px}.nav-tabs-custom>.nav-tabs{margin:0;border-bottom-color:#f4f4f4;border-top-right-radius:3px;border-top-left-radius:3px}.nav-tabs-custom>.nav-tabs>li{border-top:3px solid transparent;margin-bottom:-2px;margin-right:5px}.nav-tabs-custom>.nav-tabs>li.disabled>a{color:#777}.nav-tabs-custom>.nav-tabs>li>a{color:#444;border-radius:0}.nav-tabs-custom>.nav-tabs>li>a.text-muted{color:#999}.nav-tabs-custom>.nav-tabs>li>a,.nav-tabs-custom>.nav-tabs>li>a:hover{background:transparent;margin:0}.nav-tabs-custom>.nav-tabs>li>a:hover{color:#999}.nav-tabs-custom>.nav-tabs>li:not(.active)>a:hover,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:focus,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:active{border-color:transparent}.nav-tabs-custom>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom>.nav-tabs>li.active>a,.nav-tabs-custom>.nav-tabs>li.active:hover>a{background-color:#fff;color:#444}.nav-tabs-custom>.nav-tabs>li.active>a{border-top-color:transparent;border-left-color:#f4f4f4;border-right-color:#f4f4f4}.nav-tabs-custom>.nav-tabs>li:first-of-type{margin-left:0}.nav-tabs-custom>.nav-tabs>li:first-of-type.active>a{border-left-color:transparent}.nav-tabs-custom>.nav-tabs.pull-right{float:none !important}.nav-tabs-custom>.nav-tabs.pull-right>li{float:right}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type{margin-right:0}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type>a{border-left-width:1px}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type.active>a{border-left-color:#f4f4f4;border-right-color:transparent}.nav-tabs-custom>.nav-tabs>li.header{line-height:35px;padding:0 10px;font-size:20px;color:#444}.nav-tabs-custom>.nav-tabs>li.header>.fa,.nav-tabs-custom>.nav-tabs>li.header>.glyphicon,.nav-tabs-custom>.nav-tabs>li.header>.ion{margin-right:5px}.nav-tabs-custom>.tab-content{background:#fff;padding:10px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.nav-tabs-custom .dropdown.open>a:active,.nav-tabs-custom .dropdown.open>a:focus{background:transparent;color:#999}.nav-tabs-custom.tab-primary>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom.tab-info>.nav-tabs>li.active{border-top-color:#00c0ef}.nav-tabs-custom.tab-danger>.nav-tabs>li.active{border-top-color:#dd4b39}.nav-tabs-custom.tab-warning>.nav-tabs>li.active{border-top-color:#f39c12}.nav-tabs-custom.tab-success>.nav-tabs>li.active{border-top-color:#00a65a}.nav-tabs-custom.tab-default>.nav-tabs>li.active{border-top-color:#d2d6de}.pagination>li>a{background:#fafafa;color:#666}.pagination.pagination-flat>li>a{border-radius:0 !important}.products-list{list-style:none;margin:0;padding:0}.products-list>.item{border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);padding:10px 0;background:#fff}.products-list>.item:before,.products-list>.item:after{content:" ";display:table}.products-list>.item:after{clear:both}.products-list .product-img{float:left}.products-list .product-img img{width:50px;height:50px}.products-list .product-info{margin-left:60px}.products-list .product-title{font-weight:600}.products-list .product-description{display:block;color:#999;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.product-list-in-box>.item{-webkit-box-shadow:none;box-shadow:none;border-radius:0;border-bottom:1px solid #f4f4f4}.product-list-in-box>.item:last-of-type{border-bottom-width:0}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{border-top:1px solid #f4f4f4}.table>thead>tr>th{border-bottom:2px solid #f4f4f4}.table tr td .progress{margin-top:5px}.table-bordered{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table.no-border,.table.no-border td,.table.no-border th{border:0}table.text-center,table.text-center td,table.text-center th{text-align:center}.table.align th{text-align:left}.table.align td{text-align:right}.label-default{background-color:#d2d6de;color:#444}.direct-chat .box-body{border-bottom-right-radius:0;border-bottom-left-radius:0;position:relative;overflow-x:hidden;padding:0}.direct-chat.chat-pane-open .direct-chat-contacts{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.direct-chat-messages{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0);padding:10px;height:250px;overflow:auto}.direct-chat-msg,.direct-chat-text{display:block}.direct-chat-msg{margin-bottom:10px}.direct-chat-msg:before,.direct-chat-msg:after{content:" ";display:table}.direct-chat-msg:after{clear:both}.direct-chat-messages,.direct-chat-contacts{-webkit-transition:-webkit-transform .5s ease-in-out;-moz-transition:-moz-transform .5s ease-in-out;-o-transition:-o-transform .5s ease-in-out;transition:transform .5s ease-in-out}.direct-chat-text{border-radius:5px;position:relative;padding:5px 10px;background:#d2d6de;border:1px solid #d2d6de;margin:5px 0 0 50px;color:#444}.direct-chat-text:after,.direct-chat-text:before{position:absolute;right:100%;top:15px;border:solid transparent;border-right-color:#d2d6de;content:' ';height:0;width:0;pointer-events:none}.direct-chat-text:after{border-width:5px;margin-top:-5px}.direct-chat-text:before{border-width:6px;margin-top:-6px}.right .direct-chat-text{margin-right:50px;margin-left:0}.right .direct-chat-text:after,.right .direct-chat-text:before{right:auto;left:100%;border-right-color:transparent;border-left-color:#d2d6de}.direct-chat-img{border-radius:50%;float:left;width:40px;height:40px}.right .direct-chat-img{float:right}.direct-chat-info{display:block;margin-bottom:2px;font-size:12px}.direct-chat-name{font-weight:600}.direct-chat-timestamp{color:#999}.direct-chat-contacts-open .direct-chat-contacts{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.direct-chat-contacts{-webkit-transform:translate(101%, 0);-ms-transform:translate(101%, 0);-o-transform:translate(101%, 0);transform:translate(101%, 0);position:absolute;top:0;bottom:0;height:250px;width:100%;background:#222d32;color:#fff;overflow:auto}.contacts-list>li{border-bottom:1px solid rgba(0,0,0,0.2);padding:10px;margin:0}.contacts-list>li:before,.contacts-list>li:after{content:" ";display:table}.contacts-list>li:after{clear:both}.contacts-list>li:last-of-type{border-bottom:none}.contacts-list-img{border-radius:50%;width:40px;float:left}.contacts-list-info{margin-left:45px;color:#fff}.contacts-list-name,.contacts-list-status{display:block}.contacts-list-name{font-weight:600}.contacts-list-status{font-size:12px}.contacts-list-date{color:#aaa;font-weight:normal}.contacts-list-msg{color:#999}.direct-chat-danger .right>.direct-chat-text{background:#dd4b39;border-color:#dd4b39;color:#fff}.direct-chat-danger .right>.direct-chat-text:after,.direct-chat-danger .right>.direct-chat-text:before{border-left-color:#dd4b39}.direct-chat-primary .right>.direct-chat-text{background:#3c8dbc;border-color:#3c8dbc;color:#fff}.direct-chat-primary .right>.direct-chat-text:after,.direct-chat-primary .right>.direct-chat-text:before{border-left-color:#3c8dbc}.direct-chat-warning .right>.direct-chat-text{background:#f39c12;border-color:#f39c12;color:#fff}.direct-chat-warning .right>.direct-chat-text:after,.direct-chat-warning .right>.direct-chat-text:before{border-left-color:#f39c12}.direct-chat-info .right>.direct-chat-text{background:#00c0ef;border-color:#00c0ef;color:#fff}.direct-chat-info .right>.direct-chat-text:after,.direct-chat-info .right>.direct-chat-text:before{border-left-color:#00c0ef}.direct-chat-success .right>.direct-chat-text{background:#00a65a;border-color:#00a65a;color:#fff}.direct-chat-success .right>.direct-chat-text:after,.direct-chat-success .right>.direct-chat-text:before{border-left-color:#00a65a}.users-list>li{width:25%;float:left;padding:10px;text-align:center}.users-list>li img{border-radius:50%;max-width:100%;height:auto}.users-list>li>a:hover,.users-list>li>a:hover .users-list-name{color:#999}.users-list-name,.users-list-date{display:block}.users-list-name{font-weight:600;color:#444;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.users-list-date{color:#999;font-size:12px}.carousel-control.left,.carousel-control.right{background-image:none}.carousel-control>.fa{font-size:40px;position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-20px}.modal{background:rgba(0,0,0,0.3)}.modal-content{border-radius:0;-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125);border:0}@media (min-width:768px){.modal-content{-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125)}}.modal-header{border-bottom-color:#f4f4f4}.modal-footer{border-top-color:#f4f4f4}.modal-primary .modal-header,.modal-primary .modal-footer{border-color:#307095}.modal-warning .modal-header,.modal-warning .modal-footer{border-color:#c87f0a}.modal-info .modal-header,.modal-info .modal-footer{border-color:#0097bc}.modal-success .modal-header,.modal-success .modal-footer{border-color:#00733e}.modal-danger .modal-header,.modal-danger .modal-footer{border-color:#c23321}.box-widget{border:none;position:relative}.widget-user .widget-user-header{padding:20px;height:120px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user .widget-user-username{margin-top:0;margin-bottom:5px;font-size:25px;font-weight:300;text-shadow:0 1px 1px rgba(0,0,0,0.2)}.widget-user .widget-user-desc{margin-top:0}.widget-user .widget-user-image{position:absolute;top:65px;left:50%;margin-left:-45px}.widget-user .widget-user-image>img{width:90px;height:auto;border:3px solid #fff}.widget-user .box-footer{padding-top:30px}.widget-user-2 .widget-user-header{padding:20px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user-2 .widget-user-username{margin-top:5px;margin-bottom:5px;font-size:25px;font-weight:300}.widget-user-2 .widget-user-desc{margin-top:0}.widget-user-2 .widget-user-username,.widget-user-2 .widget-user-desc{margin-left:75px}.widget-user-2 .widget-user-image>img{width:65px;height:auto;float:left}.treeview-menu{display:none;list-style:none;padding:0;margin:0;padding-left:5px}.treeview-menu .treeview-menu{padding-left:20px}.treeview-menu>li{margin:0}.treeview-menu>li>a{padding:5px 5px 5px 15px;display:block;font-size:14px}.treeview-menu>li>a>.fa,.treeview-menu>li>a>.glyphicon,.treeview-menu>li>a>.ion{width:20px}.treeview-menu>li>a>.pull-right-container>.fa-angle-left,.treeview-menu>li>a>.pull-right-container>.fa-angle-down,.treeview-menu>li>a>.fa-angle-left,.treeview-menu>li>a>.fa-angle-down{width:auto}.mailbox-messages>.table{margin:0}.mailbox-controls{padding:5px}.mailbox-controls.with-border{border-bottom:1px solid #f4f4f4}.mailbox-read-info{border-bottom:1px solid #f4f4f4;padding:10px}.mailbox-read-info h3{font-size:20px;margin:0}.mailbox-read-info h5{margin:0;padding:5px 0 0 0}.mailbox-read-time{color:#999;font-size:13px}.mailbox-read-message{padding:10px}.mailbox-attachments li{float:left;width:200px;border:1px solid #eee;margin-bottom:10px;margin-right:10px}.mailbox-attachment-name{font-weight:bold;color:#666}.mailbox-attachment-icon,.mailbox-attachment-info,.mailbox-attachment-size{display:block}.mailbox-attachment-info{padding:10px;background:#f4f4f4}.mailbox-attachment-size{color:#999;font-size:12px}.mailbox-attachment-icon{text-align:center;font-size:65px;color:#666;padding:20px 10px}.mailbox-attachment-icon.has-img{padding:0}.mailbox-attachment-icon.has-img>img{max-width:100%;height:auto}.lockscreen{background:#d2d6de}.lockscreen-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.lockscreen-logo a{color:#444}.lockscreen-wrapper{max-width:400px;margin:0 auto;margin-top:10%}.lockscreen .lockscreen-name{text-align:center;font-weight:600}.lockscreen-item{border-radius:4px;padding:0;background:#fff;position:relative;margin:10px auto 30px auto;width:290px}.lockscreen-image{border-radius:50%;position:absolute;left:-10px;top:-25px;background:#fff;padding:5px;z-index:10}.lockscreen-image>img{border-radius:50%;width:70px;height:70px}.lockscreen-credentials{margin-left:70px}.lockscreen-credentials .form-control{border:0}.lockscreen-credentials .btn{background-color:#fff;border:0;padding:0 10px}.lockscreen-footer{margin-top:10px}.login-logo,.register-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.login-logo a,.register-logo a{color:#444}.login-page,.register-page{background:#d2d6de}.login-box,.register-box{width:360px;margin:7% auto}@media (max-width:768px){.login-box,.register-box{width:90%;margin-top:20px}}.login-box-body,.register-box-body{background:#fff;padding:20px;border-top:0;color:#666}.login-box-body .form-control-feedback,.register-box-body .form-control-feedback{color:#777}.login-box-msg,.register-box-msg{margin:0;text-align:center;padding:0 20px 20px 20px}.social-auth-links{margin:10px 0}.error-page{width:600px;margin:20px auto 0 auto}@media (max-width:991px){.error-page{width:100%}}.error-page>.headline{float:left;font-size:100px;font-weight:300}@media (max-width:991px){.error-page>.headline{float:none;text-align:center}}.error-page>.error-content{margin-left:190px;display:block}@media (max-width:991px){.error-page>.error-content{margin-left:0}}.error-page>.error-content>h3{font-weight:300;font-size:25px}@media (max-width:991px){.error-page>.error-content>h3{text-align:center}}.invoice{position:relative;background:#fff;border:1px solid #f4f4f4;padding:20px;margin:10px 25px}.invoice-title{margin-top:0}.profile-user-img{margin:0 auto;width:100px;padding:3px;border:3px solid #d2d6de}.profile-username{font-size:21px;margin-top:5px}.post{border-bottom:1px solid #d2d6de;margin-bottom:15px;padding-bottom:15px;color:#666}.post:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0}.post .user-block{margin-bottom:15px}.pad{padding:10px}.margin{margin:10px}.margin-bottom{margin-bottom:20px}.margin-bottom-none{margin-bottom:0}.margin-r-5{margin-right:5px}.inline{display:inline}.description-block{display:block;margin:10px 0;text-align:center}.description-block.margin-bottom{margin-bottom:25px}.description-block>.description-header{margin:0;padding:0;font-weight:600;font-size:16px}.description-block>.description-text{text-transform:uppercase}.bg-red,.bg-yellow,.bg-aqua,.bg-blue,.bg-light-blue,.bg-green,.bg-navy,.bg-teal,.bg-olive,.bg-lime,.bg-orange,.bg-fuchsia,.bg-purple,.bg-maroon,.bg-black,.bg-red-active,.bg-yellow-active,.bg-aqua-active,.bg-blue-active,.bg-light-blue-active,.bg-green-active,.bg-navy-active,.bg-teal-active,.bg-olive-active,.bg-lime-active,.bg-orange-active,.bg-fuchsia-active,.bg-purple-active,.bg-maroon-active,.bg-black-active,.callout.callout-danger,.callout.callout-warning,.callout.callout-info,.callout.callout-success,.alert-success,.alert-danger,.alert-error,.alert-warning,.alert-info,.label-danger,.label-info,.label-warning,.label-primary,.label-success,.modal-primary .modal-body,.modal-primary .modal-header,.modal-primary .modal-footer,.modal-warning .modal-body,.modal-warning .modal-header,.modal-warning .modal-footer,.modal-info .modal-body,.modal-info .modal-header,.modal-info .modal-footer,.modal-success .modal-body,.modal-success .modal-header,.modal-success .modal-footer,.modal-danger .modal-body,.modal-danger .modal-header,.modal-danger .modal-footer{color:#fff !important}.bg-gray{color:#000;background-color:#d2d6de !important}.bg-gray-light{background-color:#f7f7f7}.bg-black{background-color:#111 !important}.bg-red,.callout.callout-danger,.alert-danger,.alert-error,.label-danger,.modal-danger .modal-body{background-color:#dd4b39 !important}.bg-yellow,.callout.callout-warning,.alert-warning,.label-warning,.modal-warning .modal-body{background-color:#f39c12 !important}.bg-aqua,.callout.callout-info,.alert-info,.label-info,.modal-info .modal-body{background-color:#00c0ef !important}.bg-blue{background-color:#0073b7 !important}.bg-light-blue,.label-primary,.modal-primary .modal-body{background-color:#3c8dbc !important}.bg-green,.callout.callout-success,.alert-success,.label-success,.modal-success .modal-body{background-color:#00a65a !important}.bg-navy{background-color:#001f3f !important}.bg-teal{background-color:#39cccc !important}.bg-olive{background-color:#3d9970 !important}.bg-lime{background-color:#01ff70 !important}.bg-orange{background-color:#ff851b !important}.bg-fuchsia{background-color:#f012be !important}.bg-purple{background-color:#605ca8 !important}.bg-maroon{background-color:#d81b60 !important}.bg-gray-active{color:#000;background-color:#b5bbc8 !important}.bg-black-active{background-color:#000 !important}.bg-red-active,.modal-danger .modal-header,.modal-danger .modal-footer{background-color:#d33724 !important}.bg-yellow-active,.modal-warning .modal-header,.modal-warning .modal-footer{background-color:#db8b0b !important}.bg-aqua-active,.modal-info .modal-header,.modal-info .modal-footer{background-color:#00a7d0 !important}.bg-blue-active{background-color:#005384 !important}.bg-light-blue-active,.modal-primary .modal-header,.modal-primary .modal-footer{background-color:#357ca5 !important}.bg-green-active,.modal-success .modal-header,.modal-success .modal-footer{background-color:#008d4c !important}.bg-navy-active{background-color:#001a35 !important}.bg-teal-active{background-color:#30bbbb !important}.bg-olive-active{background-color:#368763 !important}.bg-lime-active{background-color:#00e765 !important}.bg-orange-active{background-color:#ff7701 !important}.bg-fuchsia-active{background-color:#db0ead !important}.bg-purple-active{background-color:#555299 !important}.bg-maroon-active{background-color:#ca195a !important}[class^="bg-"].disabled{opacity:.65;filter:alpha(opacity=65)}.text-red{color:#dd4b39 !important}.text-yellow{color:#f39c12 !important}.text-aqua{color:#00c0ef !important}.text-blue{color:#0073b7 !important}.text-black{color:#111 !important}.text-light-blue{color:#3c8dbc !important}.text-green{color:#00a65a !important}.text-gray{color:#d2d6de !important}.text-navy{color:#001f3f !important}.text-teal{color:#39cccc !important}.text-olive{color:#3d9970 !important}.text-lime{color:#01ff70 !important}.text-orange{color:#ff851b !important}.text-fuchsia{color:#f012be !important}.text-purple{color:#605ca8 !important}.text-maroon{color:#d81b60 !important}.link-muted{color:#7a869d}.link-muted:hover,.link-muted:focus{color:#606c84}.link-black{color:#666}.link-black:hover,.link-black:focus{color:#999}.hide{display:none !important}.no-border{border:0 !important}.no-padding{padding:0 !important}.no-margin{margin:0 !important}.no-shadow{box-shadow:none !important}.list-unstyled,.chart-legend,.contacts-list,.users-list,.mailbox-attachments{list-style:none;margin:0;padding:0}.list-group-unbordered>.list-group-item{border-left:0;border-right:0;border-radius:0;padding-left:0;padding-right:0}.flat{border-radius:0 !important}.text-bold,.text-bold.table td,.text-bold.table th{font-weight:700}.text-sm{font-size:12px}.jqstooltip{padding:5px !important;width:auto !important;height:auto !important}.bg-teal-gradient{background:#39cccc !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #39cccc), color-stop(1, #7adddd)) !important;background:-ms-linear-gradient(bottom, #39cccc, #7adddd) !important;background:-moz-linear-gradient(center bottom, #39cccc 0, #7adddd 100%) !important;background:-o-linear-gradient(#7adddd, #39cccc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39cccc', GradientType=0) !important;color:#fff}.bg-light-blue-gradient{background:#3c8dbc !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #3c8dbc), color-stop(1, #67a8ce)) !important;background:-ms-linear-gradient(bottom, #3c8dbc, #67a8ce) !important;background:-moz-linear-gradient(center bottom, #3c8dbc 0, #67a8ce 100%) !important;background:-o-linear-gradient(#67a8ce, #3c8dbc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important;color:#fff}.bg-blue-gradient{background:#0073b7 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #0073b7), color-stop(1, #0089db)) !important;background:-ms-linear-gradient(bottom, #0073b7, #0089db) !important;background:-moz-linear-gradient(center bottom, #0073b7 0, #0089db 100%) !important;background:-o-linear-gradient(#0089db, #0073b7) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important;color:#fff}.bg-aqua-gradient{background:#00c0ef !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #00c0ef), color-stop(1, #14d1ff)) !important;background:-ms-linear-gradient(bottom, #00c0ef, #14d1ff) !important;background:-moz-linear-gradient(center bottom, #00c0ef 0, #14d1ff 100%) !important;background:-o-linear-gradient(#14d1ff, #00c0ef) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important;color:#fff}.bg-yellow-gradient{background:#f39c12 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #f39c12), color-stop(1, #f7bc60)) !important;background:-ms-linear-gradient(bottom, #f39c12, #f7bc60) !important;background:-moz-linear-gradient(center bottom, #f39c12 0, #f7bc60 100%) !important;background:-o-linear-gradient(#f7bc60, #f39c12) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important;color:#fff}.bg-purple-gradient{background:#605ca8 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #605ca8), color-stop(1, #9491c4)) !important;background:-ms-linear-gradient(bottom, #605ca8, #9491c4) !important;background:-moz-linear-gradient(center bottom, #605ca8 0, #9491c4 100%) !important;background:-o-linear-gradient(#9491c4, #605ca8) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important;color:#fff}.bg-green-gradient{background:#00a65a !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #00a65a), color-stop(1, #00ca6d)) !important;background:-ms-linear-gradient(bottom, #00a65a, #00ca6d) !important;background:-moz-linear-gradient(center bottom, #00a65a 0, #00ca6d 100%) !important;background:-o-linear-gradient(#00ca6d, #00a65a) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important;color:#fff}.bg-red-gradient{background:#dd4b39 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #dd4b39), color-stop(1, #e47365)) !important;background:-ms-linear-gradient(bottom, #dd4b39, #e47365) !important;background:-moz-linear-gradient(center bottom, #dd4b39 0, #e47365 100%) !important;background:-o-linear-gradient(#e47365, #dd4b39) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important;color:#fff}.bg-black-gradient{background:#111 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #111), color-stop(1, #2b2b2b)) !important;background:-ms-linear-gradient(bottom, #111, #2b2b2b) !important;background:-moz-linear-gradient(center bottom, #111 0, #2b2b2b 100%) !important;background:-o-linear-gradient(#2b2b2b, #111) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111111', GradientType=0) !important;color:#fff}.bg-maroon-gradient{background:#d81b60 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #d81b60), color-stop(1, #e73f7c)) !important;background:-ms-linear-gradient(bottom, #d81b60, #e73f7c) !important;background:-moz-linear-gradient(center bottom, #d81b60 0, #e73f7c 100%) !important;background:-o-linear-gradient(#e73f7c, #d81b60) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#d81b60', GradientType=0) !important;color:#fff}.description-block .description-icon{font-size:16px}.no-pad-top{padding-top:0}.position-static{position:static !important}.list-header{font-size:15px;padding:10px 4px;font-weight:bold;color:#666}.list-seperator{height:1px;background:#f4f4f4;margin:15px 0 9px 0}.list-link>a{padding:4px;color:#777}.list-link>a:hover{color:#222}.font-light{font-weight:300}.user-block:before,.user-block:after{content:" ";display:table}.user-block:after{clear:both}.user-block img{width:40px;height:40px;float:left}.user-block .username,.user-block .description,.user-block .comment{display:block;margin-left:50px}.user-block .username{font-size:16px;font-weight:600}.user-block .description{color:#999;font-size:13px}.user-block.user-block-sm .username,.user-block.user-block-sm .description,.user-block.user-block-sm .comment{margin-left:40px}.user-block.user-block-sm .username{font-size:14px}.img-sm,.img-md,.img-lg,.box-comments .box-comment img,.user-block.user-block-sm img{float:left}.img-sm,.box-comments .box-comment img,.user-block.user-block-sm img{width:30px !important;height:30px !important}.img-sm+.img-push{margin-left:40px}.img-md{width:60px;height:60px}.img-md+.img-push{margin-left:70px}.img-lg{width:100px;height:100px}.img-lg+.img-push{margin-left:110px}.img-bordered{border:3px solid #d2d6de;padding:3px}.img-bordered-sm{border:2px solid #d2d6de;padding:2px}.attachment-block{border:1px solid #f4f4f4;padding:5px;margin-bottom:10px;background:#f7f7f7}.attachment-block .attachment-img{max-width:100px;max-height:100px;height:auto;float:left}.attachment-block .attachment-pushed{margin-left:110px}.attachment-block .attachment-heading{margin:0}.attachment-block .attachment-text{color:#555}.connectedSortable{min-height:100px}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sort-highlight{background:#f4f4f4;border:1px dashed #ddd;margin-bottom:10px}.full-opacity-hover{opacity:.65;filter:alpha(opacity=65)}.full-opacity-hover:hover{opacity:1;filter:alpha(opacity=100)}.chart{position:relative;overflow:hidden;width:100%}.chart svg,.chart canvas{width:100% !important}@media print{.no-print,.main-sidebar,.left-side,.main-header,.content-header{display:none !important}.content-wrapper,.right-side,.main-footer{margin-left:0 !important;min-height:0 !important;-webkit-transform:translate(0, 0) !important;-ms-transform:translate(0, 0) !important;-o-transform:translate(0, 0) !important;transform:translate(0, 0) !important}.fixed .content-wrapper,.fixed .right-side{padding-top:0 !important}.invoice{width:100%;border:0;margin:0;padding:0}.invoice-col{float:left;width:33.3333333%}.table-responsive{overflow:auto}.table-responsive>.table tr th,.table-responsive>.table tr td{white-space:normal !important}} \ No newline at end of file diff --git a/src/main/resources/static/css/loader.css b/src/main/resources/static/css/loader.css deleted file mode 100644 index 151c878f2..000000000 --- a/src/main/resources/static/css/loader.css +++ /dev/null @@ -1,129 +0,0 @@ -#loading{ - background-color: #fff; - height: 100%; - width: 100%; - position: fixed; - z-index: 9999; - margin-top: 0px; - top: 0px; -} -#loading-center{ - width: 100%; - height: 100%; - position: relative; -} -#loading-center-absolute { - position: absolute; - left: 50%; - top: 50%; - height: 60px; - width: 60px; - margin-top: -30px; - margin-left: -30px; - -webkit-animation: loading-center-absolute 1s infinite; - animation: loading-center-absolute 1s infinite; - -} -.object{ - width: 20px; - height: 20px; - background-color: skyblue; - float: left; - -moz-border-radius: 50% 50% 50% 50%; - -webkit-border-radius: 50% 50% 50% 50%; - border-radius: 50% 50% 50% 50%; - margin-right: 20px; - margin-bottom: 20px; -} -.object:nth-child(2n+0) { - margin-right: 0px; - -} -#object_one{ - -webkit-animation: object_one 1s infinite; - animation: object_one 1s infinite; -} -#object_two{ - -webkit-animation: object_two 1s infinite; - animation: object_two 1s infinite; -} -#object_three{ - -webkit-animation: object_three 1s infinite; - animation: object_three 1s infinite; -} -#object_four{ - -webkit-animation: object_four 1s infinite; - animation: object_four 1s infinite; -} - -@-webkit-keyframes loading-center-absolute{ - 100% { - -ms-transform: rotate(360deg); - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } - -} -@keyframes loading-center-absolute{ - 100% { - -ms-transform: rotate(360deg); - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} -@-webkit-keyframes object_one{ - 50% { - -ms-transform: translate(20px,20px); - -webkit-transform: translate(20px,20px); - transform: translate(20px,20px); - } -} -@keyframes object_one{ - 50% { - -ms-transform: translate(20px,20px); - -webkit-transform: translate(20px,20px); - transform: translate(20px,20px); - } -} -@-webkit-keyframes object_two{ - 50% { - -ms-transform: translate(-20px,20px); - -webkit-transform: translate(-20px,20px); - transform: translate(-20px,20px); - } -} -@keyframes object_two{ - 50% { - -ms-transform: translate(-20px,20px); - -webkit-transform: translate(-20px,20px); - transform: translate(-20px,20px); - } -} -@-webkit-keyframes object_three{ - 50% { - -ms-transform: translate(20px,-20px); - -webkit-transform: translate(20px,-20px); - transform: translate(20px,-20px); - } -} -@keyframes object_three{ - 50% { - -ms-transform: translate(20px,-20px); - -webkit-transform: translate(20px,-20px); - transform: translate(20px,-20px); - } -} -@-webkit-keyframes object_four{ - 50% { - -ms-transform: translate(-20px,-20px); - -webkit-transform: translate(-20px,-20px); - transform: translate(-20px,-20px); - } -} -@keyframes object_four{ - 50% { - -ms-transform: translate(-20px,-20px); - -webkit-transform: translate(-20px,-20px); - transform: translate(-20px,-20px); - } -} diff --git a/src/main/resources/static/css/loader.min.css b/src/main/resources/static/css/loader.min.css deleted file mode 100644 index a86eb807d..000000000 --- a/src/main/resources/static/css/loader.min.css +++ /dev/null @@ -1 +0,0 @@ -#loading{background-color:#fff;height:100%;width:100%;position:fixed;z-index:9999;margin-top:0;top:0}#loading-center{width:100%;height:100%;position:relative}#loading-center-absolute{position:absolute;left:50%;top:50%;height:60px;width:60px;margin-top:-30px;margin-left:-30px;-webkit-animation:loading-center-absolute 1s infinite;animation:loading-center-absolute 1s infinite}.object{width:20px;height:20px;background-color:skyblue;float:left;-moz-border-radius:50% 50% 50% 50%;-webkit-border-radius:50% 50% 50% 50%;border-radius:50% 50% 50% 50%;margin-right:20px;margin-bottom:20px}.object:nth-child(2n+0){margin-right:0}#object_one{-webkit-animation:object_one 1s infinite;animation:object_one 1s infinite}#object_two{-webkit-animation:object_two 1s infinite;animation:object_two 1s infinite}#object_three{-webkit-animation:object_three 1s infinite;animation:object_three 1s infinite}#object_four{-webkit-animation:object_four 1s infinite;animation:object_four 1s infinite}@-webkit-keyframes loading-center-absolute{100%{-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-center-absolute{100%{-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes object_one{50%{-ms-transform:translate(20px,20px);-webkit-transform:translate(20px,20px);transform:translate(20px,20px)}}@keyframes object_one{50%{-ms-transform:translate(20px,20px);-webkit-transform:translate(20px,20px);transform:translate(20px,20px)}}@-webkit-keyframes object_two{50%{-ms-transform:translate(-20px,20px);-webkit-transform:translate(-20px,20px);transform:translate(-20px,20px)}}@keyframes object_two{50%{-ms-transform:translate(-20px,20px);-webkit-transform:translate(-20px,20px);transform:translate(-20px,20px)}}@-webkit-keyframes object_three{50%{-ms-transform:translate(20px,-20px);-webkit-transform:translate(20px,-20px);transform:translate(20px,-20px)}}@keyframes object_three{50%{-ms-transform:translate(20px,-20px);-webkit-transform:translate(20px,-20px);transform:translate(20px,-20px)}}@-webkit-keyframes object_four{50%{-ms-transform:translate(-20px,-20px);-webkit-transform:translate(-20px,-20px);transform:translate(-20px,-20px)}}@keyframes object_four{50%{-ms-transform:translate(-20px,-20px);-webkit-transform:translate(-20px,-20px);transform:translate(-20px,-20px)}} \ No newline at end of file diff --git a/src/main/resources/static/css/AdminLTE.css b/src/main/resources/static/halo-backend/css/AdminLTE.css old mode 100755 new mode 100644 similarity index 98% rename from src/main/resources/static/css/AdminLTE.css rename to src/main/resources/static/halo-backend/css/AdminLTE.css index b9720d5d2..317887083 --- a/src/main/resources/static/css/AdminLTE.css +++ b/src/main/resources/static/halo-backend/css/AdminLTE.css @@ -1,5 +1,5 @@ /*! - * AdminLTE v2.4.5 + * AdminLTE v2.4.8 * Author: Almsaeed Studio * Website: Almsaeed Studio * License: Open source - MIT @@ -612,33 +612,35 @@ a:focus { margin-left: 50px; } } -.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > span:not(.pull-right), -.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > .treeview-menu { - display: block !important; - position: absolute; - width: 180px; - left: 50px; -} -.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > span { - top: 0; - margin-left: -3px; - padding: 12px 5px 12px 20px; - background-color: inherit; -} -.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container { - position: relative !important; - float: right; - width: auto !important; - left: 180px !important; - top: -22px !important; - z-index: 900; -} -.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container > .label:not(:first-of-type) { - display: none; -} -.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > .treeview-menu { - top: 44px; - margin-left: 0; +@media (min-width: 768px) { + .sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > span:not(.pull-right), + .sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > .treeview-menu { + display: block !important; + position: absolute; + width: 180px; + left: 50px; + } + .sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > span { + top: 0; + margin-left: -3px; + padding: 12px 5px 12px 20px; + background-color: inherit; + } + .sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container { + position: relative !important; + float: right; + width: auto !important; + left: 180px !important; + top: -22px !important; + z-index: 900; + } + .sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container > .label:not(:first-of-type) { + display: none; + } + .sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu > li:hover > .treeview-menu { + top: 44px; + margin-left: 0; + } } .sidebar-expanded-on-hover .main-footer, .sidebar-expanded-on-hover .content-wrapper { diff --git a/src/main/resources/static/halo-backend/css/AdminLTE.min.css b/src/main/resources/static/halo-backend/css/AdminLTE.min.css new file mode 100644 index 000000000..a5b8324ad --- /dev/null +++ b/src/main/resources/static/halo-backend/css/AdminLTE.min.css @@ -0,0 +1,7 @@ +/*! + * AdminLTE v2.4.8 + * Author: Almsaeed Studio + * Website: Almsaeed Studio + * License: Open source - MIT + * Please visit http://opensource.org/licenses/MIT for more information + */html,body{height:100%}.layout-boxed html,.layout-boxed body{height:100%}body{font-family:'Source Sans Pro','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:400;overflow-x:hidden;overflow-y:auto}.wrapper{height:100%;position:relative;overflow-x:hidden;overflow-y:auto}.wrapper:before,.wrapper:after{content:" ";display:table}.wrapper:after{clear:both}.layout-boxed .wrapper{max-width:1250px;margin:0 auto;min-height:100%;box-shadow:0 0 8px rgba(0,0,0,0.5);position:relative}.layout-boxed{background-color:#f9fafc}.content-wrapper,.main-footer{-webkit-transition:-webkit-transform .3s ease-in-out,margin .3s ease-in-out;-moz-transition:-moz-transform .3s ease-in-out,margin .3s ease-in-out;-o-transition:-o-transform .3s ease-in-out,margin .3s ease-in-out;transition:transform .3s ease-in-out,margin .3s ease-in-out;margin-left:230px;z-index:820}.layout-top-nav .content-wrapper,.layout-top-nav .main-footer{margin-left:0}@media (max-width:767px){.content-wrapper,.main-footer{margin-left:0}}@media (min-width:768px){.sidebar-collapse .content-wrapper,.sidebar-collapse .main-footer{margin-left:0}}@media (max-width:767px){.sidebar-open .content-wrapper,.sidebar-open .main-footer{-webkit-transform:translate(230px, 0);-ms-transform:translate(230px, 0);-o-transform:translate(230px, 0);transform:translate(230px, 0)}}.content-wrapper{min-height:100%;background-color:#ecf0f5;z-index:800}.main-footer{background:#fff;padding:15px;color:#444;border-top:1px solid #d2d6de}.fixed .main-header,.fixed .main-sidebar,.fixed .left-side{position:fixed}.fixed .main-header{top:0;right:0;left:0}.fixed .content-wrapper,.fixed .right-side{padding-top:50px}@media (max-width:767px){.fixed .content-wrapper,.fixed .right-side{padding-top:100px}}.fixed.layout-boxed .wrapper{max-width:100%}.fixed .wrapper{overflow:hidden}.hold-transition .content-wrapper,.hold-transition .right-side,.hold-transition .main-footer,.hold-transition .main-sidebar,.hold-transition .left-side,.hold-transition .main-header .navbar,.hold-transition .main-header .logo,.hold-transition .menu-open .fa-angle-left{-webkit-transition:none;-o-transition:none;transition:none}.content{min-height:250px;padding:15px;margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:'Source Sans Pro',sans-serif}a{color:#3c8dbc}a:hover,a:active,a:focus{outline:none;text-decoration:none;color:#72afd2}.page-header{margin:10px 0 20px 0;font-size:22px}.page-header>small{color:#666;display:block;margin-top:5px}.main-header{position:relative;max-height:100px;z-index:1030}.main-header .navbar{-webkit-transition:margin-left .3s ease-in-out;-o-transition:margin-left .3s ease-in-out;transition:margin-left .3s ease-in-out;margin-bottom:0;margin-left:230px;border:none;min-height:50px;border-radius:0}.layout-top-nav .main-header .navbar{margin-left:0}.main-header #navbar-search-input.form-control{background:rgba(255,255,255,0.2);border-color:transparent}.main-header #navbar-search-input.form-control:focus,.main-header #navbar-search-input.form-control:active{border-color:rgba(0,0,0,0.1);background:rgba(255,255,255,0.9)}.main-header #navbar-search-input.form-control::-moz-placeholder{color:#ccc;opacity:1}.main-header #navbar-search-input.form-control:-ms-input-placeholder{color:#ccc}.main-header #navbar-search-input.form-control::-webkit-input-placeholder{color:#ccc}.main-header .navbar-custom-menu,.main-header .navbar-right{float:right}@media (max-width:991px){.main-header .navbar-custom-menu a,.main-header .navbar-right a{color:inherit;background:transparent}}@media (max-width:767px){.main-header .navbar-right{float:none}.navbar-collapse .main-header .navbar-right{margin:7.5px -15px}.main-header .navbar-right>li{color:inherit;border:0}}.main-header .sidebar-toggle{float:left;background-color:transparent;background-image:none;padding:15px 15px;font-family:fontAwesome}.main-header .sidebar-toggle:before{content:"\f0c9"}.main-header .sidebar-toggle:hover{color:#fff}.main-header .sidebar-toggle:focus,.main-header .sidebar-toggle:active{background:transparent}.main-header .sidebar-toggle .icon-bar{display:none}.main-header .navbar .nav>li.user>a>.fa,.main-header .navbar .nav>li.user>a>.glyphicon,.main-header .navbar .nav>li.user>a>.ion{margin-right:5px}.main-header .navbar .nav>li>a>.label{position:absolute;top:9px;right:7px;text-align:center;font-size:9px;padding:2px 3px;line-height:.9}.main-header .logo{-webkit-transition:width .3s ease-in-out;-o-transition:width .3s ease-in-out;transition:width .3s ease-in-out;display:block;float:left;height:50px;font-size:20px;line-height:50px;text-align:center;width:230px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;padding:0 15px;font-weight:300;overflow:hidden}.main-header .logo .logo-lg{display:block}.main-header .logo .logo-mini{display:none}.main-header .navbar-brand{color:#fff}.content-header{position:relative;padding:15px 15px 0 15px}.content-header>h1{margin:0;font-size:24px}.content-header>h1>small{font-size:15px;display:inline-block;padding-left:4px;font-weight:300}.content-header>.breadcrumb{float:right;background:transparent;margin-top:0;margin-bottom:0;font-size:12px;padding:7px 5px;position:absolute;top:15px;right:10px;border-radius:2px}.content-header>.breadcrumb>li>a{color:#444;text-decoration:none;display:inline-block}.content-header>.breadcrumb>li>a>.fa,.content-header>.breadcrumb>li>a>.glyphicon,.content-header>.breadcrumb>li>a>.ion{margin-right:5px}.content-header>.breadcrumb>li+li:before{content:'>\00a0'}@media (max-width:991px){.content-header>.breadcrumb{position:relative;margin-top:5px;top:0;right:0;float:none;background:#d2d6de;padding-left:10px}.content-header>.breadcrumb li:before{color:#97a0b3}}.navbar-toggle{color:#fff;border:0;margin:0;padding:15px 15px}@media (max-width:991px){.navbar-custom-menu .navbar-nav>li{float:left}.navbar-custom-menu .navbar-nav{margin:0;float:left}.navbar-custom-menu .navbar-nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px}}@media (max-width:767px){.main-header{position:relative}.main-header .logo,.main-header .navbar{width:100%;float:none}.main-header .navbar{margin:0}.main-header .navbar-custom-menu{float:right}}@media (max-width:991px){.navbar-collapse.pull-left{float:none !important}.navbar-collapse.pull-left+.navbar-custom-menu{display:block;position:absolute;top:0;right:40px}}.main-sidebar{position:absolute;top:0;left:0;padding-top:50px;min-height:100%;width:230px;z-index:810;-webkit-transition:-webkit-transform .3s ease-in-out,width .3s ease-in-out;-moz-transition:-moz-transform .3s ease-in-out,width .3s ease-in-out;-o-transition:-o-transform .3s ease-in-out,width .3s ease-in-out;transition:transform .3s ease-in-out,width .3s ease-in-out}@media (max-width:767px){.main-sidebar{padding-top:100px}}@media (max-width:767px){.main-sidebar{-webkit-transform:translate(-230px, 0);-ms-transform:translate(-230px, 0);-o-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (min-width:768px){.sidebar-collapse .main-sidebar{-webkit-transform:translate(-230px, 0);-ms-transform:translate(-230px, 0);-o-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (max-width:767px){.sidebar-open .main-sidebar{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}}.sidebar{padding-bottom:10px}.sidebar-form input:focus{border-color:transparent}.user-panel{position:relative;width:100%;padding:10px;overflow:hidden}.user-panel:before,.user-panel:after{content:" ";display:table}.user-panel:after{clear:both}.user-panel>.image>img{width:100%;max-width:45px;height:auto}.user-panel>.info{padding:5px 5px 5px 15px;line-height:1;position:absolute;left:55px}.user-panel>.info>p{font-weight:600;margin-bottom:9px}.user-panel>.info>a{text-decoration:none;padding-right:5px;margin-top:3px;font-size:11px}.user-panel>.info>a>.fa,.user-panel>.info>a>.ion,.user-panel>.info>a>.glyphicon{margin-right:3px}.sidebar-menu{list-style:none;margin:0;padding:0}.sidebar-menu>li{position:relative;margin:0;padding:0}.sidebar-menu>li>a{padding:12px 5px 12px 15px;display:block}.sidebar-menu>li>a>.fa,.sidebar-menu>li>a>.glyphicon,.sidebar-menu>li>a>.ion{width:20px}.sidebar-menu>li .label,.sidebar-menu>li .badge{margin-right:5px}.sidebar-menu>li .badge{margin-top:3px}.sidebar-menu li.header{padding:10px 25px 10px 15px;font-size:12px}.sidebar-menu li>a>.fa-angle-left,.sidebar-menu li>a>.pull-right-container>.fa-angle-left{width:auto;height:auto;padding:0;margin-right:10px;-webkit-transition:transform .5s ease;-o-transition:transform .5s ease;transition:transform .5s ease}.sidebar-menu li>a>.fa-angle-left{position:absolute;top:50%;right:10px;margin-top:-8px}.sidebar-menu .menu-open>a>.fa-angle-left,.sidebar-menu .menu-open>a>.pull-right-container>.fa-angle-left{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.sidebar-menu .active>.treeview-menu{display:block}@media (min-width:768px){.sidebar-mini.sidebar-collapse .content-wrapper,.sidebar-mini.sidebar-collapse .right-side,.sidebar-mini.sidebar-collapse .main-footer{margin-left:50px !important;z-index:840}.sidebar-mini.sidebar-collapse .main-sidebar{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0);width:50px !important;z-index:850}.sidebar-mini.sidebar-collapse .sidebar-menu>li{position:relative}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a{margin-right:0}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span{border-top-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li:not(.treeview)>a>span{border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{padding-top:5px;padding-bottom:5px;border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .main-sidebar .user-panel>.info,.sidebar-mini.sidebar-collapse .sidebar-form,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span,.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>.pull-right,.sidebar-mini.sidebar-collapse .sidebar-menu li.header{display:none !important;-webkit-transform:translateZ(0)}.sidebar-mini.sidebar-collapse .main-header .logo{width:50px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-mini{display:block;margin-left:-15px;margin-right:-15px;font-size:18px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-lg{display:none}.sidebar-mini.sidebar-collapse .main-header .navbar{margin-left:50px}}@media (min-width:768px){.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span:not(.pull-right),.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{display:block !important;position:absolute;width:180px;left:50px}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span{top:0;margin-left:-3px;padding:12px 5px 12px 20px;background-color:inherit}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container{position:relative !important;float:right;width:auto !important;left:180px !important;top:-22px !important;z-index:900}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container>.label:not(:first-of-type){display:none}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{top:44px;margin-left:0}}.sidebar-expanded-on-hover .main-footer,.sidebar-expanded-on-hover .content-wrapper{margin-left:50px}.sidebar-expanded-on-hover .main-sidebar{box-shadow:3px 0 8px rgba(0,0,0,0.125)}.sidebar-menu,.main-sidebar .user-panel,.sidebar-menu>li.header{white-space:nowrap;overflow:hidden}.sidebar-menu:hover{overflow:visible}.sidebar-form,.sidebar-menu>li.header{overflow:hidden;text-overflow:clip}.sidebar-menu li>a{position:relative}.sidebar-menu li>a>.pull-right-container{position:absolute;right:10px;top:50%;margin-top:-7px}.control-sidebar-bg{position:fixed;z-index:1000;bottom:0}.control-sidebar-bg,.control-sidebar{top:0;right:-230px;width:230px;-webkit-transition:right .3s ease-in-out;-o-transition:right .3s ease-in-out;transition:right .3s ease-in-out}.control-sidebar{position:absolute;padding-top:50px;z-index:1010}@media (max-width:767px){.control-sidebar{padding-top:100px}}.control-sidebar>.tab-content{padding:10px 15px}.control-sidebar.control-sidebar-open,.control-sidebar.control-sidebar-open+.control-sidebar-bg{right:0}.control-sidebar-open .control-sidebar-bg,.control-sidebar-open .control-sidebar{right:0}@media (min-width:768px){.control-sidebar-open .content-wrapper,.control-sidebar-open .right-side,.control-sidebar-open .main-footer{margin-right:230px}}.fixed .control-sidebar{position:fixed;height:100%;overflow-y:auto;padding-bottom:50px}.nav-tabs.control-sidebar-tabs>li:first-of-type>a,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:hover,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:focus{border-left-width:0}.nav-tabs.control-sidebar-tabs>li>a{border-radius:0}.nav-tabs.control-sidebar-tabs>li>a,.nav-tabs.control-sidebar-tabs>li>a:hover{border-top:none;border-right:none;border-left:1px solid transparent;border-bottom:1px solid transparent}.nav-tabs.control-sidebar-tabs>li>a .icon{font-size:16px}.nav-tabs.control-sidebar-tabs>li.active>a,.nav-tabs.control-sidebar-tabs>li.active>a:hover,.nav-tabs.control-sidebar-tabs>li.active>a:focus,.nav-tabs.control-sidebar-tabs>li.active>a:active{border-top:none;border-right:none;border-bottom:none}@media (max-width:768px){.nav-tabs.control-sidebar-tabs{display:table}.nav-tabs.control-sidebar-tabs>li{display:table-cell}}.control-sidebar-heading{font-weight:400;font-size:16px;padding:10px 0;margin-bottom:10px}.control-sidebar-subheading{display:block;font-weight:400;font-size:14px}.control-sidebar-menu{list-style:none;padding:0;margin:0 -15px}.control-sidebar-menu>li>a{display:block;padding:10px 15px}.control-sidebar-menu>li>a:before,.control-sidebar-menu>li>a:after{content:" ";display:table}.control-sidebar-menu>li>a:after{clear:both}.control-sidebar-menu>li>a>.control-sidebar-subheading{margin-top:0}.control-sidebar-menu .menu-icon{float:left;width:35px;height:35px;border-radius:50%;text-align:center;line-height:35px}.control-sidebar-menu .menu-info{margin-left:45px;margin-top:3px}.control-sidebar-menu .menu-info>.control-sidebar-subheading{margin:0}.control-sidebar-menu .menu-info>p{margin:0;font-size:11px}.control-sidebar-menu .progress{margin:0}.control-sidebar-dark{color:#b8c7ce}.control-sidebar-dark,.control-sidebar-dark+.control-sidebar-bg{background:#222d32}.control-sidebar-dark .nav-tabs.control-sidebar-tabs{border-bottom:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a{background:#181f23;color:#b8c7ce}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#141a1d;border-bottom-color:#141a1d}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:active{background:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover{color:#fff}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#222d32;color:#fff}.control-sidebar-dark .control-sidebar-heading,.control-sidebar-dark .control-sidebar-subheading{color:#fff}.control-sidebar-dark .control-sidebar-menu>li>a:hover{background:#1e282c}.control-sidebar-dark .control-sidebar-menu>li>a .menu-info>p{color:#b8c7ce}.control-sidebar-light{color:#5e5e5e}.control-sidebar-light,.control-sidebar-light+.control-sidebar-bg{background:#f9fafc;border-left:1px solid #d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs{border-bottom:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a{background:#e8ecf4;color:#444}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#d2d6de;border-bottom-color:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:active{background:#eff1f7}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#f9fafc;color:#111}.control-sidebar-light .control-sidebar-heading,.control-sidebar-light .control-sidebar-subheading{color:#111}.control-sidebar-light .control-sidebar-menu{margin-left:-14px}.control-sidebar-light .control-sidebar-menu>li>a:hover{background:#f4f4f5}.control-sidebar-light .control-sidebar-menu>li>a .menu-info>p{color:#5e5e5e}.dropdown-menu{box-shadow:none;border-color:#eee}.dropdown-menu>li>a{color:#777}.dropdown-menu>li>a>.glyphicon,.dropdown-menu>li>a>.fa,.dropdown-menu>li>a>.ion{margin-right:10px}.dropdown-menu>li>a:hover{background-color:#e1e3e9;color:#333}.dropdown-menu>.divider{background-color:#eee}.navbar-nav>.notifications-menu>.dropdown-menu,.navbar-nav>.messages-menu>.dropdown-menu,.navbar-nav>.tasks-menu>.dropdown-menu{width:280px;padding:0 0 0 0;margin:0;top:100%}.navbar-nav>.notifications-menu>.dropdown-menu>li,.navbar-nav>.messages-menu>.dropdown-menu>li,.navbar-nav>.tasks-menu>.dropdown-menu>li{position:relative}.navbar-nav>.notifications-menu>.dropdown-menu>li.header,.navbar-nav>.messages-menu>.dropdown-menu>li.header,.navbar-nav>.tasks-menu>.dropdown-menu>li.header{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:#ffffff;padding:7px 10px;border-bottom:1px solid #f4f4f4;color:#444444;font-size:14px}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px;font-size:12px;background-color:#fff;padding:7px 10px;border-bottom:1px solid #eeeeee;color:#444 !important;text-align:center}@media (max-width:991px){.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{background:#fff !important;color:#444 !important}}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a:hover{text-decoration:none;font-weight:normal}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu,.navbar-nav>.messages-menu>.dropdown-menu>li .menu,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu{max-height:200px;margin:0;padding:0;list-style:none;overflow-x:hidden}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{display:block;white-space:nowrap;border-bottom:1px solid #f4f4f4}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a:hover{background:#f4f4f4;text-decoration:none}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a{color:#444444;overflow:hidden;text-overflow:ellipsis;padding:10px}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.glyphicon,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.fa,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.ion{width:20px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a{margin:0;padding:10px 10px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>div>img{margin:auto 10px auto auto;width:40px;height:40px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4{padding:0;margin:0 0 0 45px;color:#444444;font-size:15px;position:relative}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4>small{color:#999999;font-size:10px;position:absolute;top:0;right:0}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>p{margin:0 0 0 45px;font-size:12px;color:#888888}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:before,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{content:" ";display:table}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{clear:both}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{padding:10px}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>h3{font-size:14px;padding:0;margin:0 0 10px 0;color:#666666}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>.progress{padding:0;margin:0}.navbar-nav>.user-menu>.dropdown-menu{border-top-right-radius:0;border-top-left-radius:0;padding:1px 0 0 0;border-top-width:0;width:280px}.navbar-nav>.user-menu>.dropdown-menu,.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header{height:175px;padding:10px;text-align:center}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>img{z-index:5;height:90px;width:90px;border:3px solid;border-color:transparent;border-color:rgba(255,255,255,0.2)}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p{z-index:5;color:#fff;color:rgba(255,255,255,0.8);font-size:17px;margin-top:10px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p>small{display:block;font-size:12px}.navbar-nav>.user-menu>.dropdown-menu>.user-body{padding:15px;border-bottom:1px solid #f4f4f4;border-top:1px solid #dddddd}.navbar-nav>.user-menu>.dropdown-menu>.user-body:before,.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-body a{color:#444 !important}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-body a{background:#fff !important;color:#444 !important}}.navbar-nav>.user-menu>.dropdown-menu>.user-footer{background-color:#f9f9f9;padding:10px}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:before,.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default{color:#666666}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default:hover{background-color:#f9f9f9}}.navbar-nav>.user-menu .user-image{float:left;width:25px;height:25px;border-radius:50%;margin-right:10px;margin-top:-2px}@media (max-width:767px){.navbar-nav>.user-menu .user-image{float:none;margin-right:0;margin-top:-8px;line-height:10px}}.open:not(.dropup)>.animated-dropdown-menu{backface-visibility:visible !important;-webkit-animation:flipInX .7s both;-o-animation:flipInX .7s both;animation:flipInX .7s both}@keyframes flipInX{0%{transform:perspective(400px) rotate3d(1, 0, 0, 90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotate3d(1, 0, 0, -20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{transform:perspective(400px)}}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 90deg);-webkit-transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -20deg);-webkit-transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{-webkit-transform:perspective(400px)}}.navbar-custom-menu>.navbar-nav>li{position:relative}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:0;left:auto}@media (max-width:991px){.navbar-custom-menu>.navbar-nav{float:right}.navbar-custom-menu>.navbar-nav>li{position:static}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:5%;left:auto;border:1px solid #ddd;background:#fff}}.form-control{border-radius:0;box-shadow:none;border-color:#d2d6de}.form-control:focus{border-color:#3c8dbc;box-shadow:none}.form-control::-moz-placeholder,.form-control:-ms-input-placeholder,.form-control::-webkit-input-placeholder{color:#bbb;opacity:1}.form-control:not(select){-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-group.has-success label{color:#00a65a}.form-group.has-success .form-control,.form-group.has-success .input-group-addon{border-color:#00a65a;box-shadow:none}.form-group.has-success .help-block{color:#00a65a}.form-group.has-warning label{color:#f39c12}.form-group.has-warning .form-control,.form-group.has-warning .input-group-addon{border-color:#f39c12;box-shadow:none}.form-group.has-warning .help-block{color:#f39c12}.form-group.has-error label{color:#dd4b39}.form-group.has-error .form-control,.form-group.has-error .input-group-addon{border-color:#dd4b39;box-shadow:none}.form-group.has-error .help-block{color:#dd4b39}.input-group .input-group-addon{border-radius:0;border-color:#d2d6de;background-color:#fff}.btn-group-vertical .btn.btn-flat:first-of-type,.btn-group-vertical .btn.btn-flat:last-of-type{border-radius:0}.icheck>label{padding-left:0}.form-control-feedback.fa{line-height:34px}.input-lg+.form-control-feedback.fa,.input-group-lg+.form-control-feedback.fa,.form-group-lg .form-control+.form-control-feedback.fa{line-height:46px}.input-sm+.form-control-feedback.fa,.input-group-sm+.form-control-feedback.fa,.form-group-sm .form-control+.form-control-feedback.fa{line-height:30px}.progress,.progress>.progress-bar{-webkit-box-shadow:none;box-shadow:none}.progress,.progress>.progress-bar,.progress .progress-bar,.progress>.progress-bar .progress-bar{border-radius:1px}.progress.sm,.progress-sm{height:10px}.progress.sm,.progress-sm,.progress.sm .progress-bar,.progress-sm .progress-bar{border-radius:1px}.progress.xs,.progress-xs{height:7px}.progress.xs,.progress-xs,.progress.xs .progress-bar,.progress-xs .progress-bar{border-radius:1px}.progress.xxs,.progress-xxs{height:3px}.progress.xxs,.progress-xxs,.progress.xxs .progress-bar,.progress-xxs .progress-bar{border-radius:1px}.progress.vertical{position:relative;width:30px;height:200px;display:inline-block;margin-right:10px}.progress.vertical>.progress-bar{width:100%;position:absolute;bottom:0}.progress.vertical.sm,.progress.vertical.progress-sm{width:20px}.progress.vertical.xs,.progress.vertical.progress-xs{width:10px}.progress.vertical.xxs,.progress.vertical.progress-xxs{width:3px}.progress-group .progress-text{font-weight:600}.progress-group .progress-number{float:right}.table tr>td .progress{margin:0}.progress-bar-light-blue,.progress-bar-primary{background-color:#3c8dbc}.progress-striped .progress-bar-light-blue,.progress-striped .progress-bar-primary{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-green,.progress-bar-success{background-color:#00a65a}.progress-striped .progress-bar-green,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-aqua,.progress-bar-info{background-color:#00c0ef}.progress-striped .progress-bar-aqua,.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-yellow,.progress-bar-warning{background-color:#f39c12}.progress-striped .progress-bar-yellow,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-red,.progress-bar-danger{background-color:#dd4b39}.progress-striped .progress-bar-red,.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.small-box{border-radius:2px;position:relative;display:block;margin-bottom:20px;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.small-box>.inner{padding:10px}.small-box>.small-box-footer{position:relative;text-align:center;padding:3px 0;color:#fff;color:rgba(255,255,255,0.8);display:block;z-index:10;background:rgba(0,0,0,0.1);text-decoration:none}.small-box>.small-box-footer:hover{color:#fff;background:rgba(0,0,0,0.15)}.small-box h3{font-size:38px;font-weight:bold;margin:0 0 10px 0;white-space:nowrap;padding:0}.small-box p{font-size:15px}.small-box p>small{display:block;color:#f9f9f9;font-size:13px;margin-top:5px}.small-box h3,.small-box p{z-index:5}.small-box .icon{-webkit-transition:all .3s linear;-o-transition:all .3s linear;transition:all .3s linear;position:absolute;top:-10px;right:10px;z-index:0;font-size:90px;color:rgba(0,0,0,0.15)}.small-box:hover{text-decoration:none;color:#f9f9f9}.small-box:hover .icon{font-size:95px}@media (max-width:767px){.small-box{text-align:center}.small-box .icon{display:none}.small-box p{font-size:12px}}.box{position:relative;border-radius:3px;background:#ffffff;border-top:3px solid #d2d6de;margin-bottom:20px;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.box.box-primary{border-top-color:#3c8dbc}.box.box-info{border-top-color:#00c0ef}.box.box-danger{border-top-color:#dd4b39}.box.box-warning{border-top-color:#f39c12}.box.box-success{border-top-color:#00a65a}.box.box-default{border-top-color:#d2d6de}.box.collapsed-box .box-body,.box.collapsed-box .box-footer{display:none}.box .nav-stacked>li{border-bottom:1px solid #f4f4f4;margin:0}.box .nav-stacked>li:last-of-type{border-bottom:none}.box.height-control .box-body{max-height:300px;overflow:auto}.box .border-right{border-right:1px solid #f4f4f4}.box .border-left{border-left:1px solid #f4f4f4}.box.box-solid{border-top:0}.box.box-solid>.box-header .btn.btn-default{background:transparent}.box.box-solid>.box-header .btn:hover,.box.box-solid>.box-header a:hover{background:rgba(0,0,0,0.1)}.box.box-solid.box-default{border:1px solid #d2d6de}.box.box-solid.box-default>.box-header{color:#444;background:#d2d6de;background-color:#d2d6de}.box.box-solid.box-default>.box-header a,.box.box-solid.box-default>.box-header .btn{color:#444}.box.box-solid.box-primary{border:1px solid #3c8dbc}.box.box-solid.box-primary>.box-header{color:#fff;background:#3c8dbc;background-color:#3c8dbc}.box.box-solid.box-primary>.box-header a,.box.box-solid.box-primary>.box-header .btn{color:#fff}.box.box-solid.box-info{border:1px solid #00c0ef}.box.box-solid.box-info>.box-header{color:#fff;background:#00c0ef;background-color:#00c0ef}.box.box-solid.box-info>.box-header a,.box.box-solid.box-info>.box-header .btn{color:#fff}.box.box-solid.box-danger{border:1px solid #dd4b39}.box.box-solid.box-danger>.box-header{color:#fff;background:#dd4b39;background-color:#dd4b39}.box.box-solid.box-danger>.box-header a,.box.box-solid.box-danger>.box-header .btn{color:#fff}.box.box-solid.box-warning{border:1px solid #f39c12}.box.box-solid.box-warning>.box-header{color:#fff;background:#f39c12;background-color:#f39c12}.box.box-solid.box-warning>.box-header a,.box.box-solid.box-warning>.box-header .btn{color:#fff}.box.box-solid.box-success{border:1px solid #00a65a}.box.box-solid.box-success>.box-header{color:#fff;background:#00a65a;background-color:#00a65a}.box.box-solid.box-success>.box-header a,.box.box-solid.box-success>.box-header .btn{color:#fff}.box.box-solid>.box-header>.box-tools .btn{border:0;box-shadow:none}.box.box-solid[class*='bg']>.box-header{color:#fff}.box .box-group>.box{margin-bottom:5px}.box .knob-label{text-align:center;color:#333;font-weight:100;font-size:12px;margin-bottom:0.3em}.box>.overlay,.overlay-wrapper>.overlay,.box>.loading-img,.overlay-wrapper>.loading-img{position:absolute;top:0;left:0;width:100%;height:100%}.box .overlay,.overlay-wrapper .overlay{z-index:50;background:rgba(255,255,255,0.7);border-radius:3px}.box .overlay>.fa,.overlay-wrapper .overlay>.fa{position:absolute;top:50%;left:50%;margin-left:-15px;margin-top:-15px;color:#000;font-size:30px}.box .overlay.dark,.overlay-wrapper .overlay.dark{background:rgba(0,0,0,0.5)}.box-header:before,.box-body:before,.box-footer:before,.box-header:after,.box-body:after,.box-footer:after{content:" ";display:table}.box-header:after,.box-body:after,.box-footer:after{clear:both}.box-header{color:#444;display:block;padding:10px;position:relative}.box-header.with-border{border-bottom:1px solid #f4f4f4}.collapsed-box .box-header.with-border{border-bottom:none}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion,.box-header .box-title{display:inline-block;font-size:18px;margin:0;line-height:1}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion{margin-right:5px}.box-header>.box-tools{position:absolute;right:10px;top:5px}.box-header>.box-tools [data-toggle="tooltip"]{position:relative}.box-header>.box-tools.pull-right .dropdown-menu{right:0;left:auto}.box-header>.box-tools .dropdown-menu>li>a{color:#444!important}.btn-box-tool{padding:5px;font-size:12px;background:transparent;color:#97a0b3}.open .btn-box-tool,.btn-box-tool:hover{color:#606c84}.btn-box-tool.btn:active{box-shadow:none}.box-body{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;padding:10px}.no-header .box-body{border-top-right-radius:3px;border-top-left-radius:3px}.box-body>.table{margin-bottom:0}.box-body .fc{margin-top:5px}.box-body .full-width-chart{margin:-19px}.box-body.no-padding .full-width-chart{margin:-9px}.box-body .box-pane{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:3px}.box-body .box-pane-right{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:0}.box-footer{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-top:1px solid #f4f4f4;padding:10px;background-color:#fff}.chart-legend{margin:10px 0}@media (max-width:991px){.chart-legend>li{float:left;margin-right:10px}}.box-comments{background:#f7f7f7}.box-comments .box-comment{padding:8px 0;border-bottom:1px solid #eee}.box-comments .box-comment:before,.box-comments .box-comment:after{content:" ";display:table}.box-comments .box-comment:after{clear:both}.box-comments .box-comment:last-of-type{border-bottom:0}.box-comments .box-comment:first-of-type{padding-top:0}.box-comments .box-comment img{float:left}.box-comments .comment-text{margin-left:40px;color:#555}.box-comments .username{color:#444;display:block;font-weight:600}.box-comments .text-muted{font-weight:400;font-size:12px}.todo-list{margin:0;padding:0;list-style:none;overflow:auto}.todo-list>li{border-radius:2px;padding:10px;background:#f4f4f4;margin-bottom:2px;border-left:2px solid #e6e7e8;color:#444}.todo-list>li:last-of-type{margin-bottom:0}.todo-list>li>input[type='checkbox']{margin:0 10px 0 5px}.todo-list>li .text{display:inline-block;margin-left:5px;font-weight:600}.todo-list>li .label{margin-left:10px;font-size:9px}.todo-list>li .tools{display:none;float:right;color:#dd4b39}.todo-list>li .tools>.fa,.todo-list>li .tools>.glyphicon,.todo-list>li .tools>.ion{margin-right:5px;cursor:pointer}.todo-list>li:hover .tools{display:inline-block}.todo-list>li.done{color:#999}.todo-list>li.done .text{text-decoration:line-through;font-weight:500}.todo-list>li.done .label{background:#d2d6de !important}.todo-list .danger{border-left-color:#dd4b39}.todo-list .warning{border-left-color:#f39c12}.todo-list .info{border-left-color:#00c0ef}.todo-list .success{border-left-color:#00a65a}.todo-list .primary{border-left-color:#3c8dbc}.todo-list .handle{display:inline-block;cursor:move;margin:0 5px}.chat{padding:5px 20px 5px 10px}.chat .item{margin-bottom:10px}.chat .item:before,.chat .item:after{content:" ";display:table}.chat .item:after{clear:both}.chat .item>img{width:40px;height:40px;border:2px solid transparent;border-radius:50%}.chat .item>.online{border:2px solid #00a65a}.chat .item>.offline{border:2px solid #dd4b39}.chat .item>.message{margin-left:55px;margin-top:-40px}.chat .item>.message>.name{display:block;font-weight:600}.chat .item>.attachment{border-radius:3px;background:#f4f4f4;margin-left:65px;margin-right:15px;padding:10px}.chat .item>.attachment>h4{margin:0 0 5px 0;font-weight:600;font-size:14px}.chat .item>.attachment>p,.chat .item>.attachment>.filename{font-weight:600;font-size:13px;font-style:italic;margin:0}.chat .item>.attachment:before,.chat .item>.attachment:after{content:" ";display:table}.chat .item>.attachment:after{clear:both}.box-input{max-width:200px}.modal .panel-body{color:#444}.info-box{display:block;min-height:90px;background:#fff;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:2px;margin-bottom:15px}.info-box small{font-size:14px}.info-box .progress{background:rgba(0,0,0,0.2);margin:5px -10px 5px -10px;height:2px}.info-box .progress,.info-box .progress .progress-bar{border-radius:0}.info-box .progress .progress-bar{background:#fff}.info-box-icon{border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px;display:block;float:left;height:90px;width:90px;text-align:center;font-size:45px;line-height:90px;background:rgba(0,0,0,0.2)}.info-box-icon>img{max-width:100%}.info-box-content{padding:5px 10px;margin-left:90px}.info-box-number{display:block;font-weight:bold;font-size:18px}.progress-description,.info-box-text{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.info-box-text{text-transform:uppercase}.info-box-more{display:block}.progress-description{margin:0}.timeline{position:relative;margin:0 0 30px 0;padding:0;list-style:none}.timeline:before{content:'';position:absolute;top:0;bottom:0;width:4px;background:#ddd;left:31px;margin:0;border-radius:2px}.timeline>li{position:relative;margin-right:10px;margin-bottom:15px}.timeline>li:before,.timeline>li:after{content:" ";display:table}.timeline>li:after{clear:both}.timeline>li>.timeline-item{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;margin-top:0;background:#fff;color:#444;margin-left:60px;margin-right:15px;padding:0;position:relative}.timeline>li>.timeline-item>.time{color:#999;float:right;padding:10px;font-size:12px}.timeline>li>.timeline-item>.timeline-header{margin:0;color:#555;border-bottom:1px solid #f4f4f4;padding:10px;font-size:16px;line-height:1.1}.timeline>li>.timeline-item>.timeline-header>a{font-weight:600}.timeline>li>.timeline-item>.timeline-body,.timeline>li>.timeline-item>.timeline-footer{padding:10px}.timeline>li>.fa,.timeline>li>.glyphicon,.timeline>li>.ion{width:30px;height:30px;font-size:15px;line-height:30px;position:absolute;color:#666;background:#d2d6de;border-radius:50%;text-align:center;left:18px;top:0}.timeline>.time-label>span{font-weight:600;padding:5px;display:inline-block;background-color:#fff;border-radius:4px}.timeline-inverse>li>.timeline-item{background:#f0f0f0;border:1px solid #ddd;-webkit-box-shadow:none;box-shadow:none}.timeline-inverse>li>.timeline-item>.timeline-header{border-bottom-color:#ddd}.btn{border-radius:3px;-webkit-box-shadow:none;box-shadow:none;border:1px solid transparent}.btn.uppercase{text-transform:uppercase}.btn.btn-flat{border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border-width:1px}.btn:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:focus{outline:none}.btn.btn-file{position:relative;overflow:hidden}.btn.btn-file>input[type='file']{position:absolute;top:0;right:0;min-width:100%;min-height:100%;font-size:100px;text-align:right;opacity:0;filter:alpha(opacity=0);outline:none;background:white;cursor:inherit;display:block}.btn-default{background-color:#f4f4f4;color:#444;border-color:#ddd}.btn-default:hover,.btn-default:active,.btn-default.hover{background-color:#e7e7e7}.btn-primary{background-color:#3c8dbc;border-color:#367fa9}.btn-primary:hover,.btn-primary:active,.btn-primary.hover{background-color:#367fa9}.btn-success{background-color:#00a65a;border-color:#008d4c}.btn-success:hover,.btn-success:active,.btn-success.hover{background-color:#008d4c}.btn-info{background-color:#00c0ef;border-color:#00acd6}.btn-info:hover,.btn-info:active,.btn-info.hover{background-color:#00acd6}.btn-danger{background-color:#dd4b39;border-color:#d73925}.btn-danger:hover,.btn-danger:active,.btn-danger.hover{background-color:#d73925}.btn-warning{background-color:#f39c12;border-color:#e08e0b}.btn-warning:hover,.btn-warning:active,.btn-warning.hover{background-color:#e08e0b}.btn-outline{border:1px solid #fff;background:transparent;color:#fff}.btn-outline:hover,.btn-outline:focus,.btn-outline:active{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.7)}.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn[class*='bg-']:hover{-webkit-box-shadow:inset 0 0 100px rgba(0,0,0,0.2);box-shadow:inset 0 0 100px rgba(0,0,0,0.2)}.btn-app{border-radius:3px;position:relative;padding:15px 5px;margin:0 0 10px 10px;min-width:80px;height:60px;text-align:center;color:#666;border:1px solid #ddd;background-color:#f4f4f4;font-size:12px}.btn-app>.fa,.btn-app>.glyphicon,.btn-app>.ion{font-size:20px;display:block}.btn-app:hover{background:#f4f4f4;color:#444;border-color:#aaa}.btn-app:active,.btn-app:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-app>.badge{position:absolute;top:-3px;right:-10px;font-size:10px;font-weight:400}.callout{border-radius:3px;margin:0 0 20px 0;padding:15px 30px 15px 15px;border-left:5px solid #eee}.callout a{color:#fff;text-decoration:underline}.callout a:hover{color:#eee}.callout h4{margin-top:0;font-weight:600}.callout p:last-child{margin-bottom:0}.callout code,.callout .highlight{background-color:#fff}.callout.callout-danger{border-color:#c23321}.callout.callout-warning{border-color:#c87f0a}.callout.callout-info{border-color:#0097bc}.callout.callout-success{border-color:#00733e}.alert{border-radius:3px}.alert h4{font-weight:600}.alert .icon{margin-right:10px}.alert .close{color:#000;opacity:.2;filter:alpha(opacity=20)}.alert .close:hover{opacity:.5;filter:alpha(opacity=50)}.alert a{color:#fff;text-decoration:underline}.alert-success{border-color:#008d4c}.alert-danger,.alert-error{border-color:#d73925}.alert-warning{border-color:#e08e0b}.alert-info{border-color:#00acd6}.nav>li>a:hover,.nav>li>a:active,.nav>li>a:focus{color:#444;background:#f7f7f7}.nav-pills>li>a{border-radius:0;border-top:3px solid transparent;color:#444}.nav-pills>li>a>.fa,.nav-pills>li>a>.glyphicon,.nav-pills>li>a>.ion{margin-right:5px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{border-top-color:#3c8dbc}.nav-pills>li.active>a{font-weight:600}.nav-stacked>li>a{border-radius:0;border-top:0;border-left:3px solid transparent;color:#444}.nav-stacked>li.active>a,.nav-stacked>li.active>a:hover{background:transparent;color:#444;border-top:0;border-left-color:#3c8dbc}.nav-stacked>li.header{border-bottom:1px solid #ddd;color:#777;margin-bottom:10px;padding:5px 10px;text-transform:uppercase}.nav-tabs-custom{margin-bottom:20px;background:#fff;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px}.nav-tabs-custom>.nav-tabs{margin:0;border-bottom-color:#f4f4f4;border-top-right-radius:3px;border-top-left-radius:3px}.nav-tabs-custom>.nav-tabs>li{border-top:3px solid transparent;margin-bottom:-2px;margin-right:5px}.nav-tabs-custom>.nav-tabs>li.disabled>a{color:#777}.nav-tabs-custom>.nav-tabs>li>a{color:#444;border-radius:0}.nav-tabs-custom>.nav-tabs>li>a.text-muted{color:#999}.nav-tabs-custom>.nav-tabs>li>a,.nav-tabs-custom>.nav-tabs>li>a:hover{background:transparent;margin:0}.nav-tabs-custom>.nav-tabs>li>a:hover{color:#999}.nav-tabs-custom>.nav-tabs>li:not(.active)>a:hover,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:focus,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:active{border-color:transparent}.nav-tabs-custom>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom>.nav-tabs>li.active>a,.nav-tabs-custom>.nav-tabs>li.active:hover>a{background-color:#fff;color:#444}.nav-tabs-custom>.nav-tabs>li.active>a{border-top-color:transparent;border-left-color:#f4f4f4;border-right-color:#f4f4f4}.nav-tabs-custom>.nav-tabs>li:first-of-type{margin-left:0}.nav-tabs-custom>.nav-tabs>li:first-of-type.active>a{border-left-color:transparent}.nav-tabs-custom>.nav-tabs.pull-right{float:none !important}.nav-tabs-custom>.nav-tabs.pull-right>li{float:right}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type{margin-right:0}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type>a{border-left-width:1px}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type.active>a{border-left-color:#f4f4f4;border-right-color:transparent}.nav-tabs-custom>.nav-tabs>li.header{line-height:35px;padding:0 10px;font-size:20px;color:#444}.nav-tabs-custom>.nav-tabs>li.header>.fa,.nav-tabs-custom>.nav-tabs>li.header>.glyphicon,.nav-tabs-custom>.nav-tabs>li.header>.ion{margin-right:5px}.nav-tabs-custom>.tab-content{background:#fff;padding:10px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.nav-tabs-custom .dropdown.open>a:active,.nav-tabs-custom .dropdown.open>a:focus{background:transparent;color:#999}.nav-tabs-custom.tab-primary>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom.tab-info>.nav-tabs>li.active{border-top-color:#00c0ef}.nav-tabs-custom.tab-danger>.nav-tabs>li.active{border-top-color:#dd4b39}.nav-tabs-custom.tab-warning>.nav-tabs>li.active{border-top-color:#f39c12}.nav-tabs-custom.tab-success>.nav-tabs>li.active{border-top-color:#00a65a}.nav-tabs-custom.tab-default>.nav-tabs>li.active{border-top-color:#d2d6de}.pagination>li>a{background:#fafafa;color:#666}.pagination.pagination-flat>li>a{border-radius:0 !important}.products-list{list-style:none;margin:0;padding:0}.products-list>.item{border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);padding:10px 0;background:#fff}.products-list>.item:before,.products-list>.item:after{content:" ";display:table}.products-list>.item:after{clear:both}.products-list .product-img{float:left}.products-list .product-img img{width:50px;height:50px}.products-list .product-info{margin-left:60px}.products-list .product-title{font-weight:600}.products-list .product-description{display:block;color:#999;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.product-list-in-box>.item{-webkit-box-shadow:none;box-shadow:none;border-radius:0;border-bottom:1px solid #f4f4f4}.product-list-in-box>.item:last-of-type{border-bottom-width:0}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{border-top:1px solid #f4f4f4}.table>thead>tr>th{border-bottom:2px solid #f4f4f4}.table tr td .progress{margin-top:5px}.table-bordered{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table.no-border,.table.no-border td,.table.no-border th{border:0}table.text-center,table.text-center td,table.text-center th{text-align:center}.table.align th{text-align:left}.table.align td{text-align:right}.label-default{background-color:#d2d6de;color:#444}.direct-chat .box-body{border-bottom-right-radius:0;border-bottom-left-radius:0;position:relative;overflow-x:hidden;padding:0}.direct-chat.chat-pane-open .direct-chat-contacts{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.direct-chat-messages{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0);padding:10px;height:250px;overflow:auto}.direct-chat-msg,.direct-chat-text{display:block}.direct-chat-msg{margin-bottom:10px}.direct-chat-msg:before,.direct-chat-msg:after{content:" ";display:table}.direct-chat-msg:after{clear:both}.direct-chat-messages,.direct-chat-contacts{-webkit-transition:-webkit-transform .5s ease-in-out;-moz-transition:-moz-transform .5s ease-in-out;-o-transition:-o-transform .5s ease-in-out;transition:transform .5s ease-in-out}.direct-chat-text{border-radius:5px;position:relative;padding:5px 10px;background:#d2d6de;border:1px solid #d2d6de;margin:5px 0 0 50px;color:#444}.direct-chat-text:after,.direct-chat-text:before{position:absolute;right:100%;top:15px;border:solid transparent;border-right-color:#d2d6de;content:' ';height:0;width:0;pointer-events:none}.direct-chat-text:after{border-width:5px;margin-top:-5px}.direct-chat-text:before{border-width:6px;margin-top:-6px}.right .direct-chat-text{margin-right:50px;margin-left:0}.right .direct-chat-text:after,.right .direct-chat-text:before{right:auto;left:100%;border-right-color:transparent;border-left-color:#d2d6de}.direct-chat-img{border-radius:50%;float:left;width:40px;height:40px}.right .direct-chat-img{float:right}.direct-chat-info{display:block;margin-bottom:2px;font-size:12px}.direct-chat-name{font-weight:600}.direct-chat-timestamp{color:#999}.direct-chat-contacts-open .direct-chat-contacts{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.direct-chat-contacts{-webkit-transform:translate(101%, 0);-ms-transform:translate(101%, 0);-o-transform:translate(101%, 0);transform:translate(101%, 0);position:absolute;top:0;bottom:0;height:250px;width:100%;background:#222d32;color:#fff;overflow:auto}.contacts-list>li{border-bottom:1px solid rgba(0,0,0,0.2);padding:10px;margin:0}.contacts-list>li:before,.contacts-list>li:after{content:" ";display:table}.contacts-list>li:after{clear:both}.contacts-list>li:last-of-type{border-bottom:none}.contacts-list-img{border-radius:50%;width:40px;float:left}.contacts-list-info{margin-left:45px;color:#fff}.contacts-list-name,.contacts-list-status{display:block}.contacts-list-name{font-weight:600}.contacts-list-status{font-size:12px}.contacts-list-date{color:#aaa;font-weight:normal}.contacts-list-msg{color:#999}.direct-chat-danger .right>.direct-chat-text{background:#dd4b39;border-color:#dd4b39;color:#fff}.direct-chat-danger .right>.direct-chat-text:after,.direct-chat-danger .right>.direct-chat-text:before{border-left-color:#dd4b39}.direct-chat-primary .right>.direct-chat-text{background:#3c8dbc;border-color:#3c8dbc;color:#fff}.direct-chat-primary .right>.direct-chat-text:after,.direct-chat-primary .right>.direct-chat-text:before{border-left-color:#3c8dbc}.direct-chat-warning .right>.direct-chat-text{background:#f39c12;border-color:#f39c12;color:#fff}.direct-chat-warning .right>.direct-chat-text:after,.direct-chat-warning .right>.direct-chat-text:before{border-left-color:#f39c12}.direct-chat-info .right>.direct-chat-text{background:#00c0ef;border-color:#00c0ef;color:#fff}.direct-chat-info .right>.direct-chat-text:after,.direct-chat-info .right>.direct-chat-text:before{border-left-color:#00c0ef}.direct-chat-success .right>.direct-chat-text{background:#00a65a;border-color:#00a65a;color:#fff}.direct-chat-success .right>.direct-chat-text:after,.direct-chat-success .right>.direct-chat-text:before{border-left-color:#00a65a}.users-list>li{width:25%;float:left;padding:10px;text-align:center}.users-list>li img{border-radius:50%;max-width:100%;height:auto}.users-list>li>a:hover,.users-list>li>a:hover .users-list-name{color:#999}.users-list-name,.users-list-date{display:block}.users-list-name{font-weight:600;color:#444;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.users-list-date{color:#999;font-size:12px}.carousel-control.left,.carousel-control.right{background-image:none}.carousel-control>.fa{font-size:40px;position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-20px}.modal{background:rgba(0,0,0,0.3)}.modal-content{border-radius:0;-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125);border:0}@media (min-width:768px){.modal-content{-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125)}}.modal-header{border-bottom-color:#f4f4f4}.modal-footer{border-top-color:#f4f4f4}.modal-primary .modal-header,.modal-primary .modal-footer{border-color:#307095}.modal-warning .modal-header,.modal-warning .modal-footer{border-color:#c87f0a}.modal-info .modal-header,.modal-info .modal-footer{border-color:#0097bc}.modal-success .modal-header,.modal-success .modal-footer{border-color:#00733e}.modal-danger .modal-header,.modal-danger .modal-footer{border-color:#c23321}.box-widget{border:none;position:relative}.widget-user .widget-user-header{padding:20px;height:120px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user .widget-user-username{margin-top:0;margin-bottom:5px;font-size:25px;font-weight:300;text-shadow:0 1px 1px rgba(0,0,0,0.2)}.widget-user .widget-user-desc{margin-top:0}.widget-user .widget-user-image{position:absolute;top:65px;left:50%;margin-left:-45px}.widget-user .widget-user-image>img{width:90px;height:auto;border:3px solid #fff}.widget-user .box-footer{padding-top:30px}.widget-user-2 .widget-user-header{padding:20px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user-2 .widget-user-username{margin-top:5px;margin-bottom:5px;font-size:25px;font-weight:300}.widget-user-2 .widget-user-desc{margin-top:0}.widget-user-2 .widget-user-username,.widget-user-2 .widget-user-desc{margin-left:75px}.widget-user-2 .widget-user-image>img{width:65px;height:auto;float:left}.treeview-menu{display:none;list-style:none;padding:0;margin:0;padding-left:5px}.treeview-menu .treeview-menu{padding-left:20px}.treeview-menu>li{margin:0}.treeview-menu>li>a{padding:5px 5px 5px 15px;display:block;font-size:14px}.treeview-menu>li>a>.fa,.treeview-menu>li>a>.glyphicon,.treeview-menu>li>a>.ion{width:20px}.treeview-menu>li>a>.pull-right-container>.fa-angle-left,.treeview-menu>li>a>.pull-right-container>.fa-angle-down,.treeview-menu>li>a>.fa-angle-left,.treeview-menu>li>a>.fa-angle-down{width:auto}.mailbox-messages>.table{margin:0}.mailbox-controls{padding:5px}.mailbox-controls.with-border{border-bottom:1px solid #f4f4f4}.mailbox-read-info{border-bottom:1px solid #f4f4f4;padding:10px}.mailbox-read-info h3{font-size:20px;margin:0}.mailbox-read-info h5{margin:0;padding:5px 0 0 0}.mailbox-read-time{color:#999;font-size:13px}.mailbox-read-message{padding:10px}.mailbox-attachments li{float:left;width:200px;border:1px solid #eee;margin-bottom:10px;margin-right:10px}.mailbox-attachment-name{font-weight:bold;color:#666}.mailbox-attachment-icon,.mailbox-attachment-info,.mailbox-attachment-size{display:block}.mailbox-attachment-info{padding:10px;background:#f4f4f4}.mailbox-attachment-size{color:#999;font-size:12px}.mailbox-attachment-icon{text-align:center;font-size:65px;color:#666;padding:20px 10px}.mailbox-attachment-icon.has-img{padding:0}.mailbox-attachment-icon.has-img>img{max-width:100%;height:auto}.lockscreen{background:#d2d6de}.lockscreen-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.lockscreen-logo a{color:#444}.lockscreen-wrapper{max-width:400px;margin:0 auto;margin-top:10%}.lockscreen .lockscreen-name{text-align:center;font-weight:600}.lockscreen-item{border-radius:4px;padding:0;background:#fff;position:relative;margin:10px auto 30px auto;width:290px}.lockscreen-image{border-radius:50%;position:absolute;left:-10px;top:-25px;background:#fff;padding:5px;z-index:10}.lockscreen-image>img{border-radius:50%;width:70px;height:70px}.lockscreen-credentials{margin-left:70px}.lockscreen-credentials .form-control{border:0}.lockscreen-credentials .btn{background-color:#fff;border:0;padding:0 10px}.lockscreen-footer{margin-top:10px}.login-logo,.register-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.login-logo a,.register-logo a{color:#444}.login-page,.register-page{background:#d2d6de}.login-box,.register-box{width:360px;margin:7% auto}@media (max-width:768px){.login-box,.register-box{width:90%;margin-top:20px}}.login-box-body,.register-box-body{background:#fff;padding:20px;border-top:0;color:#666}.login-box-body .form-control-feedback,.register-box-body .form-control-feedback{color:#777}.login-box-msg,.register-box-msg{margin:0;text-align:center;padding:0 20px 20px 20px}.social-auth-links{margin:10px 0}.error-page{width:600px;margin:20px auto 0 auto}@media (max-width:991px){.error-page{width:100%}}.error-page>.headline{float:left;font-size:100px;font-weight:300}@media (max-width:991px){.error-page>.headline{float:none;text-align:center}}.error-page>.error-content{margin-left:190px;display:block}@media (max-width:991px){.error-page>.error-content{margin-left:0}}.error-page>.error-content>h3{font-weight:300;font-size:25px}@media (max-width:991px){.error-page>.error-content>h3{text-align:center}}.invoice{position:relative;background:#fff;border:1px solid #f4f4f4;padding:20px;margin:10px 25px}.invoice-title{margin-top:0}.profile-user-img{margin:0 auto;width:100px;padding:3px;border:3px solid #d2d6de}.profile-username{font-size:21px;margin-top:5px}.post{border-bottom:1px solid #d2d6de;margin-bottom:15px;padding-bottom:15px;color:#666}.post:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0}.post .user-block{margin-bottom:15px}.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon>:first-child{border:none;text-align:center;width:100%}.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0}.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0}.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0}.btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:focus,.btn-adn.focus{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:hover{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{background-image:none}.btn-adn .badge{color:#d87a68;background-color:#fff}.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:focus,.btn-bitbucket.focus{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{background-image:none}.btn-bitbucket .badge{color:#205081;background-color:#fff}.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:focus,.btn-dropbox.focus{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{background-image:none}.btn-dropbox .badge{color:#1087dd;background-color:#fff}.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{background-image:none}.btn-facebook .badge{color:#3b5998;background-color:#fff}.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:focus,.btn-flickr.focus{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{background-image:none}.btn-flickr .badge{color:#ff0084;background-color:#fff}.btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare:focus,.btn-foursquare.focus{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:hover{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{background-image:none}.btn-foursquare .badge{color:#f94877;background-color:#fff}.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:focus,.btn-github.focus{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:hover{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{background-image:none}.btn-github .badge{color:#444;background-color:#fff}.btn-google{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google:focus,.btn-google.focus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:hover{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{background-image:none}.btn-google .badge{color:#dd4b39;background-color:#fff}.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:focus,.btn-instagram.focus{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{background-image:none}.btn-instagram .badge{color:#3f729b;background-color:#fff}.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:focus,.btn-linkedin.focus{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{background-image:none}.btn-linkedin .badge{color:#007bb6;background-color:#fff}.btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:focus,.btn-microsoft.focus{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:hover{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{background-image:none}.btn-microsoft .badge{color:#2672ec;background-color:#fff}.btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:focus,.btn-openid.focus{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{background-image:none}.btn-openid .badge{color:#f7931e;background-color:#fff}.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:focus,.btn-pinterest.focus{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:hover{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{background-image:none}.btn-pinterest .badge{color:#cb2027;background-color:#fff}.btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:focus,.btn-reddit.focus{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:hover{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{background-image:none}.btn-reddit .badge{color:#eff7ff;background-color:#000}.btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:focus,.btn-soundcloud.focus{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:hover{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{background-image:none}.btn-soundcloud .badge{color:#f50;background-color:#fff}.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:focus,.btn-tumblr.focus{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{background-image:none}.btn-tumblr .badge{color:#2c4762;background-color:#fff}.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:focus,.btn-twitter.focus{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{background-image:none}.btn-twitter .badge{color:#55acee;background-color:#fff}.btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:focus,.btn-vimeo.focus{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:hover{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{background-image:none}.btn-vimeo .badge{color:#1ab7ea;background-color:#fff}.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:focus,.btn-vk.focus{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:hover{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{background-image:none}.btn-vk .badge{color:#587ea3;background-color:#fff}.btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:focus,.btn-yahoo.focus{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:hover{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{background-image:none}.btn-yahoo .badge{color:#720e9e;background-color:#fff}.fc-button{background:#f4f4f4;background-image:none;color:#444;border-color:#ddd;border-bottom-color:#ddd}.fc-button:hover,.fc-button:active,.fc-button.hover{background-color:#e9e9e9}.fc-header-title h2{font-size:15px;line-height:1.6em;color:#666;margin-left:10px}.fc-header-right{padding-right:10px}.fc-header-left{padding-left:10px}.fc-widget-header{background:#fafafa}.fc-grid{width:100%;border:0}.fc-widget-header:first-of-type,.fc-widget-content:first-of-type{border-left:0;border-right:0}.fc-widget-header:last-of-type,.fc-widget-content:last-of-type{border-right:0}.fc-toolbar{padding:10px;margin:0}.fc-day-number{font-size:20px;font-weight:300;padding-right:10px}.fc-color-picker{list-style:none;margin:0;padding:0}.fc-color-picker>li{float:left;font-size:30px;margin-right:5px;line-height:30px}.fc-color-picker>li .fa{-webkit-transition:-webkit-transform linear .3s;-moz-transition:-moz-transform linear .3s;-o-transition:-o-transform linear .3s;transition:transform linear .3s}.fc-color-picker>li .fa:hover{-webkit-transform:rotate(30deg);-ms-transform:rotate(30deg);-o-transform:rotate(30deg);transform:rotate(30deg)}#add-new-event{-webkit-transition:all linear .3s;-o-transition:all linear .3s;transition:all linear .3s}.external-event{padding:5px 10px;font-weight:bold;margin-bottom:4px;box-shadow:0 1px 1px rgba(0,0,0,0.1);text-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;cursor:move}.external-event:hover{box-shadow:inset 0 0 90px rgba(0,0,0,0.2)}.select2-container--default.select2-container--focus,.select2-selection.select2-container--focus,.select2-container--default:focus,.select2-selection:focus,.select2-container--default:active,.select2-selection:active{outline:none}.select2-container--default .select2-selection--single,.select2-selection .select2-selection--single{border:1px solid #d2d6de;border-radius:0;padding:6px 12px;height:34px}.select2-container--default.select2-container--open{border-color:#3c8dbc}.select2-dropdown{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#3c8dbc;color:white}.select2-results__option{padding:6px 12px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{padding-left:0;padding-right:0;height:auto;margin-top:-4px}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px}.select2-container--default .select2-selection--single .select2-selection__arrow{height:28px;right:3px}.select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0}.select2-dropdown .select2-search__field,.select2-search--inline .select2-search__field{border:1px solid #d2d6de}.select2-dropdown .select2-search__field:focus,.select2-search--inline .select2-search__field:focus{outline:none}.select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default .select2-search--dropdown .select2-search__field{border-color:#3c8dbc !important}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#444}.select2-container--default .select2-selection--multiple{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-selection--multiple:focus{border-color:#3c8dbc}.select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#d2d6de}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;padding:1px 10px;color:#fff}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{margin-right:5px;color:rgba(255,255,255,0.7)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container .select2-selection--single .select2-selection__rendered{padding-right:10px}.box .datepicker-inline,.box .datepicker-inline .datepicker-days,.box .datepicker-inline>table,.box .datepicker-inline .datepicker-days>table{width:100%}.box .datepicker-inline td:hover,.box .datepicker-inline .datepicker-days td:hover,.box .datepicker-inline>table td:hover,.box .datepicker-inline .datepicker-days>table td:hover{background-color:rgba(255,255,255,0.3)}.box .datepicker-inline td.day.old,.box .datepicker-inline .datepicker-days td.day.old,.box .datepicker-inline>table td.day.old,.box .datepicker-inline .datepicker-days>table td.day.old,.box .datepicker-inline td.day.new,.box .datepicker-inline .datepicker-days td.day.new,.box .datepicker-inline>table td.day.new,.box .datepicker-inline .datepicker-days>table td.day.new{color:#777}.pad{padding:10px}.margin{margin:10px}.margin-bottom{margin-bottom:20px}.margin-bottom-none{margin-bottom:0}.margin-r-5{margin-right:5px}.inline{display:inline}.description-block{display:block;margin:10px 0;text-align:center}.description-block.margin-bottom{margin-bottom:25px}.description-block>.description-header{margin:0;padding:0;font-weight:600;font-size:16px}.description-block>.description-text{text-transform:uppercase}.bg-red,.bg-yellow,.bg-aqua,.bg-blue,.bg-light-blue,.bg-green,.bg-navy,.bg-teal,.bg-olive,.bg-lime,.bg-orange,.bg-fuchsia,.bg-purple,.bg-maroon,.bg-black,.bg-red-active,.bg-yellow-active,.bg-aqua-active,.bg-blue-active,.bg-light-blue-active,.bg-green-active,.bg-navy-active,.bg-teal-active,.bg-olive-active,.bg-lime-active,.bg-orange-active,.bg-fuchsia-active,.bg-purple-active,.bg-maroon-active,.bg-black-active,.callout.callout-danger,.callout.callout-warning,.callout.callout-info,.callout.callout-success,.alert-success,.alert-danger,.alert-error,.alert-warning,.alert-info,.label-danger,.label-info,.label-warning,.label-primary,.label-success,.modal-primary .modal-body,.modal-primary .modal-header,.modal-primary .modal-footer,.modal-warning .modal-body,.modal-warning .modal-header,.modal-warning .modal-footer,.modal-info .modal-body,.modal-info .modal-header,.modal-info .modal-footer,.modal-success .modal-body,.modal-success .modal-header,.modal-success .modal-footer,.modal-danger .modal-body,.modal-danger .modal-header,.modal-danger .modal-footer{color:#fff !important}.bg-gray{color:#000;background-color:#d2d6de !important}.bg-gray-light{background-color:#f7f7f7}.bg-black{background-color:#111 !important}.bg-red,.callout.callout-danger,.alert-danger,.alert-error,.label-danger,.modal-danger .modal-body{background-color:#dd4b39 !important}.bg-yellow,.callout.callout-warning,.alert-warning,.label-warning,.modal-warning .modal-body{background-color:#f39c12 !important}.bg-aqua,.callout.callout-info,.alert-info,.label-info,.modal-info .modal-body{background-color:#00c0ef !important}.bg-blue{background-color:#0073b7 !important}.bg-light-blue,.label-primary,.modal-primary .modal-body{background-color:#3c8dbc !important}.bg-green,.callout.callout-success,.alert-success,.label-success,.modal-success .modal-body{background-color:#00a65a !important}.bg-navy{background-color:#001f3f !important}.bg-teal{background-color:#39cccc !important}.bg-olive{background-color:#3d9970 !important}.bg-lime{background-color:#01ff70 !important}.bg-orange{background-color:#ff851b !important}.bg-fuchsia{background-color:#f012be !important}.bg-purple{background-color:#605ca8 !important}.bg-maroon{background-color:#d81b60 !important}.bg-gray-active{color:#000;background-color:#b5bbc8 !important}.bg-black-active{background-color:#000 !important}.bg-red-active,.modal-danger .modal-header,.modal-danger .modal-footer{background-color:#d33724 !important}.bg-yellow-active,.modal-warning .modal-header,.modal-warning .modal-footer{background-color:#db8b0b !important}.bg-aqua-active,.modal-info .modal-header,.modal-info .modal-footer{background-color:#00a7d0 !important}.bg-blue-active{background-color:#005384 !important}.bg-light-blue-active,.modal-primary .modal-header,.modal-primary .modal-footer{background-color:#357ca5 !important}.bg-green-active,.modal-success .modal-header,.modal-success .modal-footer{background-color:#008d4c !important}.bg-navy-active{background-color:#001a35 !important}.bg-teal-active{background-color:#30bbbb !important}.bg-olive-active{background-color:#368763 !important}.bg-lime-active{background-color:#00e765 !important}.bg-orange-active{background-color:#ff7701 !important}.bg-fuchsia-active{background-color:#db0ead !important}.bg-purple-active{background-color:#555299 !important}.bg-maroon-active{background-color:#ca195a !important}[class^="bg-"].disabled{opacity:.65;filter:alpha(opacity=65)}.text-red{color:#dd4b39 !important}.text-yellow{color:#f39c12 !important}.text-aqua{color:#00c0ef !important}.text-blue{color:#0073b7 !important}.text-black{color:#111 !important}.text-light-blue{color:#3c8dbc !important}.text-green{color:#00a65a !important}.text-gray{color:#d2d6de !important}.text-navy{color:#001f3f !important}.text-teal{color:#39cccc !important}.text-olive{color:#3d9970 !important}.text-lime{color:#01ff70 !important}.text-orange{color:#ff851b !important}.text-fuchsia{color:#f012be !important}.text-purple{color:#605ca8 !important}.text-maroon{color:#d81b60 !important}.link-muted{color:#7a869d}.link-muted:hover,.link-muted:focus{color:#606c84}.link-black{color:#666}.link-black:hover,.link-black:focus{color:#999}.hide{display:none !important}.no-border{border:0 !important}.no-padding{padding:0 !important}.no-margin{margin:0 !important}.no-shadow{box-shadow:none !important}.list-unstyled,.chart-legend,.contacts-list,.users-list,.mailbox-attachments{list-style:none;margin:0;padding:0}.list-group-unbordered>.list-group-item{border-left:0;border-right:0;border-radius:0;padding-left:0;padding-right:0}.flat{border-radius:0 !important}.text-bold,.text-bold.table td,.text-bold.table th{font-weight:700}.text-sm{font-size:12px}.jqstooltip{padding:5px !important;width:auto !important;height:auto !important}.bg-teal-gradient{background:#39cccc !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #39cccc), color-stop(1, #7adddd)) !important;background:-ms-linear-gradient(bottom, #39cccc, #7adddd) !important;background:-moz-linear-gradient(center bottom, #39cccc 0, #7adddd 100%) !important;background:-o-linear-gradient(#7adddd, #39cccc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39cccc', GradientType=0) !important;color:#fff}.bg-light-blue-gradient{background:#3c8dbc !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #3c8dbc), color-stop(1, #67a8ce)) !important;background:-ms-linear-gradient(bottom, #3c8dbc, #67a8ce) !important;background:-moz-linear-gradient(center bottom, #3c8dbc 0, #67a8ce 100%) !important;background:-o-linear-gradient(#67a8ce, #3c8dbc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important;color:#fff}.bg-blue-gradient{background:#0073b7 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #0073b7), color-stop(1, #0089db)) !important;background:-ms-linear-gradient(bottom, #0073b7, #0089db) !important;background:-moz-linear-gradient(center bottom, #0073b7 0, #0089db 100%) !important;background:-o-linear-gradient(#0089db, #0073b7) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important;color:#fff}.bg-aqua-gradient{background:#00c0ef !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #00c0ef), color-stop(1, #14d1ff)) !important;background:-ms-linear-gradient(bottom, #00c0ef, #14d1ff) !important;background:-moz-linear-gradient(center bottom, #00c0ef 0, #14d1ff 100%) !important;background:-o-linear-gradient(#14d1ff, #00c0ef) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important;color:#fff}.bg-yellow-gradient{background:#f39c12 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #f39c12), color-stop(1, #f7bc60)) !important;background:-ms-linear-gradient(bottom, #f39c12, #f7bc60) !important;background:-moz-linear-gradient(center bottom, #f39c12 0, #f7bc60 100%) !important;background:-o-linear-gradient(#f7bc60, #f39c12) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important;color:#fff}.bg-purple-gradient{background:#605ca8 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #605ca8), color-stop(1, #9491c4)) !important;background:-ms-linear-gradient(bottom, #605ca8, #9491c4) !important;background:-moz-linear-gradient(center bottom, #605ca8 0, #9491c4 100%) !important;background:-o-linear-gradient(#9491c4, #605ca8) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important;color:#fff}.bg-green-gradient{background:#00a65a !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #00a65a), color-stop(1, #00ca6d)) !important;background:-ms-linear-gradient(bottom, #00a65a, #00ca6d) !important;background:-moz-linear-gradient(center bottom, #00a65a 0, #00ca6d 100%) !important;background:-o-linear-gradient(#00ca6d, #00a65a) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important;color:#fff}.bg-red-gradient{background:#dd4b39 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #dd4b39), color-stop(1, #e47365)) !important;background:-ms-linear-gradient(bottom, #dd4b39, #e47365) !important;background:-moz-linear-gradient(center bottom, #dd4b39 0, #e47365 100%) !important;background:-o-linear-gradient(#e47365, #dd4b39) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important;color:#fff}.bg-black-gradient{background:#111 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #111), color-stop(1, #2b2b2b)) !important;background:-ms-linear-gradient(bottom, #111, #2b2b2b) !important;background:-moz-linear-gradient(center bottom, #111 0, #2b2b2b 100%) !important;background:-o-linear-gradient(#2b2b2b, #111) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111111', GradientType=0) !important;color:#fff}.bg-maroon-gradient{background:#d81b60 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #d81b60), color-stop(1, #e73f7c)) !important;background:-ms-linear-gradient(bottom, #d81b60, #e73f7c) !important;background:-moz-linear-gradient(center bottom, #d81b60 0, #e73f7c 100%) !important;background:-o-linear-gradient(#e73f7c, #d81b60) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#d81b60', GradientType=0) !important;color:#fff}.description-block .description-icon{font-size:16px}.no-pad-top{padding-top:0}.position-static{position:static !important}.list-header{font-size:15px;padding:10px 4px;font-weight:bold;color:#666}.list-seperator{height:1px;background:#f4f4f4;margin:15px 0 9px 0}.list-link>a{padding:4px;color:#777}.list-link>a:hover{color:#222}.font-light{font-weight:300}.user-block:before,.user-block:after{content:" ";display:table}.user-block:after{clear:both}.user-block img{width:40px;height:40px;float:left}.user-block .username,.user-block .description,.user-block .comment{display:block;margin-left:50px}.user-block .username{font-size:16px;font-weight:600}.user-block .description{color:#999;font-size:13px}.user-block.user-block-sm .username,.user-block.user-block-sm .description,.user-block.user-block-sm .comment{margin-left:40px}.user-block.user-block-sm .username{font-size:14px}.img-sm,.img-md,.img-lg,.box-comments .box-comment img,.user-block.user-block-sm img{float:left}.img-sm,.box-comments .box-comment img,.user-block.user-block-sm img{width:30px !important;height:30px !important}.img-sm+.img-push{margin-left:40px}.img-md{width:60px;height:60px}.img-md+.img-push{margin-left:70px}.img-lg{width:100px;height:100px}.img-lg+.img-push{margin-left:110px}.img-bordered{border:3px solid #d2d6de;padding:3px}.img-bordered-sm{border:2px solid #d2d6de;padding:2px}.attachment-block{border:1px solid #f4f4f4;padding:5px;margin-bottom:10px;background:#f7f7f7}.attachment-block .attachment-img{max-width:100px;max-height:100px;height:auto;float:left}.attachment-block .attachment-pushed{margin-left:110px}.attachment-block .attachment-heading{margin:0}.attachment-block .attachment-text{color:#555}.connectedSortable{min-height:100px}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sort-highlight{background:#f4f4f4;border:1px dashed #ddd;margin-bottom:10px}.full-opacity-hover{opacity:.65;filter:alpha(opacity=65)}.full-opacity-hover:hover{opacity:1;filter:alpha(opacity=100)}.chart{position:relative;overflow:hidden;width:100%}.chart svg,.chart canvas{width:100% !important}@media print{.no-print,.main-sidebar,.left-side,.main-header,.content-header{display:none !important}.content-wrapper,.right-side,.main-footer{margin-left:0 !important;min-height:0 !important;-webkit-transform:translate(0, 0) !important;-ms-transform:translate(0, 0) !important;-o-transform:translate(0, 0) !important;transform:translate(0, 0) !important}.fixed .content-wrapper,.fixed .right-side{padding-top:0 !important}.invoice{width:100%;border:0;margin:0;padding:0}.invoice-col{float:left;width:33.3333333%}.table-responsive{overflow:auto}.table-responsive>.table tr th,.table-responsive>.table tr td{white-space:normal !important}} \ No newline at end of file diff --git a/src/main/resources/static/css/skins/_all-skins.css b/src/main/resources/static/halo-backend/css/skins/_all-skins.css old mode 100755 new mode 100644 similarity index 99% rename from src/main/resources/static/css/skins/_all-skins.css rename to src/main/resources/static/halo-backend/css/skins/_all-skins.css index 7ed56a3e5..3f40fab8b --- a/src/main/resources/static/css/skins/_all-skins.css +++ b/src/main/resources/static/halo-backend/css/skins/_all-skins.css @@ -354,23 +354,23 @@ border-left: 1px solid #eee; border-right-width: 0; } -.skin-black .main-header > .logo { +.skin-black .main-header .logo { background-color: #ffffff; color: #333333; border-bottom: 0 solid transparent; border-right: 1px solid #eee; } -.skin-black .main-header > .logo:hover { +.skin-black .main-header .logo:hover { background-color: #fcfcfc; } @media (max-width: 767px) { - .skin-black .main-header > .logo { + .skin-black .main-header .logo { background-color: #222222; color: #ffffff; border-bottom: 0 solid transparent; border-right: none; } - .skin-black .main-header > .logo:hover { + .skin-black .main-header .logo:hover { background-color: #1f1f1f; } } @@ -514,23 +514,23 @@ border-left: 1px solid #d2d6de; border-right-width: 0; } -.skin-black-light .main-header > .logo { +.skin-black-light .main-header .logo { background-color: #ffffff; color: #333333; border-bottom: 0 solid transparent; border-right: 1px solid #d2d6de; } -.skin-black-light .main-header > .logo:hover { +.skin-black-light .main-header .logo:hover { background-color: #fcfcfc; } @media (max-width: 767px) { - .skin-black-light .main-header > .logo { + .skin-black-light .main-header .logo { background-color: #222222; color: #ffffff; border-bottom: 0 solid transparent; border-right: none; } - .skin-black-light .main-header > .logo:hover { + .skin-black-light .main-header .logo:hover { background-color: #1f1f1f; } } diff --git a/src/main/resources/static/css/skins/_all-skins.min.css b/src/main/resources/static/halo-backend/css/skins/_all-skins.min.css old mode 100755 new mode 100644 similarity index 98% rename from src/main/resources/static/css/skins/_all-skins.min.css rename to src/main/resources/static/halo-backend/css/skins/_all-skins.min.css index c8e420e7d..dfd0f52e5 --- a/src/main/resources/static/css/skins/_all-skins.min.css +++ b/src/main/resources/static/halo-backend/css/skins/_all-skins.min.css @@ -1 +1 @@ -.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a,.skin-blue .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-blue .sidebar-menu>li.active>a{border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-blue .sidebar-menu .treeview-menu>li.active>a,.skin-blue .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header .navbar{background-color:#3c8dbc}.skin-blue-light .main-header .navbar .nav>li>a{color:#fff}.skin-blue-light .main-header .navbar .nav>li>a:hover,.skin-blue-light .main-header .navbar .nav>li>a:active,.skin-blue-light .main-header .navbar .nav>li>a:focus,.skin-blue-light .main-header .navbar .nav .open>a,.skin-blue-light .main-header .navbar .nav .open>a:hover,.skin-blue-light .main-header .navbar .nav .open>a:focus,.skin-blue-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue-light .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue-light .main-header .logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue-light .main-header .logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header li.user-header{background-color:#3c8dbc}.skin-blue-light .content-header{background:transparent}.skin-blue-light .wrapper,.skin-blue-light .main-sidebar,.skin-blue-light .left-side{background-color:#f9fafc}.skin-blue-light .main-sidebar{border-right:1px solid #d2d6de}.skin-blue-light .user-panel>.info,.skin-blue-light .user-panel>.info>a{color:#444}.skin-blue-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-blue-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-blue-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-blue-light .sidebar-menu>li:hover>a,.skin-blue-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-blue-light .sidebar-menu>li.active{border-left-color:#3c8dbc}.skin-blue-light .sidebar-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-blue-light .sidebar a{color:#444}.skin-blue-light .sidebar a:hover{text-decoration:none}.skin-blue-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a,.skin-blue-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-blue-light .sidebar-form input[type="text"],.skin-blue-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-blue-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue-light .sidebar-form input[type="text"]:focus,.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-blue-light .main-footer{border-top-color:#d2d6de}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-black .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black .main-header .navbar-toggle{color:#333}.skin-black .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar{background-color:#fff}.skin-black .main-header .navbar .nav>li>a{color:#333}.skin-black .main-header .navbar .nav>li>a:hover,.skin-black .main-header .navbar .nav>li>a:active,.skin-black .main-header .navbar .nav>li>a:focus,.skin-black .main-header .navbar .nav .open>a,.skin-black .main-header .navbar .nav .open>a:hover,.skin-black .main-header .navbar .nav .open>a:focus,.skin-black .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black .main-header .navbar .sidebar-toggle{color:#333}.skin-black .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black .main-header .navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black .main-header li.user-header{background-color:#222}.skin-black .content-header{background:transparent;box-shadow:none}.skin-black .wrapper,.skin-black .main-sidebar,.skin-black .left-side{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li:hover>a,.skin-black .sidebar-menu>li.active>a,.skin-black .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-black .sidebar-menu>li.active>a{border-left-color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-black .sidebar-menu .treeview-menu>li.active>a,.skin-black .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-black .sidebar-form input[type="text"],.skin-black .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-black .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black .sidebar-form input[type="text"]:focus,.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-black .pace .pace-progress{background:#222}.skin-black .pace .pace-activity{border-top-color:#222;border-left-color:#222}.skin-black-light .main-header{border-bottom:1px solid #d2d6de}.skin-black-light .main-header .navbar-toggle{color:#333}.skin-black-light .main-header .navbar-brand{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar{background-color:#fff}.skin-black-light .main-header .navbar .nav>li>a{color:#333}.skin-black-light .main-header .navbar .nav>li>a:hover,.skin-black-light .main-header .navbar .nav>li>a:active,.skin-black-light .main-header .navbar .nav>li>a:focus,.skin-black-light .main-header .navbar .nav .open>a,.skin-black-light .main-header .navbar .nav .open>a:hover,.skin-black-light .main-header .navbar .nav .open>a:focus,.skin-black-light .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black-light .main-header .navbar .sidebar-toggle{color:#333}.skin-black-light .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black-light .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-nav>li>a{border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black-light .main-header .navbar .navbar-right>li>a{border-left:1px solid #d2d6de;border-right-width:0}.skin-black-light .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #d2d6de}.skin-black-light .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black-light .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black-light .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black-light .main-header li.user-header{background-color:#222}.skin-black-light .content-header{background:transparent;box-shadow:none}.skin-black-light .wrapper,.skin-black-light .main-sidebar,.skin-black-light .left-side{background-color:#f9fafc}.skin-black-light .main-sidebar{border-right:1px solid #d2d6de}.skin-black-light .user-panel>.info,.skin-black-light .user-panel>.info>a{color:#444}.skin-black-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-black-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-black-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-black-light .sidebar-menu>li:hover>a,.skin-black-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-black-light .sidebar-menu>li.active{border-left-color:#fff}.skin-black-light .sidebar-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-black-light .sidebar a{color:#444}.skin-black-light .sidebar a:hover{text-decoration:none}.skin-black-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-black-light .sidebar-menu .treeview-menu>li.active>a,.skin-black-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-black-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-black-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black-light .sidebar-form input[type="text"]:focus,.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header .logo{background-color:#008d4c;color:#fff;border-bottom:0 solid transparent}.skin-green .main-header .logo:hover{background-color:#008749}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .wrapper,.skin-green .main-sidebar,.skin-green .left-side{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li:hover>a,.skin-green .sidebar-menu>li.active>a,.skin-green .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-green .sidebar-menu>li.active>a{border-left-color:#00a65a}.skin-green .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-green .sidebar-menu .treeview-menu>li.active>a,.skin-green .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-green .sidebar-form input[type="text"],.skin-green .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-green .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green .sidebar-form input[type="text"]:focus,.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-green-light .main-header .navbar{background-color:#00a65a}.skin-green-light .main-header .navbar .nav>li>a{color:#fff}.skin-green-light .main-header .navbar .nav>li>a:hover,.skin-green-light .main-header .navbar .nav>li>a:active,.skin-green-light .main-header .navbar .nav>li>a:focus,.skin-green-light .main-header .navbar .nav .open>a,.skin-green-light .main-header .navbar .nav .open>a:hover,.skin-green-light .main-header .navbar .nav .open>a:focus,.skin-green-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green-light .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green-light .main-header .logo{background-color:#00a65a;color:#fff;border-bottom:0 solid transparent}.skin-green-light .main-header .logo:hover{background-color:#00a157}.skin-green-light .main-header li.user-header{background-color:#00a65a}.skin-green-light .content-header{background:transparent}.skin-green-light .wrapper,.skin-green-light .main-sidebar,.skin-green-light .left-side{background-color:#f9fafc}.skin-green-light .main-sidebar{border-right:1px solid #d2d6de}.skin-green-light .user-panel>.info,.skin-green-light .user-panel>.info>a{color:#444}.skin-green-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-green-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-green-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-green-light .sidebar-menu>li:hover>a,.skin-green-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-green-light .sidebar-menu>li.active{border-left-color:#00a65a}.skin-green-light .sidebar-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-green-light .sidebar a{color:#444}.skin-green-light .sidebar a:hover{text-decoration:none}.skin-green-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-green-light .sidebar-menu .treeview-menu>li.active>a,.skin-green-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-green-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-green-light .sidebar-form input[type="text"],.skin-green-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-green-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green-light .sidebar-form input[type="text"]:focus,.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header .logo{background-color:#d73925;color:#fff;border-bottom:0 solid transparent}.skin-red .main-header .logo:hover{background-color:#d33724}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:transparent}.skin-red .wrapper,.skin-red .main-sidebar,.skin-red .left-side{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li:hover>a,.skin-red .sidebar-menu>li.active>a,.skin-red .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-red .sidebar-menu>li.active>a{border-left-color:#dd4b39}.skin-red .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-red .sidebar-menu .treeview-menu>li.active>a,.skin-red .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-red .sidebar-form input[type="text"],.skin-red .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-red .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red .sidebar-form input[type="text"]:focus,.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-red-light .main-header .navbar{background-color:#dd4b39}.skin-red-light .main-header .navbar .nav>li>a{color:#fff}.skin-red-light .main-header .navbar .nav>li>a:hover,.skin-red-light .main-header .navbar .nav>li>a:active,.skin-red-light .main-header .navbar .nav>li>a:focus,.skin-red-light .main-header .navbar .nav .open>a,.skin-red-light .main-header .navbar .nav .open>a:hover,.skin-red-light .main-header .navbar .nav .open>a:focus,.skin-red-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red-light .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red-light .main-header .logo{background-color:#dd4b39;color:#fff;border-bottom:0 solid transparent}.skin-red-light .main-header .logo:hover{background-color:#dc4735}.skin-red-light .main-header li.user-header{background-color:#dd4b39}.skin-red-light .content-header{background:transparent}.skin-red-light .wrapper,.skin-red-light .main-sidebar,.skin-red-light .left-side{background-color:#f9fafc}.skin-red-light .main-sidebar{border-right:1px solid #d2d6de}.skin-red-light .user-panel>.info,.skin-red-light .user-panel>.info>a{color:#444}.skin-red-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-red-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-red-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-red-light .sidebar-menu>li:hover>a,.skin-red-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-red-light .sidebar-menu>li.active{border-left-color:#dd4b39}.skin-red-light .sidebar-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-red-light .sidebar a{color:#444}.skin-red-light .sidebar a:hover{text-decoration:none}.skin-red-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-red-light .sidebar-menu .treeview-menu>li.active>a,.skin-red-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-red-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-red-light .sidebar-form input[type="text"],.skin-red-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-red-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red-light .sidebar-form input[type="text"]:focus,.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-yellow .main-header .navbar{background-color:#f39c12}.skin-yellow .main-header .navbar .nav>li>a{color:#fff}.skin-yellow .main-header .navbar .nav>li>a:hover,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow .main-header .logo{background-color:#e08e0b;color:#fff;border-bottom:0 solid transparent}.skin-yellow .main-header .logo:hover{background-color:#db8b0b}.skin-yellow .main-header li.user-header{background-color:#f39c12}.skin-yellow .content-header{background:transparent}.skin-yellow .wrapper,.skin-yellow .main-sidebar,.skin-yellow .left-side{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li:hover>a,.skin-yellow .sidebar-menu>li.active>a,.skin-yellow .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-yellow .sidebar-menu>li.active>a{border-left-color:#f39c12}.skin-yellow .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-yellow .sidebar-menu .treeview-menu>li.active>a,.skin-yellow .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-yellow .sidebar-form input[type="text"],.skin-yellow .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-yellow .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow .sidebar-form input[type="text"]:focus,.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-yellow-light .main-header .navbar{background-color:#f39c12}.skin-yellow-light .main-header .navbar .nav>li>a{color:#fff}.skin-yellow-light .main-header .navbar .nav>li>a:hover,.skin-yellow-light .main-header .navbar .nav>li>a:active,.skin-yellow-light .main-header .navbar .nav>li>a:focus,.skin-yellow-light .main-header .navbar .nav .open>a,.skin-yellow-light .main-header .navbar .nav .open>a:hover,.skin-yellow-light .main-header .navbar .nav .open>a:focus,.skin-yellow-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow-light .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow-light .main-header .logo{background-color:#f39c12;color:#fff;border-bottom:0 solid transparent}.skin-yellow-light .main-header .logo:hover{background-color:#f39a0d}.skin-yellow-light .main-header li.user-header{background-color:#f39c12}.skin-yellow-light .content-header{background:transparent}.skin-yellow-light .wrapper,.skin-yellow-light .main-sidebar,.skin-yellow-light .left-side{background-color:#f9fafc}.skin-yellow-light .main-sidebar{border-right:1px solid #d2d6de}.skin-yellow-light .user-panel>.info,.skin-yellow-light .user-panel>.info>a{color:#444}.skin-yellow-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-yellow-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-yellow-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-yellow-light .sidebar-menu>li:hover>a,.skin-yellow-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-yellow-light .sidebar-menu>li.active{border-left-color:#f39c12}.skin-yellow-light .sidebar-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-yellow-light .sidebar a{color:#444}.skin-yellow-light .sidebar a:hover{text-decoration:none}.skin-yellow-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a,.skin-yellow-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-yellow-light .sidebar-form input[type="text"],.skin-yellow-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-yellow-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow-light .sidebar-form input[type="text"]:focus,.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header .logo{background-color:#555299;color:#fff;border-bottom:0 solid transparent}.skin-purple .main-header .logo:hover{background-color:#545096}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:transparent}.skin-purple .wrapper,.skin-purple .main-sidebar,.skin-purple .left-side{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li:hover>a,.skin-purple .sidebar-menu>li.active>a,.skin-purple .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-purple .sidebar-menu>li.active>a{border-left-color:#605ca8}.skin-purple .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-purple .sidebar-menu .treeview-menu>li.active>a,.skin-purple .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-purple .sidebar-form input[type="text"],.skin-purple .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-purple .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple .sidebar-form input[type="text"]:focus,.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-purple-light .main-header .navbar{background-color:#605ca8}.skin-purple-light .main-header .navbar .nav>li>a{color:#fff}.skin-purple-light .main-header .navbar .nav>li>a:hover,.skin-purple-light .main-header .navbar .nav>li>a:active,.skin-purple-light .main-header .navbar .nav>li>a:focus,.skin-purple-light .main-header .navbar .nav .open>a,.skin-purple-light .main-header .navbar .nav .open>a:hover,.skin-purple-light .main-header .navbar .nav .open>a:focus,.skin-purple-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple-light .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple-light .main-header .logo{background-color:#605ca8;color:#fff;border-bottom:0 solid transparent}.skin-purple-light .main-header .logo:hover{background-color:#5d59a6}.skin-purple-light .main-header li.user-header{background-color:#605ca8}.skin-purple-light .content-header{background:transparent}.skin-purple-light .wrapper,.skin-purple-light .main-sidebar,.skin-purple-light .left-side{background-color:#f9fafc}.skin-purple-light .main-sidebar{border-right:1px solid #d2d6de}.skin-purple-light .user-panel>.info,.skin-purple-light .user-panel>.info>a{color:#444}.skin-purple-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-purple-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-purple-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-purple-light .sidebar-menu>li:hover>a,.skin-purple-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-purple-light .sidebar-menu>li.active{border-left-color:#605ca8}.skin-purple-light .sidebar-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-purple-light .sidebar a{color:#444}.skin-purple-light .sidebar a:hover{text-decoration:none}.skin-purple-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a,.skin-purple-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-purple-light .sidebar-form input[type="text"],.skin-purple-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-purple-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple-light .sidebar-form input[type="text"]:focus,.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} \ No newline at end of file +.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a,.skin-blue .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-blue .sidebar-menu>li.active>a{border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-blue .sidebar-menu .treeview-menu>li.active>a,.skin-blue .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header .navbar{background-color:#3c8dbc}.skin-blue-light .main-header .navbar .nav>li>a{color:#fff}.skin-blue-light .main-header .navbar .nav>li>a:hover,.skin-blue-light .main-header .navbar .nav>li>a:active,.skin-blue-light .main-header .navbar .nav>li>a:focus,.skin-blue-light .main-header .navbar .nav .open>a,.skin-blue-light .main-header .navbar .nav .open>a:hover,.skin-blue-light .main-header .navbar .nav .open>a:focus,.skin-blue-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue-light .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue-light .main-header .logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue-light .main-header .logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header li.user-header{background-color:#3c8dbc}.skin-blue-light .content-header{background:transparent}.skin-blue-light .wrapper,.skin-blue-light .main-sidebar,.skin-blue-light .left-side{background-color:#f9fafc}.skin-blue-light .main-sidebar{border-right:1px solid #d2d6de}.skin-blue-light .user-panel>.info,.skin-blue-light .user-panel>.info>a{color:#444}.skin-blue-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-blue-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-blue-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-blue-light .sidebar-menu>li:hover>a,.skin-blue-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-blue-light .sidebar-menu>li.active{border-left-color:#3c8dbc}.skin-blue-light .sidebar-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-blue-light .sidebar a{color:#444}.skin-blue-light .sidebar a:hover{text-decoration:none}.skin-blue-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a,.skin-blue-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-blue-light .sidebar-form input[type="text"],.skin-blue-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-blue-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue-light .sidebar-form input[type="text"]:focus,.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-blue-light .main-footer{border-top-color:#d2d6de}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-black .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black .main-header .navbar-toggle{color:#333}.skin-black .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar{background-color:#fff}.skin-black .main-header .navbar .nav>li>a{color:#333}.skin-black .main-header .navbar .nav>li>a:hover,.skin-black .main-header .navbar .nav>li>a:active,.skin-black .main-header .navbar .nav>li>a:focus,.skin-black .main-header .navbar .nav .open>a,.skin-black .main-header .navbar .nav .open>a:hover,.skin-black .main-header .navbar .nav .open>a:focus,.skin-black .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black .main-header .navbar .sidebar-toggle{color:#333}.skin-black .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black .main-header .navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black .main-header .logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black .main-header .logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black .main-header .logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black .main-header .logo:hover{background-color:#1f1f1f}}.skin-black .main-header li.user-header{background-color:#222}.skin-black .content-header{background:transparent;box-shadow:none}.skin-black .wrapper,.skin-black .main-sidebar,.skin-black .left-side{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li:hover>a,.skin-black .sidebar-menu>li.active>a,.skin-black .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-black .sidebar-menu>li.active>a{border-left-color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-black .sidebar-menu .treeview-menu>li.active>a,.skin-black .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-black .sidebar-form input[type="text"],.skin-black .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-black .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black .sidebar-form input[type="text"]:focus,.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-black .pace .pace-progress{background:#222}.skin-black .pace .pace-activity{border-top-color:#222;border-left-color:#222}.skin-black-light .main-header{border-bottom:1px solid #d2d6de}.skin-black-light .main-header .navbar-toggle{color:#333}.skin-black-light .main-header .navbar-brand{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar{background-color:#fff}.skin-black-light .main-header .navbar .nav>li>a{color:#333}.skin-black-light .main-header .navbar .nav>li>a:hover,.skin-black-light .main-header .navbar .nav>li>a:active,.skin-black-light .main-header .navbar .nav>li>a:focus,.skin-black-light .main-header .navbar .nav .open>a,.skin-black-light .main-header .navbar .nav .open>a:hover,.skin-black-light .main-header .navbar .nav .open>a:focus,.skin-black-light .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black-light .main-header .navbar .sidebar-toggle{color:#333}.skin-black-light .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black-light .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-nav>li>a{border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black-light .main-header .navbar .navbar-right>li>a{border-left:1px solid #d2d6de;border-right-width:0}.skin-black-light .main-header .logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #d2d6de}.skin-black-light .main-header .logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black-light .main-header .logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black-light .main-header .logo:hover{background-color:#1f1f1f}}.skin-black-light .main-header li.user-header{background-color:#222}.skin-black-light .content-header{background:transparent;box-shadow:none}.skin-black-light .wrapper,.skin-black-light .main-sidebar,.skin-black-light .left-side{background-color:#f9fafc}.skin-black-light .main-sidebar{border-right:1px solid #d2d6de}.skin-black-light .user-panel>.info,.skin-black-light .user-panel>.info>a{color:#444}.skin-black-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-black-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-black-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-black-light .sidebar-menu>li:hover>a,.skin-black-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-black-light .sidebar-menu>li.active{border-left-color:#fff}.skin-black-light .sidebar-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-black-light .sidebar a{color:#444}.skin-black-light .sidebar a:hover{text-decoration:none}.skin-black-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-black-light .sidebar-menu .treeview-menu>li.active>a,.skin-black-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-black-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-black-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black-light .sidebar-form input[type="text"]:focus,.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header .logo{background-color:#008d4c;color:#fff;border-bottom:0 solid transparent}.skin-green .main-header .logo:hover{background-color:#008749}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .wrapper,.skin-green .main-sidebar,.skin-green .left-side{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li:hover>a,.skin-green .sidebar-menu>li.active>a,.skin-green .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-green .sidebar-menu>li.active>a{border-left-color:#00a65a}.skin-green .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-green .sidebar-menu .treeview-menu>li.active>a,.skin-green .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-green .sidebar-form input[type="text"],.skin-green .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-green .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green .sidebar-form input[type="text"]:focus,.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-green-light .main-header .navbar{background-color:#00a65a}.skin-green-light .main-header .navbar .nav>li>a{color:#fff}.skin-green-light .main-header .navbar .nav>li>a:hover,.skin-green-light .main-header .navbar .nav>li>a:active,.skin-green-light .main-header .navbar .nav>li>a:focus,.skin-green-light .main-header .navbar .nav .open>a,.skin-green-light .main-header .navbar .nav .open>a:hover,.skin-green-light .main-header .navbar .nav .open>a:focus,.skin-green-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green-light .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green-light .main-header .logo{background-color:#00a65a;color:#fff;border-bottom:0 solid transparent}.skin-green-light .main-header .logo:hover{background-color:#00a157}.skin-green-light .main-header li.user-header{background-color:#00a65a}.skin-green-light .content-header{background:transparent}.skin-green-light .wrapper,.skin-green-light .main-sidebar,.skin-green-light .left-side{background-color:#f9fafc}.skin-green-light .main-sidebar{border-right:1px solid #d2d6de}.skin-green-light .user-panel>.info,.skin-green-light .user-panel>.info>a{color:#444}.skin-green-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-green-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-green-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-green-light .sidebar-menu>li:hover>a,.skin-green-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-green-light .sidebar-menu>li.active{border-left-color:#00a65a}.skin-green-light .sidebar-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-green-light .sidebar a{color:#444}.skin-green-light .sidebar a:hover{text-decoration:none}.skin-green-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-green-light .sidebar-menu .treeview-menu>li.active>a,.skin-green-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-green-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-green-light .sidebar-form input[type="text"],.skin-green-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-green-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green-light .sidebar-form input[type="text"]:focus,.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header .logo{background-color:#d73925;color:#fff;border-bottom:0 solid transparent}.skin-red .main-header .logo:hover{background-color:#d33724}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:transparent}.skin-red .wrapper,.skin-red .main-sidebar,.skin-red .left-side{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li:hover>a,.skin-red .sidebar-menu>li.active>a,.skin-red .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-red .sidebar-menu>li.active>a{border-left-color:#dd4b39}.skin-red .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-red .sidebar-menu .treeview-menu>li.active>a,.skin-red .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-red .sidebar-form input[type="text"],.skin-red .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-red .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red .sidebar-form input[type="text"]:focus,.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-red-light .main-header .navbar{background-color:#dd4b39}.skin-red-light .main-header .navbar .nav>li>a{color:#fff}.skin-red-light .main-header .navbar .nav>li>a:hover,.skin-red-light .main-header .navbar .nav>li>a:active,.skin-red-light .main-header .navbar .nav>li>a:focus,.skin-red-light .main-header .navbar .nav .open>a,.skin-red-light .main-header .navbar .nav .open>a:hover,.skin-red-light .main-header .navbar .nav .open>a:focus,.skin-red-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red-light .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red-light .main-header .logo{background-color:#dd4b39;color:#fff;border-bottom:0 solid transparent}.skin-red-light .main-header .logo:hover{background-color:#dc4735}.skin-red-light .main-header li.user-header{background-color:#dd4b39}.skin-red-light .content-header{background:transparent}.skin-red-light .wrapper,.skin-red-light .main-sidebar,.skin-red-light .left-side{background-color:#f9fafc}.skin-red-light .main-sidebar{border-right:1px solid #d2d6de}.skin-red-light .user-panel>.info,.skin-red-light .user-panel>.info>a{color:#444}.skin-red-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-red-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-red-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-red-light .sidebar-menu>li:hover>a,.skin-red-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-red-light .sidebar-menu>li.active{border-left-color:#dd4b39}.skin-red-light .sidebar-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-red-light .sidebar a{color:#444}.skin-red-light .sidebar a:hover{text-decoration:none}.skin-red-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-red-light .sidebar-menu .treeview-menu>li.active>a,.skin-red-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-red-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-red-light .sidebar-form input[type="text"],.skin-red-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-red-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red-light .sidebar-form input[type="text"]:focus,.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-yellow .main-header .navbar{background-color:#f39c12}.skin-yellow .main-header .navbar .nav>li>a{color:#fff}.skin-yellow .main-header .navbar .nav>li>a:hover,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow .main-header .logo{background-color:#e08e0b;color:#fff;border-bottom:0 solid transparent}.skin-yellow .main-header .logo:hover{background-color:#db8b0b}.skin-yellow .main-header li.user-header{background-color:#f39c12}.skin-yellow .content-header{background:transparent}.skin-yellow .wrapper,.skin-yellow .main-sidebar,.skin-yellow .left-side{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li:hover>a,.skin-yellow .sidebar-menu>li.active>a,.skin-yellow .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-yellow .sidebar-menu>li.active>a{border-left-color:#f39c12}.skin-yellow .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-yellow .sidebar-menu .treeview-menu>li.active>a,.skin-yellow .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-yellow .sidebar-form input[type="text"],.skin-yellow .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-yellow .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow .sidebar-form input[type="text"]:focus,.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-yellow-light .main-header .navbar{background-color:#f39c12}.skin-yellow-light .main-header .navbar .nav>li>a{color:#fff}.skin-yellow-light .main-header .navbar .nav>li>a:hover,.skin-yellow-light .main-header .navbar .nav>li>a:active,.skin-yellow-light .main-header .navbar .nav>li>a:focus,.skin-yellow-light .main-header .navbar .nav .open>a,.skin-yellow-light .main-header .navbar .nav .open>a:hover,.skin-yellow-light .main-header .navbar .nav .open>a:focus,.skin-yellow-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow-light .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow-light .main-header .logo{background-color:#f39c12;color:#fff;border-bottom:0 solid transparent}.skin-yellow-light .main-header .logo:hover{background-color:#f39a0d}.skin-yellow-light .main-header li.user-header{background-color:#f39c12}.skin-yellow-light .content-header{background:transparent}.skin-yellow-light .wrapper,.skin-yellow-light .main-sidebar,.skin-yellow-light .left-side{background-color:#f9fafc}.skin-yellow-light .main-sidebar{border-right:1px solid #d2d6de}.skin-yellow-light .user-panel>.info,.skin-yellow-light .user-panel>.info>a{color:#444}.skin-yellow-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-yellow-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-yellow-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-yellow-light .sidebar-menu>li:hover>a,.skin-yellow-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-yellow-light .sidebar-menu>li.active{border-left-color:#f39c12}.skin-yellow-light .sidebar-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-yellow-light .sidebar a{color:#444}.skin-yellow-light .sidebar a:hover{text-decoration:none}.skin-yellow-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a,.skin-yellow-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-yellow-light .sidebar-form input[type="text"],.skin-yellow-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-yellow-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow-light .sidebar-form input[type="text"]:focus,.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header .logo{background-color:#555299;color:#fff;border-bottom:0 solid transparent}.skin-purple .main-header .logo:hover{background-color:#545096}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:transparent}.skin-purple .wrapper,.skin-purple .main-sidebar,.skin-purple .left-side{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li:hover>a,.skin-purple .sidebar-menu>li.active>a,.skin-purple .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-purple .sidebar-menu>li.active>a{border-left-color:#605ca8}.skin-purple .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-purple .sidebar-menu .treeview-menu>li.active>a,.skin-purple .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-purple .sidebar-form input[type="text"],.skin-purple .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-purple .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple .sidebar-form input[type="text"]:focus,.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-purple-light .main-header .navbar{background-color:#605ca8}.skin-purple-light .main-header .navbar .nav>li>a{color:#fff}.skin-purple-light .main-header .navbar .nav>li>a:hover,.skin-purple-light .main-header .navbar .nav>li>a:active,.skin-purple-light .main-header .navbar .nav>li>a:focus,.skin-purple-light .main-header .navbar .nav .open>a,.skin-purple-light .main-header .navbar .nav .open>a:hover,.skin-purple-light .main-header .navbar .nav .open>a:focus,.skin-purple-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple-light .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple-light .main-header .logo{background-color:#605ca8;color:#fff;border-bottom:0 solid transparent}.skin-purple-light .main-header .logo:hover{background-color:#5d59a6}.skin-purple-light .main-header li.user-header{background-color:#605ca8}.skin-purple-light .content-header{background:transparent}.skin-purple-light .wrapper,.skin-purple-light .main-sidebar,.skin-purple-light .left-side{background-color:#f9fafc}.skin-purple-light .main-sidebar{border-right:1px solid #d2d6de}.skin-purple-light .user-panel>.info,.skin-purple-light .user-panel>.info>a{color:#444}.skin-purple-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-purple-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-purple-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-purple-light .sidebar-menu>li:hover>a,.skin-purple-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-purple-light .sidebar-menu>li.active{border-left-color:#605ca8}.skin-purple-light .sidebar-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-purple-light .sidebar a{color:#444}.skin-purple-light .sidebar a:hover{text-decoration:none}.skin-purple-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a,.skin-purple-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-purple-light .sidebar-form input[type="text"],.skin-purple-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-purple-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple-light .sidebar-form input[type="text"]:focus,.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} \ No newline at end of file diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/halo-backend/css/style.css similarity index 83% rename from src/main/resources/static/css/style.css rename to src/main/resources/static/halo-backend/css/style.css index 678f85109..0f81e1a45 100644 --- a/src/main/resources/static/css/style.css +++ b/src/main/resources/static/halo-backend/css/style.css @@ -137,6 +137,7 @@ color: #fff } +/** data table */ .table-responsive { border: none !important; } @@ -148,3 +149,27 @@ .box { border-top: none !important; } + +/** form */ +.form-horizontal .control-label { + text-align: left!important; +} + +/** radio */ +.control-radio { + padding-top: 7px!important; +} + +/** editor */ +.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word) { + background: none!important; +} +.CodeMirror-fullscreen,.editor-toolbar.fullscreen{ + z-index: 1030!important; +} +.CodeMirror, .CodeMirror-scroll { + min-height: 480px!important; +} +.editor-preview-active img,.editor-preview-active-side img{ + width: 100%!important; +} diff --git a/src/main/resources/static/css/style.min.css b/src/main/resources/static/halo-backend/css/style.min.css similarity index 81% rename from src/main/resources/static/css/style.min.css rename to src/main/resources/static/halo-backend/css/style.min.css index b616a03bf..0d6ab641d 100644 --- a/src/main/resources/static/css/style.min.css +++ b/src/main/resources/static/halo-backend/css/style.min.css @@ -1 +1 @@ -.skin-blue .box.box-primary{border-top-color:#fff}.skin-blue .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-blue-light .box.box-primary{border-top-color:#fff}.skin-blue-light .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-black .box.box-primary{border-top-color:#fff}.skin-black .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-black-light .box.box-primary{border-top-color:#fff}.skin-black-light .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-green .box.box-primary{border-top-color:#fff}.skin-green .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-green-light .box.box-primary{border-top-color:#fff}.skin-green-light .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-purple .box.box-primary{border-top-color:#fff}.skin-purple .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-purple-light .box.box-primary{border-top-color:#fff}.skin-purple-light .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-red .box.box-primary{border-top-color:#fff}.skin-red .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-red-light .box.box-primary{border-top-color:#fff}.skin-red-light .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-yellow .box.box-primary{border-top-color:#fff}.skin-yellow .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-yellow-light .box.box-primary{border-top-color:#fff}.skin-yellow-light .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.layout-boxed{background:url('../images/boxed-bg.jpg') repeat fixed}::-webkit-scrollbar{width:2px;height:2px;background-color:#eee}::-webkit-scrollbar-thumb{background-color:#d0afaf}::-webkit-scrollbar-track{background-color:#eee}.btn-header{margin-left:4px;padding:3px 6px;position:relative;top:-4px;border:1px solid #ccc;border-radius:2px;background:#fff;text-shadow:none;font-weight:600;font-size:12px;line-height:normal;color:#3c8dbc;cursor:pointer;transition:all .2s ease-in-out}.btn-header:hover{background:#3c8dbc;color:#fff}.table-responsive{border:none!important}.table-bordered{border:none!important}.box{border-top:none!important} \ No newline at end of file +.skin-blue .box.box-primary{border-top-color:#fff}.skin-blue .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-blue-light .box.box-primary{border-top-color:#fff}.skin-blue-light .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-black .box.box-primary{border-top-color:#fff}.skin-black .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-black-light .box.box-primary{border-top-color:#fff}.skin-black-light .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-green .box.box-primary{border-top-color:#fff}.skin-green .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-green-light .box.box-primary{border-top-color:#fff}.skin-green-light .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-purple .box.box-primary{border-top-color:#fff}.skin-purple .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-purple-light .box.box-primary{border-top-color:#fff}.skin-purple-light .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-red .box.box-primary{border-top-color:#fff}.skin-red .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-red-light .box.box-primary{border-top-color:#fff}.skin-red-light .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-yellow .box.box-primary{border-top-color:#fff}.skin-yellow .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.skin-yellow-light .box.box-primary{border-top-color:#fff}.skin-yellow-light .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#fff}.layout-boxed{background:url('../images/boxed-bg.jpg') repeat fixed}::-webkit-scrollbar{width:2px;height:2px;background-color:#eee}::-webkit-scrollbar-thumb{background-color:#d0afaf}::-webkit-scrollbar-track{background-color:#eee}.btn-header{margin-left:4px;padding:3px 6px;position:relative;top:-4px;border:1px solid #ccc;border-radius:2px;background:#fff;text-shadow:none;font-weight:600;font-size:12px;line-height:normal;color:#3c8dbc;cursor:pointer;transition:all .2s ease-in-out}.btn-header:hover{background:#3c8dbc;color:#fff}.table-responsive{border:none!important}.table-bordered{border:none!important}.box{border-top:none!important}.form-horizontal .control-label{text-align:left!important}.control-radio{padding-top:7px!important}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:none!important}.CodeMirror-fullscreen,.editor-toolbar.fullscreen{z-index:1030!important}.CodeMirror,.CodeMirror-scroll{min-height:480px!important}.editor-preview-active img,.editor-preview-active-side img{width:100%!important} \ No newline at end of file diff --git a/src/main/resources/static/images/boxed-bg.jpg b/src/main/resources/static/halo-backend/images/boxed-bg.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/images/boxed-bg.jpg rename to src/main/resources/static/halo-backend/images/boxed-bg.jpg diff --git a/src/main/resources/static/images/boxed-bg.png b/src/main/resources/static/halo-backend/images/boxed-bg.png old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/images/boxed-bg.png rename to src/main/resources/static/halo-backend/images/boxed-bg.png diff --git a/src/main/resources/static/images/default.png b/src/main/resources/static/halo-backend/images/default.png similarity index 100% rename from src/main/resources/static/images/default.png rename to src/main/resources/static/halo-backend/images/default.png diff --git a/src/main/resources/static/images/favicon.ico b/src/main/resources/static/halo-backend/images/favicon.ico similarity index 100% rename from src/main/resources/static/images/favicon.ico rename to src/main/resources/static/halo-backend/images/favicon.ico diff --git a/src/main/resources/static/js/adminlte.js b/src/main/resources/static/halo-backend/js/adminlte.js old mode 100755 new mode 100644 similarity index 99% rename from src/main/resources/static/js/adminlte.js rename to src/main/resources/static/halo-backend/js/adminlte.js index 2fb979967..4290bb21c --- a/src/main/resources/static/js/adminlte.js +++ b/src/main/resources/static/halo-backend/js/adminlte.js @@ -7,7 +7,7 @@ * @Author Almsaeed Studio * @Support * @Email -* @version 2.4.5 +* @version 2.4.8 * @repository git://github.com/almasaeed2010/AdminLTE.git * @license MIT */ diff --git a/src/main/resources/static/js/adminlte.min.js b/src/main/resources/static/halo-backend/js/adminlte.min.js old mode 100755 new mode 100644 similarity index 99% rename from src/main/resources/static/js/adminlte.min.js rename to src/main/resources/static/halo-backend/js/adminlte.min.js index 9cef9bac2..16d8fd5ea --- a/src/main/resources/static/js/adminlte.min.js +++ b/src/main/resources/static/halo-backend/js/adminlte.min.js @@ -7,8 +7,8 @@ * @Author Almsaeed Studio * @Support * @Email -* @version 2.4.5 +* @version 2.4.8 * @repository git://github.com/almasaeed2010/AdminLTE.git * @license MIT */ -if("undefined"==typeof jQuery)throw new Error("AdminLTE requires jQuery");+function(a){"use strict";function b(b){return this.each(function(){var e=a(this),g=e.data(c);if(!g){var h=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,g=new f(e,h))}if("string"==typeof g){if(void 0===g[b])throw new Error("No method named "+b);g[b]()}})}var c="lte.boxrefresh",d={source:"",params:{},trigger:".refresh-btn",content:".box-body",loadInContent:!0,responseType:"",overlayTemplate:'
',onLoadStart:function(){},onLoadDone:function(a){return a}},e={data:'[data-widget="box-refresh"]'},f=function(b,c){if(this.element=b,this.options=c,this.$overlay=a(c.overlay),""===c.source)throw new Error("Source url was not defined. Please specify a url in your BoxRefresh source option.");this._setUpListeners(),this.load()};f.prototype.load=function(){this._addOverlay(),this.options.onLoadStart.call(a(this)),a.get(this.options.source,this.options.params,function(b){this.options.loadInContent&&a(this.options.content).html(b),this.options.onLoadDone.call(a(this),b),this._removeOverlay()}.bind(this),""!==this.options.responseType&&this.options.responseType)},f.prototype._setUpListeners=function(){a(this.element).on("click",e.trigger,function(a){a&&a.preventDefault(),this.load()}.bind(this))},f.prototype._addOverlay=function(){a(this.element).append(this.$overlay)},f.prototype._removeOverlay=function(){a(this.element).remove(this.$overlay)};var g=a.fn.boxRefresh;a.fn.boxRefresh=b,a.fn.boxRefresh.Constructor=f,a.fn.boxRefresh.noConflict=function(){return a.fn.boxRefresh=g,this},a(window).on("load",function(){a(e.data).each(function(){b.call(a(this))})})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this),f=e.data(c);if(!f){var g=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,f=new h(e,g))}if("string"==typeof b){if(void 0===f[b])throw new Error("No method named "+b);f[b]()}})}var c="lte.boxwidget",d={animationSpeed:300,collapseTrigger:'[data-widget="collapse"]',removeTrigger:'[data-widget="remove"]',collapseIcon:"fa-minus",expandIcon:"fa-plus",removeIcon:"fa-times"},e={data:".box",collapsed:".collapsed-box",header:".box-header",body:".box-body",footer:".box-footer",tools:".box-tools"},f={collapsed:"collapsed-box"},g={collapsed:"collapsed.boxwidget",expanded:"expanded.boxwidget",removed:"removed.boxwidget"},h=function(a,b){this.element=a,this.options=b,this._setUpListeners()};h.prototype.toggle=function(){a(this.element).is(e.collapsed)?this.expand():this.collapse()},h.prototype.expand=function(){var b=a.Event(g.expanded),c=this.options.collapseIcon,d=this.options.expandIcon;a(this.element).removeClass(f.collapsed),a(this.element).children(e.header+", "+e.body+", "+e.footer).children(e.tools).find("."+d).removeClass(d).addClass(c),a(this.element).children(e.body+", "+e.footer).slideDown(this.options.animationSpeed,function(){a(this.element).trigger(b)}.bind(this))},h.prototype.collapse=function(){var b=a.Event(g.collapsed),c=this.options.collapseIcon,d=this.options.expandIcon;a(this.element).children(e.header+", "+e.body+", "+e.footer).children(e.tools).find("."+c).removeClass(c).addClass(d),a(this.element).children(e.body+", "+e.footer).slideUp(this.options.animationSpeed,function(){a(this.element).addClass(f.collapsed),a(this.element).trigger(b)}.bind(this))},h.prototype.remove=function(){var b=a.Event(g.removed);a(this.element).slideUp(this.options.animationSpeed,function(){a(this.element).trigger(b),a(this.element).remove()}.bind(this))},h.prototype._setUpListeners=function(){var b=this;a(this.element).on("click",this.options.collapseTrigger,function(c){return c&&c.preventDefault(),b.toggle(a(this)),!1}),a(this.element).on("click",this.options.removeTrigger,function(c){return c&&c.preventDefault(),b.remove(a(this)),!1})};var i=a.fn.boxWidget;a.fn.boxWidget=b,a.fn.boxWidget.Constructor=h,a.fn.boxWidget.noConflict=function(){return a.fn.boxWidget=i,this},a(window).on("load",function(){a(e.data).each(function(){b.call(a(this))})})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this),f=e.data(c);if(!f){var g=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,f=new h(e,g))}"string"==typeof b&&f.toggle()})}var c="lte.controlsidebar",d={slide:!0},e={sidebar:".control-sidebar",data:'[data-toggle="control-sidebar"]',open:".control-sidebar-open",bg:".control-sidebar-bg",wrapper:".wrapper",content:".content-wrapper",boxed:".layout-boxed"},f={open:"control-sidebar-open",fixed:"fixed"},g={collapsed:"collapsed.controlsidebar",expanded:"expanded.controlsidebar"},h=function(a,b){this.element=a,this.options=b,this.hasBindedResize=!1,this.init()};h.prototype.init=function(){a(this.element).is(e.data)||a(this).on("click",this.toggle),this.fix(),a(window).resize(function(){this.fix()}.bind(this))},h.prototype.toggle=function(b){b&&b.preventDefault(),this.fix(),a(e.sidebar).is(e.open)||a("body").is(e.open)?this.collapse():this.expand()},h.prototype.expand=function(){this.options.slide?a(e.sidebar).addClass(f.open):a("body").addClass(f.open),a(this.element).trigger(a.Event(g.expanded))},h.prototype.collapse=function(){a("body, "+e.sidebar).removeClass(f.open),a(this.element).trigger(a.Event(g.collapsed))},h.prototype.fix=function(){a("body").is(e.boxed)&&this._fixForBoxed(a(e.bg))},h.prototype._fixForBoxed=function(b){b.css({position:"absolute",height:a(e.wrapper).height()})};var i=a.fn.controlSidebar;a.fn.controlSidebar=b,a.fn.controlSidebar.Constructor=h,a.fn.controlSidebar.noConflict=function(){return a.fn.controlSidebar=i,this},a(document).on("click",e.data,function(c){c&&c.preventDefault(),b.call(a(this),"toggle")})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data(c);e||d.data(c,e=new f(d)),"string"==typeof b&&e.toggle(d)})}var c="lte.directchat",d={data:'[data-widget="chat-pane-toggle"]',box:".direct-chat"},e={open:"direct-chat-contacts-open"},f=function(a){this.element=a};f.prototype.toggle=function(a){a.parents(d.box).first().toggleClass(e.open)};var g=a.fn.directChat;a.fn.directChat=b,a.fn.directChat.Constructor=f,a.fn.directChat.noConflict=function(){return a.fn.directChat=g,this},a(document).on("click",d.data,function(c){c&&c.preventDefault(),b.call(a(this),"toggle")})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this),f=e.data(c);if(!f){var h=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,f=new g(h))}if("string"==typeof b){if(void 0===f[b])throw new Error("No method named "+b);f[b]()}})}var c="lte.layout",d={slimscroll:!0,resetHeight:!0},e={wrapper:".wrapper",contentWrapper:".content-wrapper",layoutBoxed:".layout-boxed",mainFooter:".main-footer",mainHeader:".main-header",sidebar:".sidebar",controlSidebar:".control-sidebar",fixed:".fixed",sidebarMenu:".sidebar-menu",logo:".main-header .logo"},f={fixed:"fixed",holdTransition:"hold-transition"},g=function(a){this.options=a,this.bindedResize=!1,this.activate()};g.prototype.activate=function(){this.fix(),this.fixSidebar(),a("body").removeClass(f.holdTransition),this.options.resetHeight&&a("body, html, "+e.wrapper).css({height:"auto","min-height":"100%"}),this.bindedResize||(a(window).resize(function(){this.fix(),this.fixSidebar(),a(e.logo+", "+e.sidebar).one("webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend",function(){this.fix(),this.fixSidebar()}.bind(this))}.bind(this)),this.bindedResize=!0),a(e.sidebarMenu).on("expanded.tree",function(){this.fix(),this.fixSidebar()}.bind(this)),a(e.sidebarMenu).on("collapsed.tree",function(){this.fix(),this.fixSidebar()}.bind(this))},g.prototype.fix=function(){a(e.layoutBoxed+" > "+e.wrapper).css("overflow","hidden");var b=a(e.mainFooter).outerHeight()||0,c=a(e.mainHeader).outerHeight()||0,d=c+b,g=a(window).height(),h=a(e.sidebar).height()||0;if(a("body").hasClass(f.fixed))a(e.contentWrapper).css("min-height",g-b);else{var i;g>=h?(a(e.contentWrapper).css("min-height",g-d),i=g-d):(a(e.contentWrapper).css("min-height",h),i=h);var j=a(e.controlSidebar);void 0!==j&&j.height()>i&&a(e.contentWrapper).css("min-height",j.height())}},g.prototype.fixSidebar=function(){if(!a("body").hasClass(f.fixed))return void(void 0!==a.fn.slimScroll&&a(e.sidebar).slimScroll({destroy:!0}).height("auto"));this.options.slimscroll&&void 0!==a.fn.slimScroll&&a(e.sidebar).slimScroll({height:a(window).height()-a(e.mainHeader).height()+"px"})};var h=a.fn.layout;a.fn.layout=b,a.fn.layout.Constuctor=g,a.fn.layout.noConflict=function(){return a.fn.layout=h,this},a(window).on("load",function(){b.call(a("body"))})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this),f=e.data(c);if(!f){var g=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,f=new h(g))}"toggle"===b&&f.toggle()})}var c="lte.pushmenu",d={collapseScreenSize:767,expandOnHover:!1,expandTransitionDelay:200},e={collapsed:".sidebar-collapse",open:".sidebar-open",mainSidebar:".main-sidebar",contentWrapper:".content-wrapper",searchInput:".sidebar-form .form-control",button:'[data-toggle="push-menu"]',mini:".sidebar-mini",expanded:".sidebar-expanded-on-hover",layoutFixed:".fixed"},f={collapsed:"sidebar-collapse",open:"sidebar-open",mini:"sidebar-mini",expanded:"sidebar-expanded-on-hover",expandFeature:"sidebar-mini-expand-feature",layoutFixed:"fixed"},g={expanded:"expanded.pushMenu",collapsed:"collapsed.pushMenu"},h=function(a){this.options=a,this.init()};h.prototype.init=function(){(this.options.expandOnHover||a("body").is(e.mini+e.layoutFixed))&&(this.expandOnHover(),a("body").addClass(f.expandFeature)),a(e.contentWrapper).click(function(){a(window).width()<=this.options.collapseScreenSize&&a("body").hasClass(f.open)&&this.close()}.bind(this)),a(e.searchInput).click(function(a){a.stopPropagation()})},h.prototype.toggle=function(){var b=a(window).width(),c=!a("body").hasClass(f.collapsed);b<=this.options.collapseScreenSize&&(c=a("body").hasClass(f.open)),c?this.close():this.open()},h.prototype.open=function(){a(window).width()>this.options.collapseScreenSize?a("body").removeClass(f.collapsed).trigger(a.Event(g.expanded)):a("body").addClass(f.open).trigger(a.Event(g.expanded))},h.prototype.close=function(){a(window).width()>this.options.collapseScreenSize?a("body").addClass(f.collapsed).trigger(a.Event(g.collapsed)):a("body").removeClass(f.open+" "+f.collapsed).trigger(a.Event(g.collapsed))},h.prototype.expandOnHover=function(){a(e.mainSidebar).hover(function(){a("body").is(e.mini+e.collapsed)&&a(window).width()>this.options.collapseScreenSize&&this.expand()}.bind(this),function(){a("body").is(e.expanded)&&this.collapse()}.bind(this))},h.prototype.expand=function(){setTimeout(function(){a("body").removeClass(f.collapsed).addClass(f.expanded)},this.options.expandTransitionDelay)},h.prototype.collapse=function(){setTimeout(function(){a("body").removeClass(f.expanded).addClass(f.collapsed)},this.options.expandTransitionDelay)};var i=a.fn.pushMenu;a.fn.pushMenu=b,a.fn.pushMenu.Constructor=h,a.fn.pushMenu.noConflict=function(){return a.fn.pushMenu=i,this},a(document).on("click",e.button,function(c){c.preventDefault(),b.call(a(this),"toggle")}),a(window).on("load",function(){b.call(a(e.button))})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this),f=e.data(c);if(!f){var h=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,f=new g(e,h))}if("string"==typeof f){if(void 0===f[b])throw new Error("No method named "+b);f[b]()}})}var c="lte.todolist",d={onCheck:function(a){return a},onUnCheck:function(a){return a}},e={data:'[data-widget="todo-list"]'},f={done:"done"},g=function(a,b){this.element=a,this.options=b,this._setUpListeners()};g.prototype.toggle=function(a){if(a.parents(e.li).first().toggleClass(f.done),!a.prop("checked"))return void this.unCheck(a);this.check(a)},g.prototype.check=function(a){this.options.onCheck.call(a)},g.prototype.unCheck=function(a){this.options.onUnCheck.call(a)},g.prototype._setUpListeners=function(){var b=this;a(this.element).on("change ifChanged","input:checkbox",function(){b.toggle(a(this))})};var h=a.fn.todoList;a.fn.todoList=b,a.fn.todoList.Constructor=g,a.fn.todoList.noConflict=function(){return a.fn.todoList=h,this},a(window).on("load",function(){a(e.data).each(function(){b.call(a(this))})})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this);if(!e.data(c)){var f=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,new h(e,f))}})}var c="lte.tree",d={animationSpeed:300,accordion:!0,followLink:!1,trigger:".treeview a"},e={tree:".tree",treeview:".treeview",treeviewMenu:".treeview-menu",open:".menu-open, .active",li:"li",data:'[data-widget="tree"]',active:".active"},f={open:"menu-open",tree:"tree"},g={collapsed:"collapsed.tree",expanded:"expanded.tree"},h=function(b,c){this.element=b,this.options=c,a(this.element).addClass(f.tree),a(e.treeview+e.active,this.element).addClass(f.open),this._setUpListeners()};h.prototype.toggle=function(a,b){var c=a.next(e.treeviewMenu),d=a.parent(),g=d.hasClass(f.open);d.is(e.treeview)&&(this.options.followLink&&"#"!==a.attr("href")||b.preventDefault(),g?this.collapse(c,d):this.expand(c,d))},h.prototype.expand=function(b,c){var d=a.Event(g.expanded);if(this.options.accordion){var h=c.siblings(e.open),i=h.children(e.treeviewMenu);this.collapse(i,h)}c.addClass(f.open),b.slideDown(this.options.animationSpeed,function(){a(this.element).trigger(d)}.bind(this))},h.prototype.collapse=function(b,c){var d=a.Event(g.collapsed);c.removeClass(f.open),b.slideUp(this.options.animationSpeed,function(){a(this.element).trigger(d)}.bind(this))},h.prototype._setUpListeners=function(){var b=this;a(this.element).on("click",this.options.trigger,function(c){b.toggle(a(this),c)})};var i=a.fn.tree;a.fn.tree=b,a.fn.tree.Constructor=h,a.fn.tree.noConflict=function(){return a.fn.tree=i,this},a(window).on("load",function(){a(e.data).each(function(){b.call(a(this))})})}(jQuery); +if("undefined"==typeof jQuery)throw new Error("AdminLTE requires jQuery");+function(a){"use strict";function b(b){return this.each(function(){var e=a(this),g=e.data(c);if(!g){var h=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,g=new f(e,h))}if("string"==typeof g){if(void 0===g[b])throw new Error("No method named "+b);g[b]()}})}var c="lte.boxrefresh",d={source:"",params:{},trigger:".refresh-btn",content:".box-body",loadInContent:!0,responseType:"",overlayTemplate:'
',onLoadStart:function(){},onLoadDone:function(a){return a}},e={data:'[data-widget="box-refresh"]'},f=function(b,c){if(this.element=b,this.options=c,this.$overlay=a(c.overlay),""===c.source)throw new Error("Source url was not defined. Please specify a url in your BoxRefresh source option.");this._setUpListeners(),this.load()};f.prototype.load=function(){this._addOverlay(),this.options.onLoadStart.call(a(this)),a.get(this.options.source,this.options.params,function(b){this.options.loadInContent&&a(this.options.content).html(b),this.options.onLoadDone.call(a(this),b),this._removeOverlay()}.bind(this),""!==this.options.responseType&&this.options.responseType)},f.prototype._setUpListeners=function(){a(this.element).on("click",e.trigger,function(a){a&&a.preventDefault(),this.load()}.bind(this))},f.prototype._addOverlay=function(){a(this.element).append(this.$overlay)},f.prototype._removeOverlay=function(){a(this.element).remove(this.$overlay)};var g=a.fn.boxRefresh;a.fn.boxRefresh=b,a.fn.boxRefresh.Constructor=f,a.fn.boxRefresh.noConflict=function(){return a.fn.boxRefresh=g,this},a(window).on("load",function(){a(e.data).each(function(){b.call(a(this))})})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this),f=e.data(c);if(!f){var g=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,f=new h(e,g))}if("string"==typeof b){if(void 0===f[b])throw new Error("No method named "+b);f[b]()}})}var c="lte.boxwidget",d={animationSpeed:300,collapseTrigger:'[data-widget="collapse"]',removeTrigger:'[data-widget="remove"]',collapseIcon:"fa-minus",expandIcon:"fa-plus",removeIcon:"fa-times"},e={data:".box",collapsed:".collapsed-box",header:".box-header",body:".box-body",footer:".box-footer",tools:".box-tools"},f={collapsed:"collapsed-box"},g={collapsed:"collapsed.boxwidget",expanded:"expanded.boxwidget",removed:"removed.boxwidget"},h=function(a,b){this.element=a,this.options=b,this._setUpListeners()};h.prototype.toggle=function(){a(this.element).is(e.collapsed)?this.expand():this.collapse()},h.prototype.expand=function(){var b=a.Event(g.expanded),c=this.options.collapseIcon,d=this.options.expandIcon;a(this.element).removeClass(f.collapsed),a(this.element).children(e.header+", "+e.body+", "+e.footer).children(e.tools).find("."+d).removeClass(d).addClass(c),a(this.element).children(e.body+", "+e.footer).slideDown(this.options.animationSpeed,function(){a(this.element).trigger(b)}.bind(this))},h.prototype.collapse=function(){var b=a.Event(g.collapsed),c=this.options.collapseIcon,d=this.options.expandIcon;a(this.element).children(e.header+", "+e.body+", "+e.footer).children(e.tools).find("."+c).removeClass(c).addClass(d),a(this.element).children(e.body+", "+e.footer).slideUp(this.options.animationSpeed,function(){a(this.element).addClass(f.collapsed),a(this.element).trigger(b)}.bind(this))},h.prototype.remove=function(){var b=a.Event(g.removed);a(this.element).slideUp(this.options.animationSpeed,function(){a(this.element).trigger(b),a(this.element).remove()}.bind(this))},h.prototype._setUpListeners=function(){var b=this;a(this.element).on("click",this.options.collapseTrigger,function(c){return c&&c.preventDefault(),b.toggle(a(this)),!1}),a(this.element).on("click",this.options.removeTrigger,function(c){return c&&c.preventDefault(),b.remove(a(this)),!1})};var i=a.fn.boxWidget;a.fn.boxWidget=b,a.fn.boxWidget.Constructor=h,a.fn.boxWidget.noConflict=function(){return a.fn.boxWidget=i,this},a(window).on("load",function(){a(e.data).each(function(){b.call(a(this))})})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this),f=e.data(c);if(!f){var g=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,f=new h(e,g))}"string"==typeof b&&f.toggle()})}var c="lte.controlsidebar",d={slide:!0},e={sidebar:".control-sidebar",data:'[data-toggle="control-sidebar"]',open:".control-sidebar-open",bg:".control-sidebar-bg",wrapper:".wrapper",content:".content-wrapper",boxed:".layout-boxed"},f={open:"control-sidebar-open",fixed:"fixed"},g={collapsed:"collapsed.controlsidebar",expanded:"expanded.controlsidebar"},h=function(a,b){this.element=a,this.options=b,this.hasBindedResize=!1,this.init()};h.prototype.init=function(){a(this.element).is(e.data)||a(this).on("click",this.toggle),this.fix(),a(window).resize(function(){this.fix()}.bind(this))},h.prototype.toggle=function(b){b&&b.preventDefault(),this.fix(),a(e.sidebar).is(e.open)||a("body").is(e.open)?this.collapse():this.expand()},h.prototype.expand=function(){this.options.slide?a(e.sidebar).addClass(f.open):a("body").addClass(f.open),a(this.element).trigger(a.Event(g.expanded))},h.prototype.collapse=function(){a("body, "+e.sidebar).removeClass(f.open),a(this.element).trigger(a.Event(g.collapsed))},h.prototype.fix=function(){a("body").is(e.boxed)&&this._fixForBoxed(a(e.bg))},h.prototype._fixForBoxed=function(b){b.css({position:"absolute",height:a(e.wrapper).height()})};var i=a.fn.controlSidebar;a.fn.controlSidebar=b,a.fn.controlSidebar.Constructor=h,a.fn.controlSidebar.noConflict=function(){return a.fn.controlSidebar=i,this},a(document).on("click",e.data,function(c){c&&c.preventDefault(),b.call(a(this),"toggle")})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data(c);e||d.data(c,e=new f(d)),"string"==typeof b&&e.toggle(d)})}var c="lte.directchat",d={data:'[data-widget="chat-pane-toggle"]',box:".direct-chat"},e={open:"direct-chat-contacts-open"},f=function(a){this.element=a};f.prototype.toggle=function(a){a.parents(d.box).first().toggleClass(e.open)};var g=a.fn.directChat;a.fn.directChat=b,a.fn.directChat.Constructor=f,a.fn.directChat.noConflict=function(){return a.fn.directChat=g,this},a(document).on("click",d.data,function(c){c&&c.preventDefault(),b.call(a(this),"toggle")})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this),f=e.data(c);if(!f){var h=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,f=new g(h))}if("string"==typeof b){if(void 0===f[b])throw new Error("No method named "+b);f[b]()}})}var c="lte.layout",d={slimscroll:!0,resetHeight:!0},e={wrapper:".wrapper",contentWrapper:".content-wrapper",layoutBoxed:".layout-boxed",mainFooter:".main-footer",mainHeader:".main-header",sidebar:".sidebar",controlSidebar:".control-sidebar",fixed:".fixed",sidebarMenu:".sidebar-menu",logo:".main-header .logo"},f={fixed:"fixed",holdTransition:"hold-transition"},g=function(a){this.options=a,this.bindedResize=!1,this.activate()};g.prototype.activate=function(){this.fix(),this.fixSidebar(),a("body").removeClass(f.holdTransition),this.options.resetHeight&&a("body, html, "+e.wrapper).css({height:"auto","min-height":"100%"}),this.bindedResize||(a(window).resize(function(){this.fix(),this.fixSidebar(),a(e.logo+", "+e.sidebar).one("webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend",function(){this.fix(),this.fixSidebar()}.bind(this))}.bind(this)),this.bindedResize=!0),a(e.sidebarMenu).on("expanded.tree",function(){this.fix(),this.fixSidebar()}.bind(this)),a(e.sidebarMenu).on("collapsed.tree",function(){this.fix(),this.fixSidebar()}.bind(this))},g.prototype.fix=function(){a(e.layoutBoxed+" > "+e.wrapper).css("overflow","hidden");var b=a(e.mainFooter).outerHeight()||0,c=a(e.mainHeader).outerHeight()||0,d=c+b,g=a(window).height(),h=a(e.sidebar).height()||0;if(a("body").hasClass(f.fixed))a(e.contentWrapper).css("min-height",g-b);else{var i;g>=h?(a(e.contentWrapper).css("min-height",g-d),i=g-d):(a(e.contentWrapper).css("min-height",h),i=h);var j=a(e.controlSidebar);void 0!==j&&j.height()>i&&a(e.contentWrapper).css("min-height",j.height())}},g.prototype.fixSidebar=function(){if(!a("body").hasClass(f.fixed))return void(void 0!==a.fn.slimScroll&&a(e.sidebar).slimScroll({destroy:!0}).height("auto"));this.options.slimscroll&&void 0!==a.fn.slimScroll&&a(e.sidebar).slimScroll({height:a(window).height()-a(e.mainHeader).height()+"px"})};var h=a.fn.layout;a.fn.layout=b,a.fn.layout.Constuctor=g,a.fn.layout.noConflict=function(){return a.fn.layout=h,this},a(window).on("load",function(){b.call(a("body"))})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this),f=e.data(c);if(!f){var g=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,f=new h(g))}"toggle"===b&&f.toggle()})}var c="lte.pushmenu",d={collapseScreenSize:767,expandOnHover:!1,expandTransitionDelay:200},e={collapsed:".sidebar-collapse",open:".sidebar-open",mainSidebar:".main-sidebar",contentWrapper:".content-wrapper",searchInput:".sidebar-form .form-control",button:'[data-toggle="push-menu"]',mini:".sidebar-mini",expanded:".sidebar-expanded-on-hover",layoutFixed:".fixed"},f={collapsed:"sidebar-collapse",open:"sidebar-open",mini:"sidebar-mini",expanded:"sidebar-expanded-on-hover",expandFeature:"sidebar-mini-expand-feature",layoutFixed:"fixed"},g={expanded:"expanded.pushMenu",collapsed:"collapsed.pushMenu"},h=function(a){this.options=a,this.init()};h.prototype.init=function(){(this.options.expandOnHover||a("body").is(e.mini+e.layoutFixed))&&(this.expandOnHover(),a("body").addClass(f.expandFeature)),a(e.contentWrapper).click(function(){a(window).width()<=this.options.collapseScreenSize&&a("body").hasClass(f.open)&&this.close()}.bind(this)),a(e.searchInput).click(function(a){a.stopPropagation()})},h.prototype.toggle=function(){var b=a(window).width(),c=!a("body").hasClass(f.collapsed);b<=this.options.collapseScreenSize&&(c=a("body").hasClass(f.open)),c?this.close():this.open()},h.prototype.open=function(){a(window).width()>this.options.collapseScreenSize?a("body").removeClass(f.collapsed).trigger(a.Event(g.expanded)):a("body").addClass(f.open).trigger(a.Event(g.expanded))},h.prototype.close=function(){a(window).width()>this.options.collapseScreenSize?a("body").addClass(f.collapsed).trigger(a.Event(g.collapsed)):a("body").removeClass(f.open+" "+f.collapsed).trigger(a.Event(g.collapsed))},h.prototype.expandOnHover=function(){a(e.mainSidebar).hover(function(){a("body").is(e.mini+e.collapsed)&&a(window).width()>this.options.collapseScreenSize&&this.expand()}.bind(this),function(){a("body").is(e.expanded)&&this.collapse()}.bind(this))},h.prototype.expand=function(){setTimeout(function(){a("body").removeClass(f.collapsed).addClass(f.expanded)},this.options.expandTransitionDelay)},h.prototype.collapse=function(){setTimeout(function(){a("body").removeClass(f.expanded).addClass(f.collapsed)},this.options.expandTransitionDelay)};var i=a.fn.pushMenu;a.fn.pushMenu=b,a.fn.pushMenu.Constructor=h,a.fn.pushMenu.noConflict=function(){return a.fn.pushMenu=i,this},a(document).on("click",e.button,function(c){c.preventDefault(),b.call(a(this),"toggle")}),a(window).on("load",function(){b.call(a(e.button))})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this),f=e.data(c);if(!f){var h=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,f=new g(e,h))}if("string"==typeof f){if(void 0===f[b])throw new Error("No method named "+b);f[b]()}})}var c="lte.todolist",d={onCheck:function(a){return a},onUnCheck:function(a){return a}},e={data:'[data-widget="todo-list"]'},f={done:"done"},g=function(a,b){this.element=a,this.options=b,this._setUpListeners()};g.prototype.toggle=function(a){if(a.parents(e.li).first().toggleClass(f.done),!a.prop("checked"))return void this.unCheck(a);this.check(a)},g.prototype.check=function(a){this.options.onCheck.call(a)},g.prototype.unCheck=function(a){this.options.onUnCheck.call(a)},g.prototype._setUpListeners=function(){var b=this;a(this.element).on("change ifChanged","input:checkbox",function(){b.toggle(a(this))})};var h=a.fn.todoList;a.fn.todoList=b,a.fn.todoList.Constructor=g,a.fn.todoList.noConflict=function(){return a.fn.todoList=h,this},a(window).on("load",function(){a(e.data).each(function(){b.call(a(this))})})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this);if(!e.data(c)){var f=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,new h(e,f))}})}var c="lte.tree",d={animationSpeed:300,accordion:!0,followLink:!1,trigger:".treeview a"},e={tree:".tree",treeview:".treeview",treeviewMenu:".treeview-menu",open:".menu-open, .active",li:"li",data:'[data-widget="tree"]',active:".active"},f={open:"menu-open",tree:"tree"},g={collapsed:"collapsed.tree",expanded:"expanded.tree"},h=function(b,c){this.element=b,this.options=c,a(this.element).addClass(f.tree),a(e.treeview+e.active,this.element).addClass(f.open),this._setUpListeners()};h.prototype.toggle=function(a,b){var c=a.next(e.treeviewMenu),d=a.parent(),g=d.hasClass(f.open);d.is(e.treeview)&&(this.options.followLink&&"#"!==a.attr("href")||b.preventDefault(),g?this.collapse(c,d):this.expand(c,d))},h.prototype.expand=function(b,c){var d=a.Event(g.expanded);if(this.options.accordion){var h=c.siblings(e.open),i=h.children(e.treeviewMenu);this.collapse(i,h)}c.addClass(f.open),b.slideDown(this.options.animationSpeed,function(){a(this.element).trigger(d)}.bind(this))},h.prototype.collapse=function(b,c){var d=a.Event(g.collapsed);c.removeClass(f.open),b.slideUp(this.options.animationSpeed,function(){a(this.element).trigger(d)}.bind(this))},h.prototype._setUpListeners=function(){var b=this;a(this.element).on("click",this.options.trigger,function(c){b.toggle(a(this),c)})};var i=a.fn.tree;a.fn.tree=b,a.fn.tree.Constructor=h,a.fn.tree.noConflict=function(){return a.fn.tree=i,this},a(window).on("load",function(){a(e.data).each(function(){b.call(a(this))})})}(jQuery); \ No newline at end of file diff --git a/src/main/resources/static/js/halo.js b/src/main/resources/static/halo-backend/js/halo.js old mode 100755 new mode 100644 similarity index 65% rename from src/main/resources/static/js/halo.js rename to src/main/resources/static/halo-backend/js/halo.js index dcdfafaeb..cf6adf753 --- a/src/main/resources/static/js/halo.js +++ b/src/main/resources/static/halo-backend/js/halo.js @@ -6,32 +6,51 @@ $.extend({ } }); +$.fn.extend({ + animateCss: function (animationName, callback) { + var animationEnd = (function (el) { + var animations = { + animation: 'animationend', + OAnimation: 'oAnimationEnd', + MozAnimation: 'mozAnimationEnd', + WebkitAnimation: 'webkitAnimationEnd' + }; + + for (var t in animations) { + if (el.style[t] !== undefined) { + return animations[t]; + } + } + })(document.createElement('div')); + + this.addClass('animated ' + animationName).one(animationEnd, function () { + $(this).removeClass('animated ' + animationName); + + if (typeof callback === 'function') callback(); + }); + + return this; + } +}); + /** * 适配移动端并初始化菜单 */ $(document).ready(function () { - if($(window).width()<1024){ - if($('body').hasClass('layout-boxed')){ + $("#animated-header,#animated-content").animateCss("fadeIn"); + if ($(window).width() < 1024) { + if ($('body').hasClass('layout-boxed')) { $('body').removeClass('layout-boxed'); } - if($('body').hasClass('sidebar-collapse')){ + if ($('body').hasClass('sidebar-collapse')) { $('body').removeClass('sidebar-collapse'); } } initMenu(); }); -/** - * pjax请求时点击菜单的事件 - */ -$(document).on('pjax:clicked', function() { - $('.content-wrapper').html(""); -}); - -/** - * pjax请求时完成加载的事件 - */ -$(document).on('pjax:complete',function () { +document.addEventListener('pjax:complete', function () { + $("#animated-header,#animated-content").animateCss("fadeIn"); initMenu(); }); @@ -40,35 +59,35 @@ $(document).on('pjax:complete',function () { */ function initMenu() { var pathName = location.pathname; - if(pathName=="/admin/posts/edit"){ - pathName="/admin/posts/new"; + if (pathName === "/admin/posts/edit") { + pathName = "/admin/posts/write"; } - if(pathName=="/admin/category/edit"){ - pathName="/admin/category"; + if (pathName === "/admin/category/edit") { + pathName = "/admin/category"; } - if(pathName=="/admin/tag/edit"){ - pathName="/admin/tag"; + if (pathName === "/admin/tag/edit") { + pathName = "/admin/tag"; } - if(pathName=="/admin/page/edit"){ - pathName="/admin/page/new"; + if (pathName === "/admin/page/edit") { + pathName = "/admin/page/new"; } - if(pathName=="/admin/page/links"){ - pathName="/admin/page"; + if (pathName === "/admin/page/links") { + pathName = "/admin/page"; } - if(pathName=="/admin/page/galleries"){ - pathName="/admin/page"; + if (pathName === "/admin/page/galleries") { + pathName = "/admin/page"; } - if(pathName=="/admin/menus/edit"){ - pathName="/admin/menus"; + if (pathName === "/admin/menus/edit") { + pathName = "/admin/menus"; } $(".sidebar-menu").children().each(function () { var li = $(this); li.find('a').each(function () { var href = $(this).attr("href"); - if (pathName == href) { + if (pathName === href) { li.addClass("active"); $(this).parent().addClass("active"); - }else{ + } else { $(this).parent().removeClass("active"); } }); @@ -138,7 +157,7 @@ $.halo.prototype.showMsgAndReload = function (text, icon, hideAfter) { * @param hideAfter 隐藏时间 * @param url 重定向地址 */ -$.halo.prototype.showMsgAndRedirect = function (text, icon, hideAfter, url) { +$.halo.prototype.showMsgAndRedirect = function (text, icon, hideAfter, url, isPjax) { if (heading == undefined) { var heading = "提示"; } @@ -155,7 +174,11 @@ $.halo.prototype.showMsgAndRedirect = function (text, icon, hideAfter, url) { loader: true, loaderBg: '#ffffff', afterHidden: function () { - window.location.href = url; + if (isPjax === 'true') { + pjax.loadUrl(url); + } else { + window.location.href = url; + } } }); }; @@ -226,17 +249,12 @@ $.halo.prototype.layerModal = function (url, title) { * 保存设置选项 */ function saveOptions(option) { - var param = $('#'+option).serialize(); - $.ajax({ - type: 'post', - url: '/admin/option/save', - data: param, - success: function (data) { - if(data.code==1){ - halo.showMsg(data.msg,'success',1000); - }else { - halo.showMsg(data.msg,'error',2000); - } + var param = $('#' + option).serialize(); + $.post('/admin/option/save', param, function (data) { + if (data.code === 1) { + halo.showMsg(data.msg, 'success', 1000); + } else { + halo.showMsg(data.msg, 'error', 2000); } - }); + }, 'JSON'); } diff --git a/src/main/resources/static/halo-backend/js/halo.min.js b/src/main/resources/static/halo-backend/js/halo.min.js new file mode 100644 index 000000000..16260a702 --- /dev/null +++ b/src/main/resources/static/halo-backend/js/halo.min.js @@ -0,0 +1 @@ +$.extend({halo:function(){}});$.fn.extend({animateCss:function(animationName,callback){var animationEnd=(function(el){var animations={animation:"animationend",OAnimation:"oAnimationEnd",MozAnimation:"mozAnimationEnd",WebkitAnimation:"webkitAnimationEnd"};for(var t in animations){if(el.style[t]!==undefined){return animations[t];}}})(document.createElement("div"));this.addClass("animated "+animationName).one(animationEnd,function(){$(this).removeClass("animated "+animationName);if(typeof callback==="function"){callback();}});return this;}});$(document).ready(function(){$("#animated-header,#animated-content").animateCss("fadeIn");if($(window).width()<1024){if($("body").hasClass("layout-boxed")){$("body").removeClass("layout-boxed");}if($("body").hasClass("sidebar-collapse")){$("body").removeClass("sidebar-collapse");}}initMenu();});document.addEventListener("pjax:complete",function(){$("#animated-header,#animated-content").animateCss("fadeIn");initMenu();});function initMenu(){var pathName=location.pathname;if(pathName==="/admin/posts/edit"){pathName="/admin/posts/write";}if(pathName==="/admin/category/edit"){pathName="/admin/category";}if(pathName==="/admin/tag/edit"){pathName="/admin/tag";}if(pathName==="/admin/page/edit"){pathName="/admin/page/new";}if(pathName==="/admin/page/links"){pathName="/admin/page";}if(pathName==="/admin/page/galleries"){pathName="/admin/page";}if(pathName==="/admin/menus/edit"){pathName="/admin/menus";}$(".sidebar-menu").children().each(function(){var li=$(this);li.find("a").each(function(){var href=$(this).attr("href");if(pathName===href){li.addClass("active");$(this).parent().addClass("active");}else{$(this).parent().removeClass("active");}});});}$.halo.prototype.showMsg=function(text,icon,hideAfter){if(heading==undefined){var heading="提示";}$.toast({text:text,heading:heading,icon:icon,showHideTransition:"fade",allowToastClose:true,hideAfter:hideAfter,stack:1,position:"top-center",textAlign:"left",loader:true,loaderBg:"#ffffff"});};$.halo.prototype.showMsgAndReload=function(text,icon,hideAfter){if(heading==undefined){var heading="提示";}$.toast({text:text,heading:heading,icon:icon,showHideTransition:"fade",allowToastClose:true,hideAfter:hideAfter,stack:1,position:"top-center",textAlign:"left",loader:true,loaderBg:"#ffffff",afterHidden:function(){window.location.reload();}});};$.halo.prototype.showMsgAndRedirect=function(text,icon,hideAfter,url,isPjax){if(heading==undefined){var heading="提示";}$.toast({text:text,heading:heading,icon:icon,showHideTransition:"fade",allowToastClose:true,hideAfter:hideAfter,stack:1,position:"top-center",textAlign:"left",loader:true,loaderBg:"#ffffff",afterHidden:function(){if(isPjax==="true"){pjax.loadUrl(url);}else{window.location.href=url;}}});};$.halo.prototype.showMsgAndParentRedirect=function(text,icon,hideAfter,url){if(heading==undefined){var heading="提示";}$.toast({text:text,heading:heading,icon:icon,showHideTransition:"fade",allowToastClose:true,hideAfter:hideAfter,stack:1,position:"top-center",textAlign:"left",loader:true,loaderBg:"#ffffff",afterHidden:function(){parent.location.href=url;}});};$.halo.prototype.formatContent=function(a){a=a.replace(/\r\n/g,"
");a=a.replace(/\n/g,"
");a=a.replace(/\s/g," ");return a;};$.halo.prototype.layerModal=function(url,title){layer.open({type:2,title:title,shadeClose:true,shade:0.5,maxmin:true,area:["90%","90%"],content:url,scrollbar:false});};function saveOptions(option){var param=$("#"+option).serialize();$.post("/admin/option/save",param,function(data){if(data.code===1){halo.showMsg(data.msg,"success",1000);}else{halo.showMsg(data.msg,"error",2000);}},"JSON");} \ No newline at end of file diff --git a/src/main/resources/static/halo-backend/js/login.js b/src/main/resources/static/halo-backend/js/login.js new file mode 100644 index 000000000..85b2745e0 --- /dev/null +++ b/src/main/resources/static/halo-backend/js/login.js @@ -0,0 +1,51 @@ +var halo = new $.halo(); +$(document).ready(function () { + $("#loginName").val(localStorage.getItem("loginName")); +}); + +function doLogin() { + var btnLogin = $('#btnLogin'); + var loginBody = $('.login-body'); + var name = $("#loginName"); + var pwd = $("#loginPwd"); + btnLogin.button('loading'); + if (name.val() === "" || pwd.val() === "") { + halo.showMsg("请输入完整信息!", 'info', 2000); + btnLogin.button('reset'); + } else { + $.post('/admin/getLogin',{ + 'loginName': name.val(), + 'loginPwd': pwd.val() + },function (data) { + localStorage.setItem('loginName', name.val()); + if (data.code === 1) { + halo.showMsgAndRedirect(data.msg, 'success', 1000, '/admin','false'); + } else { + loginBody.addClass('animate shake'); + $.toast({ + text: data.msg, + heading: heading, + icon: 'error', + showHideTransition: 'fade', + allowToastClose: true, + hideAfter: 2000, + stack: 1, + position: 'top-center', + textAlign: 'left', + loader: true, + loaderBg: '#ffffff', + afterHidden: function () { + loginBody.removeClass('animate shake'); + } + }); + btnLogin.button('reset'); + } + },'JSON'); + } +} + +$(document).keydown(function (event) { + if (event.keyCode === 13) { + doLogin(); + } +}); diff --git a/src/main/resources/static/halo-backend/js/login.min.js b/src/main/resources/static/halo-backend/js/login.min.js new file mode 100644 index 000000000..3eaef59b7 --- /dev/null +++ b/src/main/resources/static/halo-backend/js/login.min.js @@ -0,0 +1 @@ +var halo=new $.halo();$(document).ready(function(){$("#loginName").val(localStorage.getItem("loginName"));});function doLogin(){var btnLogin=$("#btnLogin");var loginBody=$(".login-body");var name=$("#loginName");var pwd=$("#loginPwd");btnLogin.button("loading");if(name.val()===""||pwd.val()===""){halo.showMsg("请输入完整信息!","info",2000);btnLogin.button("reset");}else{$.post("/admin/getLogin",{loginName:name.val(),loginPwd:pwd.val()},function(data){localStorage.setItem("loginName",name.val());if(data.code===1){halo.showMsgAndRedirect(data.msg,"success",1000,"/admin","false");}else{loginBody.addClass("animate shake");$.toast({text:data.msg,heading:heading,icon:"error",showHideTransition:"fade",allowToastClose:true,hideAfter:2000,stack:1,position:"top-center",textAlign:"left",loader:true,loaderBg:"#ffffff",afterHidden:function(){loginBody.removeClass("animate shake");}});btnLogin.button("reset");}},"JSON");}}$(document).keydown(function(event){if(event.keyCode===13){doLogin();}}); \ No newline at end of file diff --git a/src/main/resources/static/plugins/animate/animate.min.css b/src/main/resources/static/halo-backend/plugins/animate/animate.min.css old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/animate/animate.min.css rename to src/main/resources/static/halo-backend/plugins/animate/animate.min.css diff --git a/src/main/resources/static/plugins/bootstrap/css/bootstrap-theme.css b/src/main/resources/static/halo-backend/plugins/bootstrap/css/bootstrap-theme.css old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/bootstrap/css/bootstrap-theme.css rename to src/main/resources/static/halo-backend/plugins/bootstrap/css/bootstrap-theme.css diff --git a/src/main/resources/static/plugins/bootstrap/css/bootstrap-theme.css.map b/src/main/resources/static/halo-backend/plugins/bootstrap/css/bootstrap-theme.css.map old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/bootstrap/css/bootstrap-theme.css.map rename to src/main/resources/static/halo-backend/plugins/bootstrap/css/bootstrap-theme.css.map diff --git a/src/main/resources/static/plugins/bootstrap/css/bootstrap-theme.min.css b/src/main/resources/static/halo-backend/plugins/bootstrap/css/bootstrap-theme.min.css old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/bootstrap/css/bootstrap-theme.min.css rename to src/main/resources/static/halo-backend/plugins/bootstrap/css/bootstrap-theme.min.css diff --git a/src/main/resources/static/plugins/bootstrap/css/bootstrap-theme.min.css.map b/src/main/resources/static/halo-backend/plugins/bootstrap/css/bootstrap-theme.min.css.map old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/bootstrap/css/bootstrap-theme.min.css.map rename to src/main/resources/static/halo-backend/plugins/bootstrap/css/bootstrap-theme.min.css.map diff --git a/src/main/resources/static/plugins/bootstrap/css/bootstrap.css b/src/main/resources/static/halo-backend/plugins/bootstrap/css/bootstrap.css old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/bootstrap/css/bootstrap.css rename to src/main/resources/static/halo-backend/plugins/bootstrap/css/bootstrap.css diff --git a/src/main/resources/static/plugins/bootstrap/css/bootstrap.css.map b/src/main/resources/static/halo-backend/plugins/bootstrap/css/bootstrap.css.map old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/bootstrap/css/bootstrap.css.map rename to src/main/resources/static/halo-backend/plugins/bootstrap/css/bootstrap.css.map diff --git a/src/main/resources/static/plugins/bootstrap/css/bootstrap.min.css b/src/main/resources/static/halo-backend/plugins/bootstrap/css/bootstrap.min.css old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/bootstrap/css/bootstrap.min.css rename to src/main/resources/static/halo-backend/plugins/bootstrap/css/bootstrap.min.css diff --git a/src/main/resources/static/plugins/bootstrap/css/bootstrap.min.css.map b/src/main/resources/static/halo-backend/plugins/bootstrap/css/bootstrap.min.css.map old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/bootstrap/css/bootstrap.min.css.map rename to src/main/resources/static/halo-backend/plugins/bootstrap/css/bootstrap.min.css.map diff --git a/src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.eot b/src/main/resources/static/halo-backend/plugins/bootstrap/fonts/glyphicons-halflings-regular.eot old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.eot rename to src/main/resources/static/halo-backend/plugins/bootstrap/fonts/glyphicons-halflings-regular.eot diff --git a/src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.svg b/src/main/resources/static/halo-backend/plugins/bootstrap/fonts/glyphicons-halflings-regular.svg old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.svg rename to src/main/resources/static/halo-backend/plugins/bootstrap/fonts/glyphicons-halflings-regular.svg diff --git a/src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.ttf b/src/main/resources/static/halo-backend/plugins/bootstrap/fonts/glyphicons-halflings-regular.ttf old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.ttf rename to src/main/resources/static/halo-backend/plugins/bootstrap/fonts/glyphicons-halflings-regular.ttf diff --git a/src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff b/src/main/resources/static/halo-backend/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff rename to src/main/resources/static/halo-backend/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff diff --git a/src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff2 b/src/main/resources/static/halo-backend/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff2 old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff2 rename to src/main/resources/static/halo-backend/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff2 diff --git a/src/main/resources/static/plugins/bootstrap/js/bootstrap.js b/src/main/resources/static/halo-backend/plugins/bootstrap/js/bootstrap.js old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/bootstrap/js/bootstrap.js rename to src/main/resources/static/halo-backend/plugins/bootstrap/js/bootstrap.js diff --git a/src/main/resources/static/plugins/bootstrap/js/bootstrap.min.js b/src/main/resources/static/halo-backend/plugins/bootstrap/js/bootstrap.min.js old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/bootstrap/js/bootstrap.min.js rename to src/main/resources/static/halo-backend/plugins/bootstrap/js/bootstrap.min.js diff --git a/src/main/resources/static/plugins/bootstrap/js/npm.js b/src/main/resources/static/halo-backend/plugins/bootstrap/js/npm.js old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/bootstrap/js/npm.js rename to src/main/resources/static/halo-backend/plugins/bootstrap/js/npm.js diff --git a/src/main/resources/static/plugins/bootstrapvalidator/css/bootstrapValidator.css b/src/main/resources/static/halo-backend/plugins/bootstrapvalidator/css/bootstrapValidator.css similarity index 100% rename from src/main/resources/static/plugins/bootstrapvalidator/css/bootstrapValidator.css rename to src/main/resources/static/halo-backend/plugins/bootstrapvalidator/css/bootstrapValidator.css diff --git a/src/main/resources/static/plugins/bootstrapvalidator/css/bootstrapValidator.min.css b/src/main/resources/static/halo-backend/plugins/bootstrapvalidator/css/bootstrapValidator.min.css similarity index 100% rename from src/main/resources/static/plugins/bootstrapvalidator/css/bootstrapValidator.min.css rename to src/main/resources/static/halo-backend/plugins/bootstrapvalidator/css/bootstrapValidator.min.css diff --git a/src/main/resources/static/plugins/bootstrapvalidator/js/bootstrapValidator.js b/src/main/resources/static/halo-backend/plugins/bootstrapvalidator/js/bootstrapValidator.js similarity index 100% rename from src/main/resources/static/plugins/bootstrapvalidator/js/bootstrapValidator.js rename to src/main/resources/static/halo-backend/plugins/bootstrapvalidator/js/bootstrapValidator.js diff --git a/src/main/resources/static/plugins/bootstrapvalidator/js/bootstrapValidator.min.js b/src/main/resources/static/halo-backend/plugins/bootstrapvalidator/js/bootstrapValidator.min.js similarity index 100% rename from src/main/resources/static/plugins/bootstrapvalidator/js/bootstrapValidator.min.js rename to src/main/resources/static/halo-backend/plugins/bootstrapvalidator/js/bootstrapValidator.min.js diff --git a/src/main/resources/static/plugins/bootstrapvalidator/js/language/zh_CN.js b/src/main/resources/static/halo-backend/plugins/bootstrapvalidator/js/language/zh_CN.js similarity index 100% rename from src/main/resources/static/plugins/bootstrapvalidator/js/language/zh_CN.js rename to src/main/resources/static/halo-backend/plugins/bootstrapvalidator/js/language/zh_CN.js diff --git a/src/main/resources/static/plugins/clipboard/clipboard.min.js b/src/main/resources/static/halo-backend/plugins/clipboard/clipboard.min.js old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/clipboard/clipboard.min.js rename to src/main/resources/static/halo-backend/plugins/clipboard/clipboard.min.js diff --git a/src/main/resources/static/halo-backend/plugins/datetimepicker/css/bootstrap-datetimepicker.css b/src/main/resources/static/halo-backend/plugins/datetimepicker/css/bootstrap-datetimepicker.css new file mode 100644 index 000000000..537c6a4ce --- /dev/null +++ b/src/main/resources/static/halo-backend/plugins/datetimepicker/css/bootstrap-datetimepicker.css @@ -0,0 +1,418 @@ +/*! + * Datetimepicker for Bootstrap + * + * Copyright 2012 Stefan Petre + * Improvements by Andrew Rowls + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + */ +.datetimepicker { + padding: 4px; + margin-top: 1px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + direction: ltr; +} + +.datetimepicker-inline { + width: 220px; +} + +.datetimepicker.datetimepicker-rtl { + direction: rtl; +} + +.datetimepicker.datetimepicker-rtl table tr td span { + float: right; +} + +.datetimepicker-dropdown, .datetimepicker-dropdown-left { + top: 0; + left: 0; +} + +[class*=" datetimepicker-dropdown"]:before { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #cccccc; + border-bottom-color: rgba(0, 0, 0, 0.2); + position: absolute; +} + +[class*=" datetimepicker-dropdown"]:after { + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + position: absolute; +} + +[class*=" datetimepicker-dropdown-top"]:before { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-top: 7px solid #cccccc; + border-top-color: rgba(0, 0, 0, 0.2); + border-bottom: 0; +} + +[class*=" datetimepicker-dropdown-top"]:after { + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-top: 6px solid #ffffff; + border-bottom: 0; +} + +.datetimepicker-dropdown-bottom-left:before { + top: -7px; + right: 6px; +} + +.datetimepicker-dropdown-bottom-left:after { + top: -6px; + right: 7px; +} + +.datetimepicker-dropdown-bottom-right:before { + top: -7px; + left: 6px; +} + +.datetimepicker-dropdown-bottom-right:after { + top: -6px; + left: 7px; +} + +.datetimepicker-dropdown-top-left:before { + bottom: -7px; + right: 6px; +} + +.datetimepicker-dropdown-top-left:after { + bottom: -6px; + right: 7px; +} + +.datetimepicker-dropdown-top-right:before { + bottom: -7px; + left: 6px; +} + +.datetimepicker-dropdown-top-right:after { + bottom: -6px; + left: 7px; +} + +.datetimepicker > div { + display: none; +} + +.datetimepicker.minutes div.datetimepicker-minutes { + display: block; +} + +.datetimepicker.hours div.datetimepicker-hours { + display: block; +} + +.datetimepicker.days div.datetimepicker-days { + display: block; +} + +.datetimepicker.months div.datetimepicker-months { + display: block; +} + +.datetimepicker.years div.datetimepicker-years { + display: block; +} + +.datetimepicker table { + margin: 0; +} + +.datetimepicker td, +.datetimepicker th { + text-align: center; + width: 20px; + height: 20px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + border: none; +} + +.table-striped .datetimepicker table tr td, +.table-striped .datetimepicker table tr th { + background-color: transparent; +} + +.datetimepicker table tr td.minute:hover { + background: #eeeeee; + cursor: pointer; +} + +.datetimepicker table tr td.hour:hover { + background: #eeeeee; + cursor: pointer; +} + +.datetimepicker table tr td.day:hover { + background: #eeeeee; + cursor: pointer; +} + +.datetimepicker table tr td.old, +.datetimepicker table tr td.new { + color: #999999; +} + +.datetimepicker table tr td.disabled, +.datetimepicker table tr td.disabled:hover { + background: none; + color: #999999; + cursor: default; +} + +.datetimepicker table tr td.today, +.datetimepicker table tr td.today:hover, +.datetimepicker table tr td.today.disabled, +.datetimepicker table tr td.today.disabled:hover { + background-color: #fde19a; + background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a); + background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a)); + background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a); + background-image: -o-linear-gradient(top, #fdd49a, #fdf59a); + background-image: linear-gradient(to bottom, #fdd49a, #fdf59a); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0); + border-color: #fdf59a #fdf59a #fbed50; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.datetimepicker table tr td.today:hover, +.datetimepicker table tr td.today:hover:hover, +.datetimepicker table tr td.today.disabled:hover, +.datetimepicker table tr td.today.disabled:hover:hover, +.datetimepicker table tr td.today:active, +.datetimepicker table tr td.today:hover:active, +.datetimepicker table tr td.today.disabled:active, +.datetimepicker table tr td.today.disabled:hover:active, +.datetimepicker table tr td.today.active, +.datetimepicker table tr td.today:hover.active, +.datetimepicker table tr td.today.disabled.active, +.datetimepicker table tr td.today.disabled:hover.active, +.datetimepicker table tr td.today.disabled, +.datetimepicker table tr td.today:hover.disabled, +.datetimepicker table tr td.today.disabled.disabled, +.datetimepicker table tr td.today.disabled:hover.disabled, +.datetimepicker table tr td.today[disabled], +.datetimepicker table tr td.today:hover[disabled], +.datetimepicker table tr td.today.disabled[disabled], +.datetimepicker table tr td.today.disabled:hover[disabled] { + background-color: #fdf59a; +} + +.datetimepicker table tr td.today:active, +.datetimepicker table tr td.today:hover:active, +.datetimepicker table tr td.today.disabled:active, +.datetimepicker table tr td.today.disabled:hover:active, +.datetimepicker table tr td.today.active, +.datetimepicker table tr td.today:hover.active, +.datetimepicker table tr td.today.disabled.active, +.datetimepicker table tr td.today.disabled:hover.active { + background-color: #fbf069; +} + +.datetimepicker table tr td.active, +.datetimepicker table tr td.active:hover, +.datetimepicker table tr td.active.disabled, +.datetimepicker table tr td.active.disabled:hover { + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -ms-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.datetimepicker table tr td.active:hover, +.datetimepicker table tr td.active:hover:hover, +.datetimepicker table tr td.active.disabled:hover, +.datetimepicker table tr td.active.disabled:hover:hover, +.datetimepicker table tr td.active:active, +.datetimepicker table tr td.active:hover:active, +.datetimepicker table tr td.active.disabled:active, +.datetimepicker table tr td.active.disabled:hover:active, +.datetimepicker table tr td.active.active, +.datetimepicker table tr td.active:hover.active, +.datetimepicker table tr td.active.disabled.active, +.datetimepicker table tr td.active.disabled:hover.active, +.datetimepicker table tr td.active.disabled, +.datetimepicker table tr td.active:hover.disabled, +.datetimepicker table tr td.active.disabled.disabled, +.datetimepicker table tr td.active.disabled:hover.disabled, +.datetimepicker table tr td.active[disabled], +.datetimepicker table tr td.active:hover[disabled], +.datetimepicker table tr td.active.disabled[disabled], +.datetimepicker table tr td.active.disabled:hover[disabled] { + background-color: #0044cc; +} + +.datetimepicker table tr td.active:active, +.datetimepicker table tr td.active:hover:active, +.datetimepicker table tr td.active.disabled:active, +.datetimepicker table tr td.active.disabled:hover:active, +.datetimepicker table tr td.active.active, +.datetimepicker table tr td.active:hover.active, +.datetimepicker table tr td.active.disabled.active, +.datetimepicker table tr td.active.disabled:hover.active { + background-color: #003399; +} + +.datetimepicker table tr td span { + display: block; + width: 23%; + height: 54px; + line-height: 54px; + float: left; + margin: 1%; + cursor: pointer; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.datetimepicker .datetimepicker-hours span { + height: 26px; + line-height: 26px; +} + +.datetimepicker .datetimepicker-hours table tr td span.hour_am, +.datetimepicker .datetimepicker-hours table tr td span.hour_pm { + width: 14.6%; +} + +.datetimepicker .datetimepicker-hours fieldset legend, +.datetimepicker .datetimepicker-minutes fieldset legend { + margin-bottom: inherit; + line-height: 30px; +} + +.datetimepicker .datetimepicker-minutes span { + height: 26px; + line-height: 26px; +} + +.datetimepicker table tr td span:hover { + background: #eeeeee; +} + +.datetimepicker table tr td span.disabled, +.datetimepicker table tr td span.disabled:hover { + background: none; + color: #999999; + cursor: default; +} + +.datetimepicker table tr td span.active, +.datetimepicker table tr td span.active:hover, +.datetimepicker table tr td span.active.disabled, +.datetimepicker table tr td span.active.disabled:hover { + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -ms-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.datetimepicker table tr td span.active:hover, +.datetimepicker table tr td span.active:hover:hover, +.datetimepicker table tr td span.active.disabled:hover, +.datetimepicker table tr td span.active.disabled:hover:hover, +.datetimepicker table tr td span.active:active, +.datetimepicker table tr td span.active:hover:active, +.datetimepicker table tr td span.active.disabled:active, +.datetimepicker table tr td span.active.disabled:hover:active, +.datetimepicker table tr td span.active.active, +.datetimepicker table tr td span.active:hover.active, +.datetimepicker table tr td span.active.disabled.active, +.datetimepicker table tr td span.active.disabled:hover.active, +.datetimepicker table tr td span.active.disabled, +.datetimepicker table tr td span.active:hover.disabled, +.datetimepicker table tr td span.active.disabled.disabled, +.datetimepicker table tr td span.active.disabled:hover.disabled, +.datetimepicker table tr td span.active[disabled], +.datetimepicker table tr td span.active:hover[disabled], +.datetimepicker table tr td span.active.disabled[disabled], +.datetimepicker table tr td span.active.disabled:hover[disabled] { + background-color: #0044cc; +} + +.datetimepicker table tr td span.active:active, +.datetimepicker table tr td span.active:hover:active, +.datetimepicker table tr td span.active.disabled:active, +.datetimepicker table tr td span.active.disabled:hover:active, +.datetimepicker table tr td span.active.active, +.datetimepicker table tr td span.active:hover.active, +.datetimepicker table tr td span.active.disabled.active, +.datetimepicker table tr td span.active.disabled:hover.active { + background-color: #003399; +} + +.datetimepicker table tr td span.old { + color: #999999; +} + +.datetimepicker th.switch { + width: 145px; +} + +.datetimepicker th span.glyphicon { + pointer-events: none; +} + +.datetimepicker thead tr:first-child th, +.datetimepicker tfoot th { + cursor: pointer; +} + +.datetimepicker thead tr:first-child th:hover, +.datetimepicker tfoot th:hover { + background: #eeeeee; +} + +.input-append.date .add-on i, +.input-prepend.date .add-on i, +.input-group.date .input-group-addon span { + cursor: pointer; + width: 14px; + height: 14px; +} diff --git a/src/main/resources/static/halo-backend/plugins/datetimepicker/css/bootstrap-datetimepicker.min.css b/src/main/resources/static/halo-backend/plugins/datetimepicker/css/bootstrap-datetimepicker.min.css new file mode 100644 index 000000000..78485fee7 --- /dev/null +++ b/src/main/resources/static/halo-backend/plugins/datetimepicker/css/bootstrap-datetimepicker.min.css @@ -0,0 +1,9 @@ +/*! + * Datetimepicker for Bootstrap + * + * Copyright 2012 Stefan Petre + * Improvements by Andrew Rowls + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + */.datetimepicker{padding:4px;margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;direction:ltr}.datetimepicker-inline{width:220px}.datetimepicker.datetimepicker-rtl{direction:rtl}.datetimepicker.datetimepicker-rtl table tr td span{float:right}.datetimepicker-dropdown,.datetimepicker-dropdown-left{top:0;left:0}[class*=" datetimepicker-dropdown"]:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute}[class*=" datetimepicker-dropdown"]:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute}[class*=" datetimepicker-dropdown-top"]:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);border-bottom:0}[class*=" datetimepicker-dropdown-top"]:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;border-bottom:0}.datetimepicker-dropdown-bottom-left:before{top:-7px;right:6px}.datetimepicker-dropdown-bottom-left:after{top:-6px;right:7px}.datetimepicker-dropdown-bottom-right:before{top:-7px;left:6px}.datetimepicker-dropdown-bottom-right:after{top:-6px;left:7px}.datetimepicker-dropdown-top-left:before{bottom:-7px;right:6px}.datetimepicker-dropdown-top-left:after{bottom:-6px;right:7px}.datetimepicker-dropdown-top-right:before{bottom:-7px;left:6px}.datetimepicker-dropdown-top-right:after{bottom:-6px;left:7px}.datetimepicker>div{display:none}.datetimepicker.minutes div.datetimepicker-minutes{display:block}.datetimepicker.hours div.datetimepicker-hours{display:block}.datetimepicker.days div.datetimepicker-days{display:block}.datetimepicker.months div.datetimepicker-months{display:block}.datetimepicker.years div.datetimepicker-years{display:block}.datetimepicker table{margin:0}.datetimepicker td,.datetimepicker th{text-align:center;width:20px;height:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border:0}.table-striped .datetimepicker table tr td,.table-striped .datetimepicker table tr th{background-color:transparent}.datetimepicker table tr td.minute:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.hour:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.day:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.old,.datetimepicker table tr td.new{color:#999}.datetimepicker table tr td.disabled,.datetimepicker table tr td.disabled:hover{background:0;color:#999;cursor:default}.datetimepicker table tr td.today,.datetimepicker table tr td.today:hover,.datetimepicker table tr td.today.disabled,.datetimepicker table tr td.today.disabled:hover{background-color:#fde19a;background-image:-moz-linear-gradient(top,#fdd49a,#fdf59a);background-image:-ms-linear-gradient(top,#fdd49a,#fdf59a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdd49a),to(#fdf59a));background-image:-webkit-linear-gradient(top,#fdd49a,#fdf59a);background-image:-o-linear-gradient(top,#fdd49a,#fdf59a);background-image:linear-gradient(to bottom,#fdd49a,#fdf59a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a',endColorstr='#fdf59a',GradientType=0);border-color:#fdf59a #fdf59a #fbed50;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.datetimepicker table tr td.today:hover,.datetimepicker table tr td.today:hover:hover,.datetimepicker table tr td.today.disabled:hover,.datetimepicker table tr td.today.disabled:hover:hover,.datetimepicker table tr td.today:active,.datetimepicker table tr td.today:hover:active,.datetimepicker table tr td.today.disabled:active,.datetimepicker table tr td.today.disabled:hover:active,.datetimepicker table tr td.today.active,.datetimepicker table tr td.today:hover.active,.datetimepicker table tr td.today.disabled.active,.datetimepicker table tr td.today.disabled:hover.active,.datetimepicker table tr td.today.disabled,.datetimepicker table tr td.today:hover.disabled,.datetimepicker table tr td.today.disabled.disabled,.datetimepicker table tr td.today.disabled:hover.disabled,.datetimepicker table tr td.today[disabled],.datetimepicker table tr td.today:hover[disabled],.datetimepicker table tr td.today.disabled[disabled],.datetimepicker table tr td.today.disabled:hover[disabled]{background-color:#fdf59a}.datetimepicker table tr td.today:active,.datetimepicker table tr td.today:hover:active,.datetimepicker table tr td.today.disabled:active,.datetimepicker table tr td.today.disabled:hover:active,.datetimepicker table tr td.today.active,.datetimepicker table tr td.today:hover.active,.datetimepicker table tr td.today.disabled.active,.datetimepicker table tr td.today.disabled:hover.active{background-color:#fbf069}.datetimepicker table tr td.active,.datetimepicker table tr td.active:hover,.datetimepicker table tr td.active.disabled,.datetimepicker table tr td.active.disabled:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-ms-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc',endColorstr='#0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datetimepicker table tr td.active:hover,.datetimepicker table tr td.active:hover:hover,.datetimepicker table tr td.active.disabled:hover,.datetimepicker table tr td.active.disabled:hover:hover,.datetimepicker table tr td.active:active,.datetimepicker table tr td.active:hover:active,.datetimepicker table tr td.active.disabled:active,.datetimepicker table tr td.active.disabled:hover:active,.datetimepicker table tr td.active.active,.datetimepicker table tr td.active:hover.active,.datetimepicker table tr td.active.disabled.active,.datetimepicker table tr td.active.disabled:hover.active,.datetimepicker table tr td.active.disabled,.datetimepicker table tr td.active:hover.disabled,.datetimepicker table tr td.active.disabled.disabled,.datetimepicker table tr td.active.disabled:hover.disabled,.datetimepicker table tr td.active[disabled],.datetimepicker table tr td.active:hover[disabled],.datetimepicker table tr td.active.disabled[disabled],.datetimepicker table tr td.active.disabled:hover[disabled]{background-color:#04c}.datetimepicker table tr td.active:active,.datetimepicker table tr td.active:hover:active,.datetimepicker table tr td.active.disabled:active,.datetimepicker table tr td.active.disabled:hover:active,.datetimepicker table tr td.active.active,.datetimepicker table tr td.active:hover.active,.datetimepicker table tr td.active.disabled.active,.datetimepicker table tr td.active.disabled:hover.active{background-color:#039}.datetimepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.datetimepicker .datetimepicker-hours span{height:26px;line-height:26px}.datetimepicker .datetimepicker-hours table tr td span.hour_am,.datetimepicker .datetimepicker-hours table tr td span.hour_pm{width:14.6%}.datetimepicker .datetimepicker-hours fieldset legend,.datetimepicker .datetimepicker-minutes fieldset legend{margin-bottom:inherit;line-height:30px}.datetimepicker .datetimepicker-minutes span{height:26px;line-height:26px}.datetimepicker table tr td span:hover{background:#eee}.datetimepicker table tr td span.disabled,.datetimepicker table tr td span.disabled:hover{background:0;color:#999;cursor:default}.datetimepicker table tr td span.active,.datetimepicker table tr td span.active:hover,.datetimepicker table tr td span.active.disabled,.datetimepicker table tr td span.active.disabled:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-ms-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc',endColorstr='#0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datetimepicker table tr td span.active:hover,.datetimepicker table tr td span.active:hover:hover,.datetimepicker table tr td span.active.disabled:hover,.datetimepicker table tr td span.active.disabled:hover:hover,.datetimepicker table tr td span.active:active,.datetimepicker table tr td span.active:hover:active,.datetimepicker table tr td span.active.disabled:active,.datetimepicker table tr td span.active.disabled:hover:active,.datetimepicker table tr td span.active.active,.datetimepicker table tr td span.active:hover.active,.datetimepicker table tr td span.active.disabled.active,.datetimepicker table tr td span.active.disabled:hover.active,.datetimepicker table tr td span.active.disabled,.datetimepicker table tr td span.active:hover.disabled,.datetimepicker table tr td span.active.disabled.disabled,.datetimepicker table tr td span.active.disabled:hover.disabled,.datetimepicker table tr td span.active[disabled],.datetimepicker table tr td span.active:hover[disabled],.datetimepicker table tr td span.active.disabled[disabled],.datetimepicker table tr td span.active.disabled:hover[disabled]{background-color:#04c}.datetimepicker table tr td span.active:active,.datetimepicker table tr td span.active:hover:active,.datetimepicker table tr td span.active.disabled:active,.datetimepicker table tr td span.active.disabled:hover:active,.datetimepicker table tr td span.active.active,.datetimepicker table tr td span.active:hover.active,.datetimepicker table tr td span.active.disabled.active,.datetimepicker table tr td span.active.disabled:hover.active{background-color:#039}.datetimepicker table tr td span.old{color:#999}.datetimepicker th.switch{width:145px}.datetimepicker th span.glyphicon{pointer-events:none}.datetimepicker thead tr:first-child th,.datetimepicker tfoot th{cursor:pointer}.datetimepicker thead tr:first-child th:hover,.datetimepicker tfoot th:hover{background:#eee}.input-append.date .add-on i,.input-prepend.date .add-on i,.input-group.date .input-group-addon span{cursor:pointer;width:14px;height:14px} \ No newline at end of file diff --git a/src/main/resources/static/halo-backend/plugins/datetimepicker/js/bootstrap-datetimepicker.js b/src/main/resources/static/halo-backend/plugins/datetimepicker/js/bootstrap-datetimepicker.js new file mode 100644 index 000000000..f66d69c13 --- /dev/null +++ b/src/main/resources/static/halo-backend/plugins/datetimepicker/js/bootstrap-datetimepicker.js @@ -0,0 +1,1967 @@ +/* ========================================================= + * bootstrap-datetimepicker.js + * ========================================================= + * Copyright 2012 Stefan Petre + * + * Improvements by Andrew Rowls + * Improvements by Sébastien Malot + * Improvements by Yun Lai + * Improvements by Kenneth Henderick + * Improvements by CuGBabyBeaR + * Improvements by Christian Vaas + * + * Project URL : http://www.malot.fr/bootstrap-datetimepicker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================= */ + +(function(factory){ + if (typeof define === 'function' && define.amd) + define(['jquery'], factory); + else if (typeof exports === 'object') + factory(require('jquery')); + else + factory(jQuery); + +}(function($, undefined){ + + // Add ECMA262-5 Array methods if not supported natively (IE8) + if (!('indexOf' in Array.prototype)) { + Array.prototype.indexOf = function (find, i) { + if (i === undefined) i = 0; + if (i < 0) i += this.length; + if (i < 0) i = 0; + for (var n = this.length; i < n; i++) { + if (i in this && this[i] === find) { + return i; + } + } + return -1; + } + } + + // Add timezone abbreviation support for ie6+, Chrome, Firefox + function timeZoneAbbreviation() { + var abbreviation, date, formattedStr, i, len, matchedStrings, ref, str; + date = (new Date()).toString(); + formattedStr = ((ref = date.split('(')[1]) != null ? ref.slice(0, -1) : 0) || date.split(' '); + if (formattedStr instanceof Array) { + matchedStrings = []; + for (var i = 0, len = formattedStr.length; i < len; i++) { + str = formattedStr[i]; + if ((abbreviation = (ref = str.match(/\b[A-Z]+\b/)) !== null) ? ref[0] : 0) { + matchedStrings.push(abbreviation); + } + } + formattedStr = matchedStrings.pop(); + } + return formattedStr; + } + + function UTCDate() { + return new Date(Date.UTC.apply(Date, arguments)); + } + + // Picker object + var Datetimepicker = function (element, options) { + var that = this; + + this.element = $(element); + + // add container for single page application + // when page switch the datetimepicker div will be removed also. + this.container = options.container || 'body'; + + this.language = options.language || this.element.data('date-language') || 'en'; + this.language = this.language in dates ? this.language : this.language.split('-')[0]; // fr-CA fallback to fr + this.language = this.language in dates ? this.language : 'en'; + this.isRTL = dates[this.language].rtl || false; + this.formatType = options.formatType || this.element.data('format-type') || 'standard'; + this.format = DPGlobal.parseFormat(options.format || this.element.data('date-format') || dates[this.language].format || DPGlobal.getDefaultFormat(this.formatType, 'input'), this.formatType); + this.isInline = false; + this.isVisible = false; + this.isInput = this.element.is('input'); + this.fontAwesome = options.fontAwesome || this.element.data('font-awesome') || false; + + this.bootcssVer = options.bootcssVer || (this.isInput ? (this.element.is('.form-control') ? 3 : 2) : ( this.bootcssVer = this.element.is('.input-group') ? 3 : 2 )); + + this.component = this.element.is('.date') ? ( this.bootcssVer === 3 ? this.element.find('.input-group-addon .glyphicon-th, .input-group-addon .glyphicon-time, .input-group-addon .glyphicon-remove, .input-group-addon .glyphicon-calendar, .input-group-addon .fa-calendar, .input-group-addon .fa-clock-o').parent() : this.element.find('.add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar, .add-on .fa-calendar, .add-on .fa-clock-o').parent()) : false; + this.componentReset = this.element.is('.date') ? ( this.bootcssVer === 3 ? this.element.find('.input-group-addon .glyphicon-remove, .input-group-addon .fa-times').parent():this.element.find('.add-on .icon-remove, .add-on .fa-times').parent()) : false; + this.hasInput = this.component && this.element.find('input').length; + if (this.component && this.component.length === 0) { + this.component = false; + } + this.linkField = options.linkField || this.element.data('link-field') || false; + this.linkFormat = DPGlobal.parseFormat(options.linkFormat || this.element.data('link-format') || DPGlobal.getDefaultFormat(this.formatType, 'link'), this.formatType); + this.minuteStep = options.minuteStep || this.element.data('minute-step') || 5; + this.pickerPosition = options.pickerPosition || this.element.data('picker-position') || 'bottom-right'; + this.showMeridian = options.showMeridian || this.element.data('show-meridian') || false; + this.initialDate = options.initialDate || new Date(); + this.zIndex = options.zIndex || this.element.data('z-index') || undefined; + this.title = typeof options.title === 'undefined' ? false : options.title; + this.timezone = options.timezone || timeZoneAbbreviation(); + + this.icons = { + leftArrow: this.fontAwesome ? 'fa-arrow-left' : (this.bootcssVer === 3 ? 'glyphicon-arrow-left' : 'icon-arrow-left'), + rightArrow: this.fontAwesome ? 'fa-arrow-right' : (this.bootcssVer === 3 ? 'glyphicon-arrow-right' : 'icon-arrow-right') + } + this.icontype = this.fontAwesome ? 'fa' : 'glyphicon'; + + this._attachEvents(); + + this.clickedOutside = function (e) { + // Clicked outside the datetimepicker, hide it + if ($(e.target).closest('.datetimepicker').length === 0) { + that.hide(); + } + } + + this.formatViewType = 'datetime'; + if ('formatViewType' in options) { + this.formatViewType = options.formatViewType; + } else if ('formatViewType' in this.element.data()) { + this.formatViewType = this.element.data('formatViewType'); + } + + this.minView = 0; + if ('minView' in options) { + this.minView = options.minView; + } else if ('minView' in this.element.data()) { + this.minView = this.element.data('min-view'); + } + this.minView = DPGlobal.convertViewMode(this.minView); + + this.maxView = DPGlobal.modes.length - 1; + if ('maxView' in options) { + this.maxView = options.maxView; + } else if ('maxView' in this.element.data()) { + this.maxView = this.element.data('max-view'); + } + this.maxView = DPGlobal.convertViewMode(this.maxView); + + this.wheelViewModeNavigation = false; + if ('wheelViewModeNavigation' in options) { + this.wheelViewModeNavigation = options.wheelViewModeNavigation; + } else if ('wheelViewModeNavigation' in this.element.data()) { + this.wheelViewModeNavigation = this.element.data('view-mode-wheel-navigation'); + } + + this.wheelViewModeNavigationInverseDirection = false; + + if ('wheelViewModeNavigationInverseDirection' in options) { + this.wheelViewModeNavigationInverseDirection = options.wheelViewModeNavigationInverseDirection; + } else if ('wheelViewModeNavigationInverseDirection' in this.element.data()) { + this.wheelViewModeNavigationInverseDirection = this.element.data('view-mode-wheel-navigation-inverse-dir'); + } + + this.wheelViewModeNavigationDelay = 100; + if ('wheelViewModeNavigationDelay' in options) { + this.wheelViewModeNavigationDelay = options.wheelViewModeNavigationDelay; + } else if ('wheelViewModeNavigationDelay' in this.element.data()) { + this.wheelViewModeNavigationDelay = this.element.data('view-mode-wheel-navigation-delay'); + } + + this.startViewMode = 2; + if ('startView' in options) { + this.startViewMode = options.startView; + } else if ('startView' in this.element.data()) { + this.startViewMode = this.element.data('start-view'); + } + this.startViewMode = DPGlobal.convertViewMode(this.startViewMode); + this.viewMode = this.startViewMode; + + this.viewSelect = this.minView; + if ('viewSelect' in options) { + this.viewSelect = options.viewSelect; + } else if ('viewSelect' in this.element.data()) { + this.viewSelect = this.element.data('view-select'); + } + this.viewSelect = DPGlobal.convertViewMode(this.viewSelect); + + this.forceParse = true; + if ('forceParse' in options) { + this.forceParse = options.forceParse; + } else if ('dateForceParse' in this.element.data()) { + this.forceParse = this.element.data('date-force-parse'); + } + var template = this.bootcssVer === 3 ? DPGlobal.templateV3 : DPGlobal.template; + while (template.indexOf('{iconType}') !== -1) { + template = template.replace('{iconType}', this.icontype); + } + while (template.indexOf('{leftArrow}') !== -1) { + template = template.replace('{leftArrow}', this.icons.leftArrow); + } + while (template.indexOf('{rightArrow}') !== -1) { + template = template.replace('{rightArrow}', this.icons.rightArrow); + } + this.picker = $(template) + .appendTo(this.isInline ? this.element : this.container) // 'body') + .on({ + click: $.proxy(this.click, this), + mousedown: $.proxy(this.mousedown, this) + }); + + if (this.wheelViewModeNavigation) { + if ($.fn.mousewheel) { + this.picker.on({mousewheel: $.proxy(this.mousewheel, this)}); + } else { + console.log('Mouse Wheel event is not supported. Please include the jQuery Mouse Wheel plugin before enabling this option'); + } + } + + if (this.isInline) { + this.picker.addClass('datetimepicker-inline'); + } else { + this.picker.addClass('datetimepicker-dropdown-' + this.pickerPosition + ' dropdown-menu'); + } + if (this.isRTL) { + this.picker.addClass('datetimepicker-rtl'); + var selector = this.bootcssVer === 3 ? '.prev span, .next span' : '.prev i, .next i'; + this.picker.find(selector).toggleClass(this.icons.leftArrow + ' ' + this.icons.rightArrow); + } + + $(document).on('mousedown touchend', this.clickedOutside); + + this.autoclose = false; + if ('autoclose' in options) { + this.autoclose = options.autoclose; + } else if ('dateAutoclose' in this.element.data()) { + this.autoclose = this.element.data('date-autoclose'); + } + + this.keyboardNavigation = true; + if ('keyboardNavigation' in options) { + this.keyboardNavigation = options.keyboardNavigation; + } else if ('dateKeyboardNavigation' in this.element.data()) { + this.keyboardNavigation = this.element.data('date-keyboard-navigation'); + } + + this.todayBtn = (options.todayBtn || this.element.data('date-today-btn') || false); + this.clearBtn = (options.clearBtn || this.element.data('date-clear-btn') || false); + this.todayHighlight = (options.todayHighlight || this.element.data('date-today-highlight') || false); + + this.weekStart = 0; + if (typeof options.weekStart !== 'undefined') { + this.weekStart = options.weekStart; + } else if (typeof this.element.data('date-weekstart') !== 'undefined') { + this.weekStart = this.element.data('date-weekstart'); + } else if (typeof dates[this.language].weekStart !== 'undefined') { + this.weekStart = dates[this.language].weekStart; + } + this.weekStart = this.weekStart % 7; + this.weekEnd = ((this.weekStart + 6) % 7); + this.onRenderDay = function (date) { + var render = (options.onRenderDay || function () { return []; })(date); + if (typeof render === 'string') { + render = [render]; + } + var res = ['day']; + return res.concat((render ? render : [])); + }; + this.onRenderHour = function (date) { + var render = (options.onRenderHour || function () { return []; })(date); + var res = ['hour']; + if (typeof render === 'string') { + render = [render]; + } + return res.concat((render ? render : [])); + }; + this.onRenderMinute = function (date) { + var render = (options.onRenderMinute || function () { return []; })(date); + var res = ['minute']; + if (typeof render === 'string') { + render = [render]; + } + if (date < this.startDate || date > this.endDate) { + res.push('disabled'); + } else if (Math.floor(this.date.getUTCMinutes() / this.minuteStep) === Math.floor(date.getUTCMinutes() / this.minuteStep)) { + res.push('active'); + } + return res.concat((render ? render : [])); + }; + this.onRenderYear = function (date) { + var render = (options.onRenderYear || function () { return []; })(date); + var res = ['year']; + if (typeof render === 'string') { + render = [render]; + } + if (this.date.getUTCFullYear() === date.getUTCFullYear()) { + res.push('active'); + } + var currentYear = date.getUTCFullYear(); + var endYear = this.endDate.getUTCFullYear(); + if (date < this.startDate || currentYear > endYear) { + res.push('disabled'); + } + return res.concat((render ? render : [])); + } + this.onRenderMonth = function (date) { + var render = (options.onRenderMonth || function () { return []; })(date); + var res = ['month']; + if (typeof render === 'string') { + render = [render]; + } + return res.concat((render ? render : [])); + } + this.startDate = new Date(-8639968443048000); + this.endDate = new Date(8639968443048000); + this.datesDisabled = []; + this.daysOfWeekDisabled = []; + this.setStartDate(options.startDate || this.element.data('date-startdate')); + this.setEndDate(options.endDate || this.element.data('date-enddate')); + this.setDatesDisabled(options.datesDisabled || this.element.data('date-dates-disabled')); + this.setDaysOfWeekDisabled(options.daysOfWeekDisabled || this.element.data('date-days-of-week-disabled')); + this.setMinutesDisabled(options.minutesDisabled || this.element.data('date-minute-disabled')); + this.setHoursDisabled(options.hoursDisabled || this.element.data('date-hour-disabled')); + this.fillDow(); + this.fillMonths(); + this.update(); + this.showMode(); + + if (this.isInline) { + this.show(); + } + }; + + Datetimepicker.prototype = { + constructor: Datetimepicker, + + _events: [], + _attachEvents: function () { + this._detachEvents(); + if (this.isInput) { // single input + this._events = [ + [this.element, { + focus: $.proxy(this.show, this), + keyup: $.proxy(this.update, this), + keydown: $.proxy(this.keydown, this) + }] + ]; + } + else if (this.component && this.hasInput) { // component: input + button + this._events = [ + // For components that are not readonly, allow keyboard nav + [this.element.find('input'), { + focus: $.proxy(this.show, this), + keyup: $.proxy(this.update, this), + keydown: $.proxy(this.keydown, this) + }], + [this.component, { + click: $.proxy(this.show, this) + }] + ]; + if (this.componentReset) { + this._events.push([ + this.componentReset, + {click: $.proxy(this.reset, this)} + ]); + } + } + else if (this.element.is('div')) { // inline datetimepicker + this.isInline = true; + } + else { + this._events = [ + [this.element, { + click: $.proxy(this.show, this) + }] + ]; + } + for (var i = 0, el, ev; i < this._events.length; i++) { + el = this._events[i][0]; + ev = this._events[i][1]; + el.on(ev); + } + }, + + _detachEvents: function () { + for (var i = 0, el, ev; i < this._events.length; i++) { + el = this._events[i][0]; + ev = this._events[i][1]; + el.off(ev); + } + this._events = []; + }, + + show: function (e) { + this.picker.show(); + this.height = this.component ? this.component.outerHeight() : this.element.outerHeight(); + if (this.forceParse) { + this.update(); + } + this.place(); + $(window).on('resize', $.proxy(this.place, this)); + if (e) { + e.stopPropagation(); + e.preventDefault(); + } + this.isVisible = true; + this.element.trigger({ + type: 'show', + date: this.date + }); + }, + + hide: function () { + if (!this.isVisible) return; + if (this.isInline) return; + this.picker.hide(); + $(window).off('resize', this.place); + this.viewMode = this.startViewMode; + this.showMode(); + if (!this.isInput) { + $(document).off('mousedown', this.hide); + } + + if ( + this.forceParse && + ( + this.isInput && this.element.val() || + this.hasInput && this.element.find('input').val() + ) + ) + this.setValue(); + this.isVisible = false; + this.element.trigger({ + type: 'hide', + date: this.date + }); + }, + + remove: function () { + this._detachEvents(); + $(document).off('mousedown', this.clickedOutside); + this.picker.remove(); + delete this.picker; + delete this.element.data().datetimepicker; + }, + + getDate: function () { + var d = this.getUTCDate(); + if (d === null) { + return null; + } + return new Date(d.getTime() + (d.getTimezoneOffset() * 60000)); + }, + + getUTCDate: function () { + return this.date; + }, + + getInitialDate: function () { + return this.initialDate + }, + + setInitialDate: function (initialDate) { + this.initialDate = initialDate; + }, + + setDate: function (d) { + this.setUTCDate(new Date(d.getTime() - (d.getTimezoneOffset() * 60000))); + }, + + setUTCDate: function (d) { + if (d >= this.startDate && d <= this.endDate) { + this.date = d; + this.setValue(); + this.viewDate = this.date; + this.fill(); + } else { + this.element.trigger({ + type: 'outOfRange', + date: d, + startDate: this.startDate, + endDate: this.endDate + }); + } + }, + + setFormat: function (format) { + this.format = DPGlobal.parseFormat(format, this.formatType); + var element; + if (this.isInput) { + element = this.element; + } else if (this.component) { + element = this.element.find('input'); + } + if (element && element.val()) { + this.setValue(); + } + }, + + setValue: function () { + var formatted = this.getFormattedDate(); + if (!this.isInput) { + if (this.component) { + this.element.find('input').val(formatted); + } + this.element.data('date', formatted); + } else { + this.element.val(formatted); + } + if (this.linkField) { + $('#' + this.linkField).val(this.getFormattedDate(this.linkFormat)); + } + }, + + getFormattedDate: function (format) { + format = format || this.format; + return DPGlobal.formatDate(this.date, format, this.language, this.formatType, this.timezone); + }, + + setStartDate: function (startDate) { + this.startDate = startDate || this.startDate; + if (this.startDate.valueOf() !== 8639968443048000) { + this.startDate = DPGlobal.parseDate(this.startDate, this.format, this.language, this.formatType, this.timezone); + } + this.update(); + this.updateNavArrows(); + }, + + setEndDate: function (endDate) { + this.endDate = endDate || this.endDate; + if (this.endDate.valueOf() !== 8639968443048000) { + this.endDate = DPGlobal.parseDate(this.endDate, this.format, this.language, this.formatType, this.timezone); + } + this.update(); + this.updateNavArrows(); + }, + + setDatesDisabled: function (datesDisabled) { + this.datesDisabled = datesDisabled || []; + if (!$.isArray(this.datesDisabled)) { + this.datesDisabled = this.datesDisabled.split(/,\s*/); + } + var mThis = this; + this.datesDisabled = $.map(this.datesDisabled, function (d) { + return DPGlobal.parseDate(d, mThis.format, mThis.language, mThis.formatType, mThis.timezone).toDateString(); + }); + this.update(); + this.updateNavArrows(); + }, + + setTitle: function (selector, value) { + return this.picker.find(selector) + .find('th:eq(1)') + .text(this.title === false ? value : this.title); + }, + + setDaysOfWeekDisabled: function (daysOfWeekDisabled) { + this.daysOfWeekDisabled = daysOfWeekDisabled || []; + if (!$.isArray(this.daysOfWeekDisabled)) { + this.daysOfWeekDisabled = this.daysOfWeekDisabled.split(/,\s*/); + } + this.daysOfWeekDisabled = $.map(this.daysOfWeekDisabled, function (d) { + return parseInt(d, 10); + }); + this.update(); + this.updateNavArrows(); + }, + + setMinutesDisabled: function (minutesDisabled) { + this.minutesDisabled = minutesDisabled || []; + if (!$.isArray(this.minutesDisabled)) { + this.minutesDisabled = this.minutesDisabled.split(/,\s*/); + } + this.minutesDisabled = $.map(this.minutesDisabled, function (d) { + return parseInt(d, 10); + }); + this.update(); + this.updateNavArrows(); + }, + + setHoursDisabled: function (hoursDisabled) { + this.hoursDisabled = hoursDisabled || []; + if (!$.isArray(this.hoursDisabled)) { + this.hoursDisabled = this.hoursDisabled.split(/,\s*/); + } + this.hoursDisabled = $.map(this.hoursDisabled, function (d) { + return parseInt(d, 10); + }); + this.update(); + this.updateNavArrows(); + }, + + place: function () { + if (this.isInline) return; + + if (!this.zIndex) { + var index_highest = 0; + $('div').each(function () { + var index_current = parseInt($(this).css('zIndex'), 10); + if (index_current > index_highest) { + index_highest = index_current; + } + }); + this.zIndex = index_highest + 10; + } + + var offset, top, left, containerOffset; + if (this.container instanceof $) { + containerOffset = this.container.offset(); + } else { + containerOffset = $(this.container).offset(); + } + + if (this.component) { + offset = this.component.offset(); + left = offset.left; + if (this.pickerPosition === 'bottom-left' || this.pickerPosition === 'top-left') { + left += this.component.outerWidth() - this.picker.outerWidth(); + } + } else { + offset = this.element.offset(); + left = offset.left; + if (this.pickerPosition === 'bottom-left' || this.pickerPosition === 'top-left') { + left += this.element.outerWidth() - this.picker.outerWidth(); + } + } + + var bodyWidth = document.body.clientWidth || window.innerWidth; + if (left + 220 > bodyWidth) { + left = bodyWidth - 220; + } + + if (this.pickerPosition === 'top-left' || this.pickerPosition === 'top-right') { + top = offset.top - this.picker.outerHeight(); + } else { + top = offset.top + this.height; + } + + top = top - containerOffset.top; + left = left - containerOffset.left; + + this.picker.css({ + top: top, + left: left, + zIndex: this.zIndex + }); + }, + + hour_minute: "^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]", + + update: function () { + var date, fromArgs = false; + if (arguments && arguments.length && (typeof arguments[0] === 'string' || arguments[0] instanceof Date)) { + date = arguments[0]; + fromArgs = true; + } else { + date = (this.isInput ? this.element.val() : this.element.find('input').val()) || this.element.data('date') || this.initialDate; + if (typeof date === 'string') { + date = date.replace(/^\s+|\s+$/g,''); + } + } + + if (!date) { + date = new Date(); + fromArgs = false; + } + + if (typeof date === "string") { + if (new RegExp(this.hour_minute).test(date) || new RegExp(this.hour_minute + ":[0-5][0-9]").test(date)) { + date = this.getDate() + } + } + + this.date = DPGlobal.parseDate(date, this.format, this.language, this.formatType, this.timezone); + + if (fromArgs) this.setValue(); + + if (this.date < this.startDate) { + this.viewDate = new Date(this.startDate); + } else if (this.date > this.endDate) { + this.viewDate = new Date(this.endDate); + } else { + this.viewDate = new Date(this.date); + } + this.fill(); + }, + + fillDow: function () { + var dowCnt = this.weekStart, + html = ''; + while (dowCnt < this.weekStart + 7) { + html += '' + dates[this.language].daysMin[(dowCnt++) % 7] + ''; + } + html += ''; + this.picker.find('.datetimepicker-days thead').append(html); + }, + + fillMonths: function () { + var html = ''; + var d = new Date(this.viewDate); + for (var i = 0; i < 12; i++) { + d.setUTCMonth(i); + var classes = this.onRenderMonth(d); + html += '' + dates[this.language].monthsShort[i] + ''; + } + this.picker.find('.datetimepicker-months td').html(html); + }, + + fill: function () { + if (!this.date || !this.viewDate) { + return; + } + var d = new Date(this.viewDate), + year = d.getUTCFullYear(), + month = d.getUTCMonth(), + dayMonth = d.getUTCDate(), + hours = d.getUTCHours(), + startYear = this.startDate.getUTCFullYear(), + startMonth = this.startDate.getUTCMonth(), + endYear = this.endDate.getUTCFullYear(), + endMonth = this.endDate.getUTCMonth() + 1, + currentDate = (new UTCDate(this.date.getUTCFullYear(), this.date.getUTCMonth(), this.date.getUTCDate())).valueOf(), + today = new Date(); + this.setTitle('.datetimepicker-days', dates[this.language].months[month] + ' ' + year) + if (this.formatViewType === 'time') { + var formatted = this.getFormattedDate(); + this.setTitle('.datetimepicker-hours', formatted); + this.setTitle('.datetimepicker-minutes', formatted); + } else { + this.setTitle('.datetimepicker-hours', dayMonth + ' ' + dates[this.language].months[month] + ' ' + year); + this.setTitle('.datetimepicker-minutes', dayMonth + ' ' + dates[this.language].months[month] + ' ' + year); + } + this.picker.find('tfoot th.today') + .text(dates[this.language].today || dates['en'].today) + .toggle(this.todayBtn !== false); + this.picker.find('tfoot th.clear') + .text(dates[this.language].clear || dates['en'].clear) + .toggle(this.clearBtn !== false); + this.updateNavArrows(); + this.fillMonths(); + var prevMonth = UTCDate(year, month - 1, 28, 0, 0, 0, 0), + day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth()); + prevMonth.setUTCDate(day); + prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.weekStart + 7) % 7); + var nextMonth = new Date(prevMonth); + nextMonth.setUTCDate(nextMonth.getUTCDate() + 42); + nextMonth = nextMonth.valueOf(); + var html = []; + var classes; + while (prevMonth.valueOf() < nextMonth) { + if (prevMonth.getUTCDay() === this.weekStart) { + html.push(''); + } + classes = this.onRenderDay(prevMonth); + if (prevMonth.getUTCFullYear() < year || (prevMonth.getUTCFullYear() === year && prevMonth.getUTCMonth() < month)) { + classes.push('old'); + } else if (prevMonth.getUTCFullYear() > year || (prevMonth.getUTCFullYear() === year && prevMonth.getUTCMonth() > month)) { + classes.push('new'); + } + // Compare internal UTC date with local today, not UTC today + if (this.todayHighlight && + prevMonth.getUTCFullYear() === today.getFullYear() && + prevMonth.getUTCMonth() === today.getMonth() && + prevMonth.getUTCDate() === today.getDate()) { + classes.push('today'); + } + if (prevMonth.valueOf() === currentDate) { + classes.push('active'); + } + if ((prevMonth.valueOf() + 86400000) <= this.startDate || prevMonth.valueOf() > this.endDate || + $.inArray(prevMonth.getUTCDay(), this.daysOfWeekDisabled) !== -1 || + $.inArray(prevMonth.toDateString(), this.datesDisabled) !== -1) { + classes.push('disabled'); + } + html.push('' + prevMonth.getUTCDate() + ''); + if (prevMonth.getUTCDay() === this.weekEnd) { + html.push(''); + } + prevMonth.setUTCDate(prevMonth.getUTCDate() + 1); + } + this.picker.find('.datetimepicker-days tbody').empty().append(html.join('')); + + html = []; + var txt = '', meridian = '', meridianOld = ''; + var hoursDisabled = this.hoursDisabled || []; + d = new Date(this.viewDate) + for (var i = 0; i < 24; i++) { + d.setUTCHours(i); + classes = this.onRenderHour(d); + if (hoursDisabled.indexOf(i) !== -1) { + classes.push('disabled'); + } + var actual = UTCDate(year, month, dayMonth, i); + // We want the previous hour for the startDate + if ((actual.valueOf() + 3600000) <= this.startDate || actual.valueOf() > this.endDate) { + classes.push('disabled'); + } else if (hours === i) { + classes.push('active'); + } + if (this.showMeridian && dates[this.language].meridiem.length === 2) { + meridian = (i < 12 ? dates[this.language].meridiem[0] : dates[this.language].meridiem[1]); + if (meridian !== meridianOld) { + if (meridianOld !== '') { + html.push(''); + } + html.push('
' + meridian.toUpperCase() + ''); + } + meridianOld = meridian; + txt = (i % 12 ? i % 12 : 12); + if (i < 12) { + classes.push('hour_am'); + } else { + classes.push('hour_pm'); + } + html.push('' + txt + ''); + if (i === 23) { + html.push('
'); + } + } else { + txt = i + ':00'; + html.push('' + txt + ''); + } + } + this.picker.find('.datetimepicker-hours td').html(html.join('')); + + html = []; + txt = ''; + meridian = ''; + meridianOld = ''; + var minutesDisabled = this.minutesDisabled || []; + d = new Date(this.viewDate); + for (var i = 0; i < 60; i += this.minuteStep) { + if (minutesDisabled.indexOf(i) !== -1) continue; + d.setUTCMinutes(i); + d.setUTCSeconds(0); + classes = this.onRenderMinute(d); + if (this.showMeridian && dates[this.language].meridiem.length === 2) { + meridian = (hours < 12 ? dates[this.language].meridiem[0] : dates[this.language].meridiem[1]); + if (meridian !== meridianOld) { + if (meridianOld !== '') { + html.push(''); + } + html.push('
' + meridian.toUpperCase() + ''); + } + meridianOld = meridian; + txt = (hours % 12 ? hours % 12 : 12); + html.push('' + txt + ':' + (i < 10 ? '0' + i : i) + ''); + if (i === 59) { + html.push('
'); + } + } else { + txt = i + ':00'; + html.push('' + hours + ':' + (i < 10 ? '0' + i : i) + ''); + } + } + this.picker.find('.datetimepicker-minutes td').html(html.join('')); + + var currentYear = this.date.getUTCFullYear(); + var months = this.setTitle('.datetimepicker-months', year) + .end() + .find('.month').removeClass('active'); + if (currentYear === year) { + // getUTCMonths() returns 0 based, and we need to select the next one + // To cater bootstrap 2 we don't need to select the next one + months.eq(this.date.getUTCMonth()).addClass('active'); + } + if (year < startYear || year > endYear) { + months.addClass('disabled'); + } + if (year === startYear) { + months.slice(0, startMonth).addClass('disabled'); + } + if (year === endYear) { + months.slice(endMonth).addClass('disabled'); + } + + html = ''; + year = parseInt(year / 10, 10) * 10; + var yearCont = this.setTitle('.datetimepicker-years', year + '-' + (year + 9)) + .end() + .find('td'); + year -= 1; + d = new Date(this.viewDate); + for (var i = -1; i < 11; i++) { + d.setUTCFullYear(year); + classes = this.onRenderYear(d); + if (i === -1 || i === 10) { + classes.push(old); + } + html += '' + year + ''; + year += 1; + } + yearCont.html(html); + this.place(); + }, + + updateNavArrows: function () { + var d = new Date(this.viewDate), + year = d.getUTCFullYear(), + month = d.getUTCMonth(), + day = d.getUTCDate(), + hour = d.getUTCHours(); + switch (this.viewMode) { + case 0: + if (year <= this.startDate.getUTCFullYear() + && month <= this.startDate.getUTCMonth() + && day <= this.startDate.getUTCDate() + && hour <= this.startDate.getUTCHours()) { + this.picker.find('.prev').css({visibility: 'hidden'}); + } else { + this.picker.find('.prev').css({visibility: 'visible'}); + } + if (year >= this.endDate.getUTCFullYear() + && month >= this.endDate.getUTCMonth() + && day >= this.endDate.getUTCDate() + && hour >= this.endDate.getUTCHours()) { + this.picker.find('.next').css({visibility: 'hidden'}); + } else { + this.picker.find('.next').css({visibility: 'visible'}); + } + break; + case 1: + if (year <= this.startDate.getUTCFullYear() + && month <= this.startDate.getUTCMonth() + && day <= this.startDate.getUTCDate()) { + this.picker.find('.prev').css({visibility: 'hidden'}); + } else { + this.picker.find('.prev').css({visibility: 'visible'}); + } + if (year >= this.endDate.getUTCFullYear() + && month >= this.endDate.getUTCMonth() + && day >= this.endDate.getUTCDate()) { + this.picker.find('.next').css({visibility: 'hidden'}); + } else { + this.picker.find('.next').css({visibility: 'visible'}); + } + break; + case 2: + if (year <= this.startDate.getUTCFullYear() + && month <= this.startDate.getUTCMonth()) { + this.picker.find('.prev').css({visibility: 'hidden'}); + } else { + this.picker.find('.prev').css({visibility: 'visible'}); + } + if (year >= this.endDate.getUTCFullYear() + && month >= this.endDate.getUTCMonth()) { + this.picker.find('.next').css({visibility: 'hidden'}); + } else { + this.picker.find('.next').css({visibility: 'visible'}); + } + break; + case 3: + case 4: + if (year <= this.startDate.getUTCFullYear()) { + this.picker.find('.prev').css({visibility: 'hidden'}); + } else { + this.picker.find('.prev').css({visibility: 'visible'}); + } + if (year >= this.endDate.getUTCFullYear()) { + this.picker.find('.next').css({visibility: 'hidden'}); + } else { + this.picker.find('.next').css({visibility: 'visible'}); + } + break; + } + }, + + mousewheel: function (e) { + + e.preventDefault(); + e.stopPropagation(); + + if (this.wheelPause) { + return; + } + + this.wheelPause = true; + + var originalEvent = e.originalEvent; + + var delta = originalEvent.wheelDelta; + + var mode = delta > 0 ? 1 : (delta === 0) ? 0 : -1; + + if (this.wheelViewModeNavigationInverseDirection) { + mode = -mode; + } + + this.showMode(mode); + + setTimeout($.proxy(function () { + + this.wheelPause = false + + }, this), this.wheelViewModeNavigationDelay); + + }, + + click: function (e) { + e.stopPropagation(); + e.preventDefault(); + var target = $(e.target).closest('span, td, th, legend'); + if (target.is('.' + this.icontype)) { + target = $(target).parent().closest('span, td, th, legend'); + } + if (target.length === 1) { + if (target.is('.disabled')) { + this.element.trigger({ + type: 'outOfRange', + date: this.viewDate, + startDate: this.startDate, + endDate: this.endDate + }); + return; + } + switch (target[0].nodeName.toLowerCase()) { + case 'th': + switch (target[0].className) { + case 'switch': + this.showMode(1); + break; + case 'prev': + case 'next': + var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1); + switch (this.viewMode) { + case 0: + this.viewDate = this.moveHour(this.viewDate, dir); + break; + case 1: + this.viewDate = this.moveDate(this.viewDate, dir); + break; + case 2: + this.viewDate = this.moveMonth(this.viewDate, dir); + break; + case 3: + case 4: + this.viewDate = this.moveYear(this.viewDate, dir); + break; + } + this.fill(); + this.element.trigger({ + type: target[0].className + ':' + this.convertViewModeText(this.viewMode), + date: this.viewDate, + startDate: this.startDate, + endDate: this.endDate + }); + break; + case 'clear': + this.reset(); + if (this.autoclose) { + this.hide(); + } + break; + case 'today': + var date = new Date(); + date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), 0); + + // Respect startDate and endDate. + if (date < this.startDate) date = this.startDate; + else if (date > this.endDate) date = this.endDate; + + this.viewMode = this.startViewMode; + this.showMode(0); + this._setDate(date); + this.fill(); + if (this.autoclose) { + this.hide(); + } + break; + } + break; + case 'span': + if (!target.is('.disabled')) { + var year = this.viewDate.getUTCFullYear(), + month = this.viewDate.getUTCMonth(), + day = this.viewDate.getUTCDate(), + hours = this.viewDate.getUTCHours(), + minutes = this.viewDate.getUTCMinutes(), + seconds = this.viewDate.getUTCSeconds(); + + if (target.is('.month')) { + this.viewDate.setUTCDate(1); + month = target.parent().find('span').index(target); + day = this.viewDate.getUTCDate(); + this.viewDate.setUTCMonth(month); + this.element.trigger({ + type: 'changeMonth', + date: this.viewDate + }); + if (this.viewSelect >= 3) { + this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); + } + } else if (target.is('.year')) { + this.viewDate.setUTCDate(1); + year = parseInt(target.text(), 10) || 0; + this.viewDate.setUTCFullYear(year); + this.element.trigger({ + type: 'changeYear', + date: this.viewDate + }); + if (this.viewSelect >= 4) { + this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); + } + } else if (target.is('.hour')) { + hours = parseInt(target.text(), 10) || 0; + if (target.hasClass('hour_am') || target.hasClass('hour_pm')) { + if (hours === 12 && target.hasClass('hour_am')) { + hours = 0; + } else if (hours !== 12 && target.hasClass('hour_pm')) { + hours += 12; + } + } + this.viewDate.setUTCHours(hours); + this.element.trigger({ + type: 'changeHour', + date: this.viewDate + }); + if (this.viewSelect >= 1) { + this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); + } + } else if (target.is('.minute')) { + minutes = parseInt(target.text().substr(target.text().indexOf(':') + 1), 10) || 0; + this.viewDate.setUTCMinutes(minutes); + this.element.trigger({ + type: 'changeMinute', + date: this.viewDate + }); + if (this.viewSelect >= 0) { + this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); + } + } + if (this.viewMode !== 0) { + var oldViewMode = this.viewMode; + this.showMode(-1); + this.fill(); + if (oldViewMode === this.viewMode && this.autoclose) { + this.hide(); + } + } else { + this.fill(); + if (this.autoclose) { + this.hide(); + } + } + } + break; + case 'td': + if (target.is('.day') && !target.is('.disabled')) { + var day = parseInt(target.text(), 10) || 1; + var year = this.viewDate.getUTCFullYear(), + month = this.viewDate.getUTCMonth(), + hours = this.viewDate.getUTCHours(), + minutes = this.viewDate.getUTCMinutes(), + seconds = this.viewDate.getUTCSeconds(); + if (target.is('.old')) { + if (month === 0) { + month = 11; + year -= 1; + } else { + month -= 1; + } + } else if (target.is('.new')) { + if (month === 11) { + month = 0; + year += 1; + } else { + month += 1; + } + } + this.viewDate.setUTCFullYear(year); + this.viewDate.setUTCMonth(month, day); + this.element.trigger({ + type: 'changeDay', + date: this.viewDate + }); + if (this.viewSelect >= 2) { + this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); + } + } + var oldViewMode = this.viewMode; + this.showMode(-1); + this.fill(); + if (oldViewMode === this.viewMode && this.autoclose) { + this.hide(); + } + break; + } + } + }, + + _setDate: function (date, which) { + if (!which || which === 'date') + this.date = date; + if (!which || which === 'view') + this.viewDate = date; + this.fill(); + this.setValue(); + var element; + if (this.isInput) { + element = this.element; + } else if (this.component) { + element = this.element.find('input'); + } + if (element) { + element.change(); + } + this.element.trigger({ + type: 'changeDate', + date: this.getDate() + }); + if(date === null) + this.date = this.viewDate; + }, + + moveMinute: function (date, dir) { + if (!dir) return date; + var new_date = new Date(date.valueOf()); + //dir = dir > 0 ? 1 : -1; + new_date.setUTCMinutes(new_date.getUTCMinutes() + (dir * this.minuteStep)); + return new_date; + }, + + moveHour: function (date, dir) { + if (!dir) return date; + var new_date = new Date(date.valueOf()); + //dir = dir > 0 ? 1 : -1; + new_date.setUTCHours(new_date.getUTCHours() + dir); + return new_date; + }, + + moveDate: function (date, dir) { + if (!dir) return date; + var new_date = new Date(date.valueOf()); + //dir = dir > 0 ? 1 : -1; + new_date.setUTCDate(new_date.getUTCDate() + dir); + return new_date; + }, + + moveMonth: function (date, dir) { + if (!dir) return date; + var new_date = new Date(date.valueOf()), + day = new_date.getUTCDate(), + month = new_date.getUTCMonth(), + mag = Math.abs(dir), + new_month, test; + dir = dir > 0 ? 1 : -1; + if (mag === 1) { + test = dir === -1 + // If going back one month, make sure month is not current month + // (eg, Mar 31 -> Feb 31 === Feb 28, not Mar 02) + ? function () { + return new_date.getUTCMonth() === month; + } + // If going forward one month, make sure month is as expected + // (eg, Jan 31 -> Feb 31 === Feb 28, not Mar 02) + : function () { + return new_date.getUTCMonth() !== new_month; + }; + new_month = month + dir; + new_date.setUTCMonth(new_month); + // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11 + if (new_month < 0 || new_month > 11) + new_month = (new_month + 12) % 12; + } else { + // For magnitudes >1, move one month at a time... + for (var i = 0; i < mag; i++) + // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)... + new_date = this.moveMonth(new_date, dir); + // ...then reset the day, keeping it in the new month + new_month = new_date.getUTCMonth(); + new_date.setUTCDate(day); + test = function () { + return new_month !== new_date.getUTCMonth(); + }; + } + // Common date-resetting loop -- if date is beyond end of month, make it + // end of month + while (test()) { + new_date.setUTCDate(--day); + new_date.setUTCMonth(new_month); + } + return new_date; + }, + + moveYear: function (date, dir) { + return this.moveMonth(date, dir * 12); + }, + + dateWithinRange: function (date) { + return date >= this.startDate && date <= this.endDate; + }, + + keydown: function (e) { + if (this.picker.is(':not(:visible)')) { + if (e.keyCode === 27) // allow escape to hide and re-show picker + this.show(); + return; + } + var dateChanged = false, + dir, newDate, newViewDate; + switch (e.keyCode) { + case 27: // escape + this.hide(); + e.preventDefault(); + break; + case 37: // left + case 39: // right + if (!this.keyboardNavigation) break; + dir = e.keyCode === 37 ? -1 : 1; + var viewMode = this.viewMode; + if (e.ctrlKey) { + viewMode += 2; + } else if (e.shiftKey) { + viewMode += 1; + } + if (viewMode === 4) { + newDate = this.moveYear(this.date, dir); + newViewDate = this.moveYear(this.viewDate, dir); + } else if (viewMode === 3) { + newDate = this.moveMonth(this.date, dir); + newViewDate = this.moveMonth(this.viewDate, dir); + } else if (viewMode === 2) { + newDate = this.moveDate(this.date, dir); + newViewDate = this.moveDate(this.viewDate, dir); + } else if (viewMode === 1) { + newDate = this.moveHour(this.date, dir); + newViewDate = this.moveHour(this.viewDate, dir); + } else if (viewMode === 0) { + newDate = this.moveMinute(this.date, dir); + newViewDate = this.moveMinute(this.viewDate, dir); + } + if (this.dateWithinRange(newDate)) { + this.date = newDate; + this.viewDate = newViewDate; + this.setValue(); + this.update(); + e.preventDefault(); + dateChanged = true; + } + break; + case 38: // up + case 40: // down + if (!this.keyboardNavigation) break; + dir = e.keyCode === 38 ? -1 : 1; + viewMode = this.viewMode; + if (e.ctrlKey) { + viewMode += 2; + } else if (e.shiftKey) { + viewMode += 1; + } + if (viewMode === 4) { + newDate = this.moveYear(this.date, dir); + newViewDate = this.moveYear(this.viewDate, dir); + } else if (viewMode === 3) { + newDate = this.moveMonth(this.date, dir); + newViewDate = this.moveMonth(this.viewDate, dir); + } else if (viewMode === 2) { + newDate = this.moveDate(this.date, dir * 7); + newViewDate = this.moveDate(this.viewDate, dir * 7); + } else if (viewMode === 1) { + if (this.showMeridian) { + newDate = this.moveHour(this.date, dir * 6); + newViewDate = this.moveHour(this.viewDate, dir * 6); + } else { + newDate = this.moveHour(this.date, dir * 4); + newViewDate = this.moveHour(this.viewDate, dir * 4); + } + } else if (viewMode === 0) { + newDate = this.moveMinute(this.date, dir * 4); + newViewDate = this.moveMinute(this.viewDate, dir * 4); + } + if (this.dateWithinRange(newDate)) { + this.date = newDate; + this.viewDate = newViewDate; + this.setValue(); + this.update(); + e.preventDefault(); + dateChanged = true; + } + break; + case 13: // enter + if (this.viewMode !== 0) { + var oldViewMode = this.viewMode; + this.showMode(-1); + this.fill(); + if (oldViewMode === this.viewMode && this.autoclose) { + this.hide(); + } + } else { + this.fill(); + if (this.autoclose) { + this.hide(); + } + } + e.preventDefault(); + break; + case 9: // tab + this.hide(); + break; + } + if (dateChanged) { + var element; + if (this.isInput) { + element = this.element; + } else if (this.component) { + element = this.element.find('input'); + } + if (element) { + element.change(); + } + this.element.trigger({ + type: 'changeDate', + date: this.getDate() + }); + } + }, + + showMode: function (dir) { + if (dir) { + var newViewMode = Math.max(0, Math.min(DPGlobal.modes.length - 1, this.viewMode + dir)); + if (newViewMode >= this.minView && newViewMode <= this.maxView) { + this.element.trigger({ + type: 'changeMode', + date: this.viewDate, + oldViewMode: this.viewMode, + newViewMode: newViewMode + }); + + this.viewMode = newViewMode; + } + } + /* + vitalets: fixing bug of very special conditions: + jquery 1.7.1 + webkit + show inline datetimepicker in bootstrap popover. + Method show() does not set display css correctly and datetimepicker is not shown. + Changed to .css('display', 'block') solve the problem. + See https://github.com/vitalets/x-editable/issues/37 + + In jquery 1.7.2+ everything works fine. + */ + //this.picker.find('>div').hide().filter('.datetimepicker-'+DPGlobal.modes[this.viewMode].clsName).show(); + this.picker.find('>div').hide().filter('.datetimepicker-' + DPGlobal.modes[this.viewMode].clsName).css('display', 'block'); + this.updateNavArrows(); + }, + + reset: function () { + this._setDate(null, 'date'); + }, + + convertViewModeText: function (viewMode) { + switch (viewMode) { + case 4: + return 'decade'; + case 3: + return 'year'; + case 2: + return 'month'; + case 1: + return 'day'; + case 0: + return 'hour'; + } + } + }; + + var old = $.fn.datetimepicker; + $.fn.datetimepicker = function (option) { + var args = Array.apply(null, arguments); + args.shift(); + var internal_return; + this.each(function () { + var $this = $(this), + data = $this.data('datetimepicker'), + options = typeof option === 'object' && option; + if (!data) { + $this.data('datetimepicker', (data = new Datetimepicker(this, $.extend({}, $.fn.datetimepicker.defaults, options)))); + } + if (typeof option === 'string' && typeof data[option] === 'function') { + internal_return = data[option].apply(data, args); + if (internal_return !== undefined) { + return false; + } + } + }); + if (internal_return !== undefined) + return internal_return; + else + return this; + }; + + $.fn.datetimepicker.defaults = { + }; + $.fn.datetimepicker.Constructor = Datetimepicker; + var dates = $.fn.datetimepicker.dates = { + en: { + days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'], + daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], + daysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'], + months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + meridiem: ['am', 'pm'], + suffix: ['st', 'nd', 'rd', 'th'], + today: 'Today', + clear: 'Clear' + } + }; + + var DPGlobal = { + modes: [ + { + clsName: 'minutes', + navFnc: 'Hours', + navStep: 1 + }, + { + clsName: 'hours', + navFnc: 'Date', + navStep: 1 + }, + { + clsName: 'days', + navFnc: 'Month', + navStep: 1 + }, + { + clsName: 'months', + navFnc: 'FullYear', + navStep: 1 + }, + { + clsName: 'years', + navFnc: 'FullYear', + navStep: 10 + } + ], + isLeapYear: function (year) { + return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)) + }, + getDaysInMonth: function (year, month) { + return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] + }, + getDefaultFormat: function (type, field) { + if (type === 'standard') { + if (field === 'input') + return 'yyyy-mm-dd hh:ii'; + else + return 'yyyy-mm-dd hh:ii:ss'; + } else if (type === 'php') { + if (field === 'input') + return 'Y-m-d H:i'; + else + return 'Y-m-d H:i:s'; + } else { + throw new Error('Invalid format type.'); + } + }, + validParts: function (type) { + if (type === 'standard') { + return /t|hh?|HH?|p|P|z|Z|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g; + } else if (type === 'php') { + return /[dDjlNwzFmMnStyYaABgGhHis]/g; + } else { + throw new Error('Invalid format type.'); + } + }, + nonpunctuation: /[^ -\/:-@\[-`{-~\t\n\rTZ]+/g, + parseFormat: function (format, type) { + // IE treats \0 as a string end in inputs (truncating the value), + // so it's a bad format delimiter, anyway + var separators = format.replace(this.validParts(type), '\0').split('\0'), + parts = format.match(this.validParts(type)); + if (!separators || !separators.length || !parts || parts.length === 0) { + throw new Error('Invalid date format.'); + } + return {separators: separators, parts: parts}; + }, + parseDate: function (date, format, language, type, timezone) { + if (date instanceof Date) { + var dateUTC = new Date(date.valueOf() - date.getTimezoneOffset() * 60000); + dateUTC.setMilliseconds(0); + return dateUTC; + } + if (/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(date)) { + format = this.parseFormat('yyyy-mm-dd', type); + } + if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}$/.test(date)) { + format = this.parseFormat('yyyy-mm-dd hh:ii', type); + } + if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}\:\d{1,2}[Z]{0,1}$/.test(date)) { + format = this.parseFormat('yyyy-mm-dd hh:ii:ss', type); + } + if (/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(date)) { + var part_re = /([-+]\d+)([dmwy])/, + parts = date.match(/([-+]\d+)([dmwy])/g), + part, dir; + date = new Date(); + for (var i = 0; i < parts.length; i++) { + part = part_re.exec(parts[i]); + dir = parseInt(part[1]); + switch (part[2]) { + case 'd': + date.setUTCDate(date.getUTCDate() + dir); + break; + case 'm': + date = Datetimepicker.prototype.moveMonth.call(Datetimepicker.prototype, date, dir); + break; + case 'w': + date.setUTCDate(date.getUTCDate() + dir * 7); + break; + case 'y': + date = Datetimepicker.prototype.moveYear.call(Datetimepicker.prototype, date, dir); + break; + } + } + return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), 0); + } + var parts = date && date.toString().match(this.nonpunctuation) || [], + date = new Date(0, 0, 0, 0, 0, 0, 0), + parsed = {}, + setters_order = ['hh', 'h', 'ii', 'i', 'ss', 's', 'yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'D', 'DD', 'd', 'dd', 'H', 'HH', 'p', 'P', 'z', 'Z'], + setters_map = { + hh: function (d, v) { + return d.setUTCHours(v); + }, + h: function (d, v) { + return d.setUTCHours(v); + }, + HH: function (d, v) { + return d.setUTCHours(v === 12 ? 0 : v); + }, + H: function (d, v) { + return d.setUTCHours(v === 12 ? 0 : v); + }, + ii: function (d, v) { + return d.setUTCMinutes(v); + }, + i: function (d, v) { + return d.setUTCMinutes(v); + }, + ss: function (d, v) { + return d.setUTCSeconds(v); + }, + s: function (d, v) { + return d.setUTCSeconds(v); + }, + yyyy: function (d, v) { + return d.setUTCFullYear(v); + }, + yy: function (d, v) { + return d.setUTCFullYear(2000 + v); + }, + m: function (d, v) { + v -= 1; + while (v < 0) v += 12; + v %= 12; + d.setUTCMonth(v); + while (d.getUTCMonth() !== v) + if (isNaN(d.getUTCMonth())) + return d; + else + d.setUTCDate(d.getUTCDate() - 1); + return d; + }, + d: function (d, v) { + return d.setUTCDate(v); + }, + p: function (d, v) { + return d.setUTCHours(v === 1 ? d.getUTCHours() + 12 : d.getUTCHours()); + }, + z: function () { + return timezone + } + }, + val, filtered, part; + setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m']; + setters_map['dd'] = setters_map['d']; + setters_map['P'] = setters_map['p']; + setters_map['Z'] = setters_map['z']; + date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()); + if (parts.length === format.parts.length) { + for (var i = 0, cnt = format.parts.length; i < cnt; i++) { + val = parseInt(parts[i], 10); + part = format.parts[i]; + if (isNaN(val)) { + switch (part) { + case 'MM': + filtered = $(dates[language].months).filter(function () { + var m = this.slice(0, parts[i].length), + p = parts[i].slice(0, m.length); + return m === p; + }); + val = $.inArray(filtered[0], dates[language].months) + 1; + break; + case 'M': + filtered = $(dates[language].monthsShort).filter(function () { + var m = this.slice(0, parts[i].length), + p = parts[i].slice(0, m.length); + return m.toLowerCase() === p.toLowerCase(); + }); + val = $.inArray(filtered[0], dates[language].monthsShort) + 1; + break; + case 'p': + case 'P': + val = $.inArray(parts[i].toLowerCase(), dates[language].meridiem); + break; + case 'z': + case 'Z': + timezone; + break; + + } + } + parsed[part] = val; + } + for (var i = 0, s; i < setters_order.length; i++) { + s = setters_order[i]; + if (s in parsed && !isNaN(parsed[s])) + setters_map[s](date, parsed[s]) + } + } + return date; + }, + formatDate: function (date, format, language, type, timezone) { + if (date === null) { + return ''; + } + var val; + if (type === 'standard') { + val = { + t: date.getTime(), + // year + yy: date.getUTCFullYear().toString().substring(2), + yyyy: date.getUTCFullYear(), + // month + m: date.getUTCMonth() + 1, + M: dates[language].monthsShort[date.getUTCMonth()], + MM: dates[language].months[date.getUTCMonth()], + // day + d: date.getUTCDate(), + D: dates[language].daysShort[date.getUTCDay()], + DD: dates[language].days[date.getUTCDay()], + p: (dates[language].meridiem.length === 2 ? dates[language].meridiem[date.getUTCHours() < 12 ? 0 : 1] : ''), + // hour + h: date.getUTCHours(), + // minute + i: date.getUTCMinutes(), + // second + s: date.getUTCSeconds(), + // timezone + z: timezone + }; + + if (dates[language].meridiem.length === 2) { + val.H = (val.h % 12 === 0 ? 12 : val.h % 12); + } + else { + val.H = val.h; + } + val.HH = (val.H < 10 ? '0' : '') + val.H; + val.P = val.p.toUpperCase(); + val.Z = val.z; + val.hh = (val.h < 10 ? '0' : '') + val.h; + val.ii = (val.i < 10 ? '0' : '') + val.i; + val.ss = (val.s < 10 ? '0' : '') + val.s; + val.dd = (val.d < 10 ? '0' : '') + val.d; + val.mm = (val.m < 10 ? '0' : '') + val.m; + } else if (type === 'php') { + // php format + val = { + // year + y: date.getUTCFullYear().toString().substring(2), + Y: date.getUTCFullYear(), + // month + F: dates[language].months[date.getUTCMonth()], + M: dates[language].monthsShort[date.getUTCMonth()], + n: date.getUTCMonth() + 1, + t: DPGlobal.getDaysInMonth(date.getUTCFullYear(), date.getUTCMonth()), + // day + j: date.getUTCDate(), + l: dates[language].days[date.getUTCDay()], + D: dates[language].daysShort[date.getUTCDay()], + w: date.getUTCDay(), // 0 -> 6 + N: (date.getUTCDay() === 0 ? 7 : date.getUTCDay()), // 1 -> 7 + S: (date.getUTCDate() % 10 <= dates[language].suffix.length ? dates[language].suffix[date.getUTCDate() % 10 - 1] : ''), + // hour + a: (dates[language].meridiem.length === 2 ? dates[language].meridiem[date.getUTCHours() < 12 ? 0 : 1] : ''), + g: (date.getUTCHours() % 12 === 0 ? 12 : date.getUTCHours() % 12), + G: date.getUTCHours(), + // minute + i: date.getUTCMinutes(), + // second + s: date.getUTCSeconds() + }; + val.m = (val.n < 10 ? '0' : '') + val.n; + val.d = (val.j < 10 ? '0' : '') + val.j; + val.A = val.a.toString().toUpperCase(); + val.h = (val.g < 10 ? '0' : '') + val.g; + val.H = (val.G < 10 ? '0' : '') + val.G; + val.i = (val.i < 10 ? '0' : '') + val.i; + val.s = (val.s < 10 ? '0' : '') + val.s; + } else { + throw new Error('Invalid format type.'); + } + var date = [], + seps = $.extend([], format.separators); + for (var i = 0, cnt = format.parts.length; i < cnt; i++) { + if (seps.length) { + date.push(seps.shift()); + } + date.push(val[format.parts[i]]); + } + if (seps.length) { + date.push(seps.shift()); + } + return date.join(''); + }, + convertViewMode: function (viewMode) { + switch (viewMode) { + case 4: + case 'decade': + viewMode = 4; + break; + case 3: + case 'year': + viewMode = 3; + break; + case 2: + case 'month': + viewMode = 2; + break; + case 1: + case 'day': + viewMode = 1; + break; + case 0: + case 'hour': + viewMode = 0; + break; + } + + return viewMode; + }, + headTemplate: '' + + '' + + '' + + '' + + '' + + '' + + '', + headTemplateV3: '' + + '' + + ' ' + + '' + + ' ' + + '' + + '', + contTemplate: '', + footTemplate: '' + + '' + + '' + + '' + }; + DPGlobal.template = '
' + + '
' + + '' + + DPGlobal.headTemplate + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '
' + + '
' + + '
' + + '' + + DPGlobal.headTemplate + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '
' + + '
' + + '
' + + '' + + DPGlobal.headTemplate + + '' + + DPGlobal.footTemplate + + '
' + + '
' + + '
' + + '' + + DPGlobal.headTemplate + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '
' + + '
' + + '
' + + '' + + DPGlobal.headTemplate + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '
' + + '
' + + '
'; + DPGlobal.templateV3 = '
' + + '
' + + '' + + DPGlobal.headTemplateV3 + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '
' + + '
' + + '
' + + '' + + DPGlobal.headTemplateV3 + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '
' + + '
' + + '
' + + '' + + DPGlobal.headTemplateV3 + + '' + + DPGlobal.footTemplate + + '
' + + '
' + + '
' + + '' + + DPGlobal.headTemplateV3 + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '
' + + '
' + + '
' + + '' + + DPGlobal.headTemplateV3 + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '
' + + '
' + + '
'; + $.fn.datetimepicker.DPGlobal = DPGlobal; + + /* DATETIMEPICKER NO CONFLICT + * =================== */ + + $.fn.datetimepicker.noConflict = function () { + $.fn.datetimepicker = old; + return this; + }; + + /* DATETIMEPICKER DATA-API + * ================== */ + + $(document).on( + 'focus.datetimepicker.data-api click.datetimepicker.data-api', + '[data-provide="datetimepicker"]', + function (e) { + var $this = $(this); + if ($this.data('datetimepicker')) return; + e.preventDefault(); + // component click requires us to explicitly show it + $this.datetimepicker('show'); + } + ); + $(function () { + $('[data-provide="datetimepicker-inline"]').datetimepicker(); + }); + +})); diff --git a/src/main/resources/static/halo-backend/plugins/datetimepicker/js/bootstrap-datetimepicker.min.js b/src/main/resources/static/halo-backend/plugins/datetimepicker/js/bootstrap-datetimepicker.min.js new file mode 100644 index 000000000..eba15ce5d --- /dev/null +++ b/src/main/resources/static/halo-backend/plugins/datetimepicker/js/bootstrap-datetimepicker.min.js @@ -0,0 +1 @@ +(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{if(typeof exports==="object"){a(require("jquery"))}else{a(jQuery)}}}(function(d,f){if(!("indexOf" in Array.prototype)){Array.prototype.indexOf=function(k,j){if(j===f){j=0}if(j<0){j+=this.length}if(j<0){j=0}for(var l=this.length;jthis.endDate){o.push("disabled")}else{if(Math.floor(this.date.getUTCMinutes()/this.minuteStep)===Math.floor(n.getUTCMinutes()/this.minuteStep)){o.push("active")}}return o.concat((p?p:[]))};this.onRenderYear=function(o){var q=(j.onRenderYear||function(){return[]})(o);var p=["year"];if(typeof q==="string"){q=[q]}if(this.date.getUTCFullYear()===o.getUTCFullYear()){p.push("active")}var n=o.getUTCFullYear();var r=this.endDate.getUTCFullYear();if(or){p.push("disabled")}return p.concat((q?q:[]))};this.onRenderMonth=function(n){var p=(j.onRenderMonth||function(){return[]})(n);var o=["month"];if(typeof p==="string"){p=[p]}return o.concat((p?p:[]))};this.startDate=new Date(-8639968443048000);this.endDate=new Date(8639968443048000);this.datesDisabled=[];this.daysOfWeekDisabled=[];this.setStartDate(j.startDate||this.element.data("date-startdate"));this.setEndDate(j.endDate||this.element.data("date-enddate"));this.setDatesDisabled(j.datesDisabled||this.element.data("date-dates-disabled"));this.setDaysOfWeekDisabled(j.daysOfWeekDisabled||this.element.data("date-days-of-week-disabled"));this.setMinutesDisabled(j.minutesDisabled||this.element.data("date-minute-disabled"));this.setHoursDisabled(j.hoursDisabled||this.element.data("date-hour-disabled"));this.fillDow();this.fillMonths();this.update();this.showMode();if(this.isInline){this.show()}};g.prototype={constructor:g,_events:[],_attachEvents:function(){this._detachEvents();if(this.isInput){this._events=[[this.element,{focus:d.proxy(this.show,this),keyup:d.proxy(this.update,this),keydown:d.proxy(this.keydown,this)}]]}else{if(this.component&&this.hasInput){this._events=[[this.element.find("input"),{focus:d.proxy(this.show,this),keyup:d.proxy(this.update,this),keydown:d.proxy(this.keydown,this)}],[this.component,{click:d.proxy(this.show,this)}]];if(this.componentReset){this._events.push([this.componentReset,{click:d.proxy(this.reset,this)}])}}else{if(this.element.is("div")){this.isInline=true}else{this._events=[[this.element,{click:d.proxy(this.show,this)}]]}}}for(var j=0,k,l;j=this.startDate&&i<=this.endDate){this.date=i;this.setValue();this.viewDate=this.date;this.fill()}else{this.element.trigger({type:"outOfRange",date:i,startDate:this.startDate,endDate:this.endDate})}},setFormat:function(j){this.format=c.parseFormat(j,this.formatType);var i;if(this.isInput){i=this.element}else{if(this.component){i=this.element.find("input")}}if(i&&i.val()){this.setValue()}},setValue:function(){var i=this.getFormattedDate();if(!this.isInput){if(this.component){this.element.find("input").val(i)}this.element.data("date",i)}else{this.element.val(i)}if(this.linkField){d("#"+this.linkField).val(this.getFormattedDate(this.linkFormat))}},getFormattedDate:function(i){i=i||this.format;return c.formatDate(this.date,i,this.language,this.formatType,this.timezone)},setStartDate:function(i){this.startDate=i||this.startDate;if(this.startDate.valueOf()!==8639968443048000){this.startDate=c.parseDate(this.startDate,this.format,this.language,this.formatType,this.timezone)}this.update();this.updateNavArrows()},setEndDate:function(i){this.endDate=i||this.endDate;if(this.endDate.valueOf()!==8639968443048000){this.endDate=c.parseDate(this.endDate,this.format,this.language,this.formatType,this.timezone)}this.update();this.updateNavArrows()},setDatesDisabled:function(j){this.datesDisabled=j||[];if(!d.isArray(this.datesDisabled)){this.datesDisabled=this.datesDisabled.split(/,\s*/)}var i=this;this.datesDisabled=d.map(this.datesDisabled,function(k){return c.parseDate(k,i.format,i.language,i.formatType,i.timezone).toDateString()});this.update();this.updateNavArrows()},setTitle:function(i,j){return this.picker.find(i).find("th:eq(1)").text(this.title===false?j:this.title)},setDaysOfWeekDisabled:function(i){this.daysOfWeekDisabled=i||[];if(!d.isArray(this.daysOfWeekDisabled)){this.daysOfWeekDisabled=this.daysOfWeekDisabled.split(/,\s*/)}this.daysOfWeekDisabled=d.map(this.daysOfWeekDisabled,function(j){return parseInt(j,10)});this.update();this.updateNavArrows()},setMinutesDisabled:function(i){this.minutesDisabled=i||[];if(!d.isArray(this.minutesDisabled)){this.minutesDisabled=this.minutesDisabled.split(/,\s*/)}this.minutesDisabled=d.map(this.minutesDisabled,function(j){return parseInt(j,10)});this.update();this.updateNavArrows()},setHoursDisabled:function(i){this.hoursDisabled=i||[];if(!d.isArray(this.hoursDisabled)){this.hoursDisabled=this.hoursDisabled.split(/,\s*/)}this.hoursDisabled=d.map(this.hoursDisabled,function(j){return parseInt(j,10)});this.update();this.updateNavArrows()},place:function(){if(this.isInline){return}if(!this.zIndex){var j=0;d("div").each(function(){var o=parseInt(d(this).css("zIndex"),10);if(o>j){j=o}});this.zIndex=j+10}var n,m,l,k;if(this.container instanceof d){k=this.container.offset()}else{k=d(this.container).offset()}if(this.component){n=this.component.offset();l=n.left;if(this.pickerPosition==="bottom-left"||this.pickerPosition==="top-left"){l+=this.component.outerWidth()-this.picker.outerWidth()}}else{n=this.element.offset();l=n.left;if(this.pickerPosition==="bottom-left"||this.pickerPosition==="top-left"){l+=this.element.outerWidth()-this.picker.outerWidth()}}var i=document.body.clientWidth||window.innerWidth;if(l+220>i){l=i-220}if(this.pickerPosition==="top-left"||this.pickerPosition==="top-right"){m=n.top-this.picker.outerHeight()}else{m=n.top+this.height}m=m-k.top;l=l-k.left;this.picker.css({top:m,left:l,zIndex:this.zIndex})},hour_minute:"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]",update:function(){var i,j=false;if(arguments&&arguments.length&&(typeof arguments[0]==="string"||arguments[0] instanceof Date)){i=arguments[0];j=true}else{i=(this.isInput?this.element.val():this.element.find("input").val())||this.element.data("date")||this.initialDate;if(typeof i==="string"){i=i.replace(/^\s+|\s+$/g,"")}}if(!i){i=new Date();j=false}if(typeof i==="string"){if(new RegExp(this.hour_minute).test(i)||new RegExp(this.hour_minute+":[0-5][0-9]").test(i)){i=this.getDate()}}this.date=c.parseDate(i,this.format,this.language,this.formatType,this.timezone);if(j){this.setValue()}if(this.datethis.endDate){this.viewDate=new Date(this.endDate)}else{this.viewDate=new Date(this.date)}}this.fill()},fillDow:function(){var i=this.weekStart,j="";while(i'+e[this.language].daysMin[(i++)%7]+""}j+="";this.picker.find(".datetimepicker-days thead").append(j)},fillMonths:function(){var l="";var m=new Date(this.viewDate);for(var k=0;k<12;k++){m.setUTCMonth(k);var j=this.onRenderMonth(m);l+=''+e[this.language].monthsShort[k]+""}this.picker.find(".datetimepicker-months td").html(l)},fill:function(){if(!this.date||!this.viewDate){return}var E=new Date(this.viewDate),t=E.getUTCFullYear(),G=E.getUTCMonth(),n=E.getUTCDate(),A=E.getUTCHours(),w=this.startDate.getUTCFullYear(),B=this.startDate.getUTCMonth(),p=this.endDate.getUTCFullYear(),x=this.endDate.getUTCMonth()+1,q=(new h(this.date.getUTCFullYear(),this.date.getUTCMonth(),this.date.getUTCDate())).valueOf(),D=new Date();this.setTitle(".datetimepicker-days",e[this.language].months[G]+" "+t);if(this.formatViewType==="time"){var k=this.getFormattedDate();this.setTitle(".datetimepicker-hours",k);this.setTitle(".datetimepicker-minutes",k)}else{this.setTitle(".datetimepicker-hours",n+" "+e[this.language].months[G]+" "+t);this.setTitle(".datetimepicker-minutes",n+" "+e[this.language].months[G]+" "+t)}this.picker.find("tfoot th.today").text(e[this.language].today||e.en.today).toggle(this.todayBtn!==false);this.picker.find("tfoot th.clear").text(e[this.language].clear||e.en.clear).toggle(this.clearBtn!==false);this.updateNavArrows();this.fillMonths();var I=h(t,G-1,28,0,0,0,0),z=c.getDaysInMonth(I.getUTCFullYear(),I.getUTCMonth());I.setUTCDate(z);I.setUTCDate(z-(I.getUTCDay()-this.weekStart+7)%7);var j=new Date(I);j.setUTCDate(j.getUTCDate()+42);j=j.valueOf();var r=[];var F;while(I.valueOf()")}F=this.onRenderDay(I);if(I.getUTCFullYear()t||(I.getUTCFullYear()===t&&I.getUTCMonth()>G)){F.push("new")}}if(this.todayHighlight&&I.getUTCFullYear()===D.getFullYear()&&I.getUTCMonth()===D.getMonth()&&I.getUTCDate()===D.getDate()){F.push("today")}if(I.valueOf()===q){F.push("active")}if((I.valueOf()+86400000)<=this.startDate||I.valueOf()>this.endDate||d.inArray(I.getUTCDay(),this.daysOfWeekDisabled)!==-1||d.inArray(I.toDateString(),this.datesDisabled)!==-1){F.push("disabled")}r.push(''+I.getUTCDate()+"");if(I.getUTCDay()===this.weekEnd){r.push("")}I.setUTCDate(I.getUTCDate()+1)}this.picker.find(".datetimepicker-days tbody").empty().append(r.join(""));r=[];var u="",C="",s="";var l=this.hoursDisabled||[];E=new Date(this.viewDate);for(var y=0;y<24;y++){E.setUTCHours(y);F=this.onRenderHour(E);if(l.indexOf(y)!==-1){F.push("disabled")}var v=h(t,G,n,y);if((v.valueOf()+3600000)<=this.startDate||v.valueOf()>this.endDate){F.push("disabled")}else{if(A===y){F.push("active")}}if(this.showMeridian&&e[this.language].meridiem.length===2){C=(y<12?e[this.language].meridiem[0]:e[this.language].meridiem[1]);if(C!==s){if(s!==""){r.push("")}r.push('
'+C.toUpperCase()+"")}s=C;u=(y%12?y%12:12);if(y<12){F.push("hour_am")}else{F.push("hour_pm")}r.push(''+u+"");if(y===23){r.push("
")}}else{u=y+":00";r.push(''+u+"")}}this.picker.find(".datetimepicker-hours td").html(r.join(""));r=[];u="";C="";s="";var m=this.minutesDisabled||[];E=new Date(this.viewDate);for(var y=0;y<60;y+=this.minuteStep){if(m.indexOf(y)!==-1){continue}E.setUTCMinutes(y);E.setUTCSeconds(0);F=this.onRenderMinute(E);if(this.showMeridian&&e[this.language].meridiem.length===2){C=(A<12?e[this.language].meridiem[0]:e[this.language].meridiem[1]);if(C!==s){if(s!==""){r.push("")}r.push('
'+C.toUpperCase()+"")}s=C;u=(A%12?A%12:12);r.push(''+u+":"+(y<10?"0"+y:y)+"");if(y===59){r.push("
")}}else{u=y+":00";r.push(''+A+":"+(y<10?"0"+y:y)+"")}}this.picker.find(".datetimepicker-minutes td").html(r.join(""));var J=this.date.getUTCFullYear();var o=this.setTitle(".datetimepicker-months",t).end().find(".month").removeClass("active");if(J===t){o.eq(this.date.getUTCMonth()).addClass("active")}if(tp){o.addClass("disabled")}if(t===w){o.slice(0,B).addClass("disabled")}if(t===p){o.slice(x).addClass("disabled")}r="";t=parseInt(t/10,10)*10;var H=this.setTitle(".datetimepicker-years",t+"-"+(t+9)).end().find("td");t-=1;E=new Date(this.viewDate);for(var y=-1;y<11;y++){E.setUTCFullYear(t);F=this.onRenderYear(E);if(y===-1||y===10){F.push(b)}r+=''+t+"";t+=1}H.html(r);this.place()},updateNavArrows:function(){var m=new Date(this.viewDate),k=m.getUTCFullYear(),l=m.getUTCMonth(),j=m.getUTCDate(),i=m.getUTCHours();switch(this.viewMode){case 0:if(k<=this.startDate.getUTCFullYear()&&l<=this.startDate.getUTCMonth()&&j<=this.startDate.getUTCDate()&&i<=this.startDate.getUTCHours()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(k>=this.endDate.getUTCFullYear()&&l>=this.endDate.getUTCMonth()&&j>=this.endDate.getUTCDate()&&i>=this.endDate.getUTCHours()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break;case 1:if(k<=this.startDate.getUTCFullYear()&&l<=this.startDate.getUTCMonth()&&j<=this.startDate.getUTCDate()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(k>=this.endDate.getUTCFullYear()&&l>=this.endDate.getUTCMonth()&&j>=this.endDate.getUTCDate()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break;case 2:if(k<=this.startDate.getUTCFullYear()&&l<=this.startDate.getUTCMonth()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(k>=this.endDate.getUTCFullYear()&&l>=this.endDate.getUTCMonth()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break;case 3:case 4:if(k<=this.startDate.getUTCFullYear()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(k>=this.endDate.getUTCFullYear()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break}},mousewheel:function(j){j.preventDefault();j.stopPropagation();if(this.wheelPause){return}this.wheelPause=true;var i=j.originalEvent;var l=i.wheelDelta;var k=l>0?1:(l===0)?0:-1;if(this.wheelViewModeNavigationInverseDirection){k=-k}this.showMode(k);setTimeout(d.proxy(function(){this.wheelPause=false},this),this.wheelViewModeNavigationDelay)},click:function(m){m.stopPropagation();m.preventDefault();var n=d(m.target).closest("span, td, th, legend");if(n.is("."+this.icontype)){n=d(n).parent().closest("span, td, th, legend")}if(n.length===1){if(n.is(".disabled")){this.element.trigger({type:"outOfRange",date:this.viewDate,startDate:this.startDate,endDate:this.endDate});return}switch(n[0].nodeName.toLowerCase()){case"th":switch(n[0].className){case"switch":this.showMode(1);break;case"prev":case"next":var i=c.modes[this.viewMode].navStep*(n[0].className==="prev"?-1:1);switch(this.viewMode){case 0:this.viewDate=this.moveHour(this.viewDate,i);break;case 1:this.viewDate=this.moveDate(this.viewDate,i);break;case 2:this.viewDate=this.moveMonth(this.viewDate,i);break;case 3:case 4:this.viewDate=this.moveYear(this.viewDate,i);break}this.fill();this.element.trigger({type:n[0].className+":"+this.convertViewModeText(this.viewMode),date:this.viewDate,startDate:this.startDate,endDate:this.endDate});break;case"clear":this.reset();if(this.autoclose){this.hide()}break;case"today":var j=new Date();j=h(j.getFullYear(),j.getMonth(),j.getDate(),j.getHours(),j.getMinutes(),j.getSeconds(),0);if(jthis.endDate){j=this.endDate}}this.viewMode=this.startViewMode;this.showMode(0);this._setDate(j);this.fill();if(this.autoclose){this.hide()}break}break;case"span":if(!n.is(".disabled")){var p=this.viewDate.getUTCFullYear(),o=this.viewDate.getUTCMonth(),q=this.viewDate.getUTCDate(),r=this.viewDate.getUTCHours(),k=this.viewDate.getUTCMinutes(),s=this.viewDate.getUTCSeconds();if(n.is(".month")){this.viewDate.setUTCDate(1);o=n.parent().find("span").index(n);q=this.viewDate.getUTCDate();this.viewDate.setUTCMonth(o);this.element.trigger({type:"changeMonth",date:this.viewDate});if(this.viewSelect>=3){this._setDate(h(p,o,q,r,k,s,0))}}else{if(n.is(".year")){this.viewDate.setUTCDate(1);p=parseInt(n.text(),10)||0;this.viewDate.setUTCFullYear(p);this.element.trigger({type:"changeYear",date:this.viewDate});if(this.viewSelect>=4){this._setDate(h(p,o,q,r,k,s,0))}}else{if(n.is(".hour")){r=parseInt(n.text(),10)||0;if(n.hasClass("hour_am")||n.hasClass("hour_pm")){if(r===12&&n.hasClass("hour_am")){r=0}else{if(r!==12&&n.hasClass("hour_pm")){r+=12}}}this.viewDate.setUTCHours(r);this.element.trigger({type:"changeHour",date:this.viewDate});if(this.viewSelect>=1){this._setDate(h(p,o,q,r,k,s,0))}}else{if(n.is(".minute")){k=parseInt(n.text().substr(n.text().indexOf(":")+1),10)||0;this.viewDate.setUTCMinutes(k);this.element.trigger({type:"changeMinute",date:this.viewDate});if(this.viewSelect>=0){this._setDate(h(p,o,q,r,k,s,0))}}}}}if(this.viewMode!==0){var l=this.viewMode;this.showMode(-1);this.fill();if(l===this.viewMode&&this.autoclose){this.hide()}}else{this.fill();if(this.autoclose){this.hide()}}}break;case"td":if(n.is(".day")&&!n.is(".disabled")){var q=parseInt(n.text(),10)||1;var p=this.viewDate.getUTCFullYear(),o=this.viewDate.getUTCMonth(),r=this.viewDate.getUTCHours(),k=this.viewDate.getUTCMinutes(),s=this.viewDate.getUTCSeconds();if(n.is(".old")){if(o===0){o=11;p-=1}else{o-=1}}else{if(n.is(".new")){if(o===11){o=0;p+=1}else{o+=1}}}this.viewDate.setUTCFullYear(p);this.viewDate.setUTCMonth(o,q);this.element.trigger({type:"changeDay",date:this.viewDate});if(this.viewSelect>=2){this._setDate(h(p,o,q,r,k,s,0))}}var l=this.viewMode;this.showMode(-1);this.fill();if(l===this.viewMode&&this.autoclose){this.hide()}break}}},_setDate:function(i,k){if(!k||k==="date"){this.date=i}if(!k||k==="view"){this.viewDate=i}this.fill();this.setValue();var j;if(this.isInput){j=this.element}else{if(this.component){j=this.element.find("input")}}if(j){j.change()}this.element.trigger({type:"changeDate",date:this.getDate()});if(i===null){this.date=this.viewDate}},moveMinute:function(j,i){if(!i){return j}var k=new Date(j.valueOf());k.setUTCMinutes(k.getUTCMinutes()+(i*this.minuteStep));return k},moveHour:function(j,i){if(!i){return j}var k=new Date(j.valueOf());k.setUTCHours(k.getUTCHours()+i);return k},moveDate:function(j,i){if(!i){return j}var k=new Date(j.valueOf());k.setUTCDate(k.getUTCDate()+i);return k},moveMonth:function(j,k){if(!k){return j}var n=new Date(j.valueOf()),r=n.getUTCDate(),o=n.getUTCMonth(),m=Math.abs(k),q,p;k=k>0?1:-1;if(m===1){p=k===-1?function(){return n.getUTCMonth()===o}:function(){return n.getUTCMonth()!==q};q=o+k;n.setUTCMonth(q);if(q<0||q>11){q=(q+12)%12}}else{for(var l=0;l=this.startDate&&i<=this.endDate},keydown:function(o){if(this.picker.is(":not(:visible)")){if(o.keyCode===27){this.show()}return}var k=false,j,i,n;switch(o.keyCode){case 27:this.hide();o.preventDefault();break;case 37:case 39:if(!this.keyboardNavigation){break}j=o.keyCode===37?-1:1;var m=this.viewMode;if(o.ctrlKey){m+=2}else{if(o.shiftKey){m+=1}}if(m===4){i=this.moveYear(this.date,j);n=this.moveYear(this.viewDate,j)}else{if(m===3){i=this.moveMonth(this.date,j);n=this.moveMonth(this.viewDate,j)}else{if(m===2){i=this.moveDate(this.date,j);n=this.moveDate(this.viewDate,j)}else{if(m===1){i=this.moveHour(this.date,j);n=this.moveHour(this.viewDate,j)}else{if(m===0){i=this.moveMinute(this.date,j);n=this.moveMinute(this.viewDate,j)}}}}}if(this.dateWithinRange(i)){this.date=i;this.viewDate=n;this.setValue();this.update();o.preventDefault();k=true}break;case 38:case 40:if(!this.keyboardNavigation){break}j=o.keyCode===38?-1:1;m=this.viewMode;if(o.ctrlKey){m+=2}else{if(o.shiftKey){m+=1}}if(m===4){i=this.moveYear(this.date,j);n=this.moveYear(this.viewDate,j)}else{if(m===3){i=this.moveMonth(this.date,j);n=this.moveMonth(this.viewDate,j)}else{if(m===2){i=this.moveDate(this.date,j*7);n=this.moveDate(this.viewDate,j*7)}else{if(m===1){if(this.showMeridian){i=this.moveHour(this.date,j*6);n=this.moveHour(this.viewDate,j*6)}else{i=this.moveHour(this.date,j*4);n=this.moveHour(this.viewDate,j*4)}}else{if(m===0){i=this.moveMinute(this.date,j*4);n=this.moveMinute(this.viewDate,j*4)}}}}}if(this.dateWithinRange(i)){this.date=i;this.viewDate=n;this.setValue();this.update();o.preventDefault();k=true}break;case 13:if(this.viewMode!==0){var p=this.viewMode;this.showMode(-1);this.fill();if(p===this.viewMode&&this.autoclose){this.hide()}}else{this.fill();if(this.autoclose){this.hide()}}o.preventDefault();break;case 9:this.hide();break}if(k){var l;if(this.isInput){l=this.element}else{if(this.component){l=this.element.find("input")}}if(l){l.change()}this.element.trigger({type:"changeDate",date:this.getDate()})}},showMode:function(i){if(i){var j=Math.max(0,Math.min(c.modes.length-1,this.viewMode+i));if(j>=this.minView&&j<=this.maxView){this.element.trigger({type:"changeMode",date:this.viewDate,oldViewMode:this.viewMode,newViewMode:j});this.viewMode=j}}this.picker.find(">div").hide().filter(".datetimepicker-"+c.modes[this.viewMode].clsName).css("display","block");this.updateNavArrows()},reset:function(){this._setDate(null,"date")},convertViewModeText:function(i){switch(i){case 4:return"decade";case 3:return"year";case 2:return"month";case 1:return"day";case 0:return"hour"}}};var b=d.fn.datetimepicker;d.fn.datetimepicker=function(k){var i=Array.apply(null,arguments);i.shift();var j;this.each(function(){var n=d(this),m=n.data("datetimepicker"),l=typeof k==="object"&&k;if(!m){n.data("datetimepicker",(m=new g(this,d.extend({},d.fn.datetimepicker.defaults,l))))}if(typeof k==="string"&&typeof m[k]==="function"){j=m[k].apply(m,i);if(j!==f){return false}}});if(j!==f){return j}else{return this}};d.fn.datetimepicker.defaults={};d.fn.datetimepicker.Constructor=g;var e=d.fn.datetimepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],meridiem:["am","pm"],suffix:["st","nd","rd","th"],today:"Today",clear:"Clear"}};var c={modes:[{clsName:"minutes",navFnc:"Hours",navStep:1},{clsName:"hours",navFnc:"Date",navStep:1},{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10}],isLeapYear:function(i){return(((i%4===0)&&(i%100!==0))||(i%400===0))},getDaysInMonth:function(i,j){return[31,(c.isLeapYear(i)?29:28),31,30,31,30,31,31,30,31,30,31][j]},getDefaultFormat:function(i,j){if(i==="standard"){if(j==="input"){return"yyyy-mm-dd hh:ii"}else{return"yyyy-mm-dd hh:ii:ss"}}else{if(i==="php"){if(j==="input"){return"Y-m-d H:i"}else{return"Y-m-d H:i:s"}}else{throw new Error("Invalid format type.")}}},validParts:function(i){if(i==="standard"){return/t|hh?|HH?|p|P|z|Z|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g}else{if(i==="php"){return/[dDjlNwzFmMnStyYaABgGhHis]/g}else{throw new Error("Invalid format type.")}}},nonpunctuation:/[^ -\/:-@\[-`{-~\t\n\rTZ]+/g,parseFormat:function(l,j){var i=l.replace(this.validParts(j),"\0").split("\0"),k=l.match(this.validParts(j));if(!i||!i.length||!k||k.length===0){throw new Error("Invalid date format.")}return{separators:i,parts:k}},parseDate:function(A,y,v,j,r){if(A instanceof Date){var u=new Date(A.valueOf()-A.getTimezoneOffset()*60000);u.setMilliseconds(0);return u}if(/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(A)){y=this.parseFormat("yyyy-mm-dd",j)}if(/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}$/.test(A)){y=this.parseFormat("yyyy-mm-dd hh:ii",j)}if(/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}\:\d{1,2}[Z]{0,1}$/.test(A)){y=this.parseFormat("yyyy-mm-dd hh:ii:ss",j)}if(/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(A)){var l=/([-+]\d+)([dmwy])/,q=A.match(/([-+]\d+)([dmwy])/g),t,p;A=new Date();for(var x=0;x',headTemplateV3:' ',contTemplate:'',footTemplate:''};c.template='
'+c.headTemplate+c.contTemplate+c.footTemplate+'
'+c.headTemplate+c.contTemplate+c.footTemplate+'
'+c.headTemplate+""+c.footTemplate+'
'+c.headTemplate+c.contTemplate+c.footTemplate+'
'+c.headTemplate+c.contTemplate+c.footTemplate+"
";c.templateV3='
'+c.headTemplateV3+c.contTemplate+c.footTemplate+'
'+c.headTemplateV3+c.contTemplate+c.footTemplate+'
'+c.headTemplateV3+""+c.footTemplate+'
'+c.headTemplateV3+c.contTemplate+c.footTemplate+'
'+c.headTemplateV3+c.contTemplate+c.footTemplate+"
";d.fn.datetimepicker.DPGlobal=c;d.fn.datetimepicker.noConflict=function(){d.fn.datetimepicker=b;return this};d(document).on("focus.datetimepicker.data-api click.datetimepicker.data-api",'[data-provide="datetimepicker"]',function(j){var i=d(this);if(i.data("datetimepicker")){return}j.preventDefault();i.datetimepicker("show")});d(function(){d('[data-provide="datetimepicker-inline"]').datetimepicker()})})); \ No newline at end of file diff --git a/src/main/resources/static/halo-backend/plugins/datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js b/src/main/resources/static/halo-backend/plugins/datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js new file mode 100644 index 000000000..418fb3071 --- /dev/null +++ b/src/main/resources/static/halo-backend/plugins/datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js @@ -0,0 +1,16 @@ +/** + * Simplified Chinese translation for bootstrap-datetimepicker + * Yuan Cheung + */ +;(function($){ + $.fn.datetimepicker.dates['zh-CN'] = { + days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], + daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], + daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], + months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], + monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], + today: "今天", + suffix: [], + meridiem: ["上午", "下午"] + }; +}(jQuery)); diff --git a/src/main/resources/static/halo-backend/plugins/easymde/easymde.min.css b/src/main/resources/static/halo-backend/plugins/easymde/easymde.min.css new file mode 100644 index 000000000..b88308e67 --- /dev/null +++ b/src/main/resources/static/halo-backend/plugins/easymde/easymde.min.css @@ -0,0 +1,7 @@ +/** + * easymde v2.5.1 + * Copyright Jeroen Akkerman + * @link https://github.com/ionaru/easy-markdown-editor + * @license MIT + */ +.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0 0}.CodeMirror{box-sizing:border-box;height:auto;border:1px solid #ddd;border-bottom-left-radius:4px;border-bottom-right-radius:4px;padding:10px;font:inherit;z-index:1;word-wrap:break-word}.CodeMirror-scroll{cursor:text}.CodeMirror-fullscreen{background:#fff;position:fixed!important;top:50px;left:0;right:0;bottom:0;height:auto;z-index:9;border-right:none!important;border-bottom-right-radius:0!important}.CodeMirror-sided{width:50%!important}.CodeMirror-placeholder{opacity:.5}.CodeMirror-focused .CodeMirror-selected{background:#d9d9d9}.editor-toolbar{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;padding:0 10px;border-top:1px solid #bbb;border-left:1px solid #bbb;border-right:1px solid #bbb;border-top-left-radius:4px;border-top-right-radius:4px}.editor-toolbar:after,.editor-toolbar:before{display:block;content:' ';height:1px}.editor-toolbar:before{margin-bottom:8px}.editor-toolbar:after{margin-top:8px}.editor-toolbar.fullscreen{width:100%;height:50px;overflow-x:auto;overflow-y:hidden;white-space:nowrap;padding-top:10px;padding-bottom:10px;box-sizing:border-box;background:#fff;border:0;position:fixed;top:0;left:0;opacity:1;z-index:9}.editor-toolbar.fullscreen::before{width:20px;height:50px;background:-moz-linear-gradient(left,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,1)),color-stop(100%,rgba(255,255,255,0)));background:-webkit-linear-gradient(left,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);background:-o-linear-gradient(left,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);background:linear-gradient(to right,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);position:fixed;top:0;left:0;margin:0;padding:0}.editor-toolbar.fullscreen::after{width:20px;height:50px;background:-moz-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,0)),color-stop(100%,rgba(255,255,255,1)));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);background:-ms-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);position:fixed;top:0;right:0;margin:0;padding:0}.editor-toolbar button{background:0 0;display:inline-block;text-align:center;text-decoration:none!important;width:30px;height:30px;margin:0;padding:0;border:1px solid transparent;border-radius:3px;cursor:pointer}.editor-toolbar button.active,.editor-toolbar button:hover{background:#fcfcfc;border-color:#95a5a6}.editor-toolbar i.separator{display:inline-block;width:0;border-left:1px solid #d9d9d9;border-right:1px solid #fff;color:transparent;text-indent:-10px;margin:0 6px}.editor-toolbar button:after{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:65%;vertical-align:text-bottom;position:relative;top:2px}.editor-toolbar button.heading-1:after{content:"1"}.editor-toolbar button.heading-2:after{content:"2"}.editor-toolbar button.heading-3:after{content:"3"}.editor-toolbar button.heading-bigger:after{content:"▲"}.editor-toolbar button.heading-smaller:after{content:"▼"}.editor-toolbar.disabled-for-preview button:not(.no-disable){opacity:.6;pointer-events:none}@media only screen and (max-width:700px){.editor-toolbar i.no-mobile{display:none}}.editor-statusbar{padding:8px 10px;font-size:12px;color:#959694;text-align:right}.editor-statusbar span{display:inline-block;min-width:4em;margin-left:1em}.editor-statusbar .lines:before{content:'lines: '}.editor-statusbar .words:before{content:'words: '}.editor-statusbar .characters:before{content:'characters: '}.editor-preview{padding:10px;position:absolute;width:100%;height:100%;top:0;left:0;background:#fafafa;z-index:7;overflow:auto;display:none;box-sizing:border-box}.editor-preview-side{padding:10px;position:fixed;bottom:0;width:50%;top:50px;right:0;background:#fafafa;z-index:9;overflow:auto;display:none;box-sizing:border-box;border:1px solid #ddd;word-wrap:break-word}.editor-preview-active-side{display:block}.editor-preview-active{display:block}.editor-preview-side>p,.editor-preview>p{margin-top:0}.editor-preview pre,.editor-preview-side pre{background:#eee;margin-bottom:10px}.editor-preview table td,.editor-preview table th,.editor-preview-side table td,.editor-preview-side table th{border:1px solid #ddd;padding:5px}.cm-s-easymde .cm-tag{color:#63a35c}.cm-s-easymde .cm-attribute{color:#795da3}.cm-s-easymde .cm-string{color:#183691}.cm-s-easymde .cm-header-1{font-size:200%;line-height:200%}.cm-s-easymde .cm-header-2{font-size:160%;line-height:160%}.cm-s-easymde .cm-header-3{font-size:125%;line-height:125%}.cm-s-easymde .cm-header-4{font-size:110%;line-height:110%}.cm-s-easymde .cm-comment{background:rgba(0,0,0,.05);border-radius:2px}.cm-s-easymde .cm-link{color:#7f8c8d}.cm-s-easymde .cm-url{color:#aab2b3}.cm-s-easymde .cm-quote{color:#7f8c8d;font-style:italic}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:rgba(255,0,0,.15)} \ No newline at end of file diff --git a/src/main/resources/static/halo-backend/plugins/easymde/easymde.min.js b/src/main/resources/static/halo-backend/plugins/easymde/easymde.min.js new file mode 100644 index 000000000..88b2d109a --- /dev/null +++ b/src/main/resources/static/halo-backend/plugins/easymde/easymde.min.js @@ -0,0 +1,7 @@ +/** + * easymde v2.5.1 + * Copyright Jeroen Akkerman + * @link https://github.com/ionaru/easy-markdown-editor + * @license MIT + */ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).EasyMDE=e()}}(function(){return function o(a,l,s){function u(t,e){if(!l[t]){if(!a[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(c)return c(t,!0);var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}var i=l[t]={exports:{}};a[t][0].call(i.exports,function(e){return u(a[t][1][e]||e)},i,i.exports,o,a,l,s)}return l[t].exports}for(var c="function"==typeof require&&require,e=0;e>16&255,o[a++]=t>>8&255,o[a++]=255&t;var u,c;2===i&&(t=h[e.charCodeAt(s)]<<2|h[e.charCodeAt(s+1)]>>4,o[a++]=255&t);1===i&&(t=h[e.charCodeAt(s)]<<10|h[e.charCodeAt(s+1)]<<4|h[e.charCodeAt(s+2)]>>2,o[a++]=t>>8&255,o[a++]=255&t);return o},n.fromByteArray=function(e){for(var t,n=e.length,r=n%3,i=[],o=0,a=n-r;o>2]+l[t<<4&63]+"==")):2===r&&(t=(e[n-2]<<8)+e[n-1],i.push(l[t>>10]+l[t>>4&63]+l[t<<2&63]+"="));return i.join("")};for(var l=[],h=[],f="undefined"!=typeof Uint8Array?Uint8Array:Array,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0,o=r.length;i>18&63]+l[i>>12&63]+l[i>>6&63]+l[63&i]);return o.join("")}h["-".charCodeAt(0)]=62,h["_".charCodeAt(0)]=63},{}],2:[function(e,t,n){},{}],3:[function(e,t,n){"use strict";var r=e("base64-js"),o=e("ieee754");n.Buffer=h,n.SlowBuffer=function(e){+e!=e&&(e=0);return h.alloc(+e)},n.INSPECT_MAX_BYTES=50;var i=2147483647;function a(e){if(i>>1;case"base64":return I(e).length;default:if(i)return r?-1:O(e).length;t=(""+t).toLowerCase(),i=!0}}function p(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function m(e,t,n,r,i){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):2147483647=e.length){if(i)return-1;n=e.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof t&&(t=h.from(t,r)),h.isBuffer(t))return 0===t.length?-1:g(e,t,n,r,i);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):g(e,[t],n,r,i);throw new TypeError("val must be string, number or Buffer")}function g(e,t,n,r,i){var o,a=1,l=e.length,s=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;l/=a=2,s/=2,n/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(i){var c=-1;for(o=n;o>>10&1023|55296),c=56320|1023&c),r.push(c),i+=h}return function(e){var t=e.length;if(t<=w)return String.fromCharCode.apply(String,e);var n="",r=0;for(;rthis.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return S(this,t,n);case"utf8":case"utf-8":return b(this,t,n);case"ascii":return k(this,t,n);case"latin1":case"binary":return C(this,t,n);case"base64":return x(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}.apply(this,arguments)},h.prototype.equals=function(e){if(!h.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===h.compare(this,e)},h.prototype.inspect=function(){var e="",t=n.INSPECT_MAX_BYTES;return e=this.toString("hex",0,t).replace(/(.{2})/g,"$1 ").trim(),this.length>t&&(e+=" ... "),""},h.prototype.compare=function(e,t,n,r,i){if(R(e,Uint8Array)&&(e=h.from(e,e.offset,e.byteLength)),!h.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),t<0||n>e.length||r<0||i>this.length)throw new RangeError("out of range index");if(i<=r&&n<=t)return 0;if(i<=r)return-1;if(n<=t)return 1;if(this===e)return 0;for(var o=(i>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),l=Math.min(o,a),s=this.slice(r,i),u=e.slice(t,n),c=0;c>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var i=this.length-t;if((void 0===n||ithis.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o,a,l,s,u,c,h,f,d,p=!1;;)switch(r){case"hex":return v(this,e,t,n);case"utf8":case"utf-8":return f=t,d=n,B(O(e,(h=this).length-f),h,f,d);case"ascii":return y(this,e,t,n);case"latin1":case"binary":return y(this,e,t,n);case"base64":return s=this,u=t,c=n,B(I(e),s,u,c);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return a=t,l=n,B(function(e,t){for(var n,r,i,o=[],a=0;a>8,i=n%256,o.push(i),o.push(r);return o}(e,(o=this).length-a),o,a,l);default:if(p)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),p=!0}},h.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var w=4096;function k(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;ie.length)throw new RangeError("Index out of range")}function A(e,t,n,r,i,o){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function N(e,t,n,r,i){return t=+t,n>>>=0,i||A(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function E(e,t,n,r,i){return t=+t,n>>>=0,i||A(e,0,n,8),o.write(e,t,n,r,52,8),n+8}h.prototype.slice=function(e,t){var n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):n>>=0,t>>>=0,n||T(e,t,this.length);for(var r=this[e],i=1,o=0;++o>>=0,t>>>=0,n||T(e,t,this.length);for(var r=this[e+--t],i=1;0>>=0,t||T(e,1,this.length),this[e]},h.prototype.readUInt16LE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]|this[e+1]<<8},h.prototype.readUInt16BE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]<<8|this[e+1]},h.prototype.readUInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},h.prototype.readUInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},h.prototype.readIntLE=function(e,t,n){e>>>=0,t>>>=0,n||T(e,t,this.length);for(var r=this[e],i=1,o=0;++o>>=0,t>>>=0,n||T(e,t,this.length);for(var r=t,i=1,o=this[e+--r];0>>=0,t||T(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},h.prototype.readInt16LE=function(e,t){e>>>=0,t||T(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},h.prototype.readInt16BE=function(e,t){e>>>=0,t||T(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},h.prototype.readInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},h.prototype.readInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},h.prototype.readFloatLE=function(e,t){return e>>>=0,t||T(e,4,this.length),o.read(this,e,!0,23,4)},h.prototype.readFloatBE=function(e,t){return e>>>=0,t||T(e,4,this.length),o.read(this,e,!1,23,4)},h.prototype.readDoubleLE=function(e,t){return e>>>=0,t||T(e,8,this.length),o.read(this,e,!0,52,8)},h.prototype.readDoubleBE=function(e,t){return e>>>=0,t||T(e,8,this.length),o.read(this,e,!1,52,8)},h.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t>>>=0,n>>>=0,r)||M(this,e,t,n,Math.pow(2,8*n)-1,0);var i=1,o=0;for(this[t]=255&e;++o>>=0,n>>>=0,r)||M(this,e,t,n,Math.pow(2,8*n)-1,0);var i=n-1,o=1;for(this[t+i]=255&e;0<=--i&&(o*=256);)this[t+i]=e/o&255;return t+n},h.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,1,255,0),this[t]=255&e,t+1},h.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},h.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},h.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},h.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},h.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var i=Math.pow(2,8*n-1);M(this,e,t,n,i-1,-i)}var o=0,a=1,l=0;for(this[t]=255&e;++o>0)-l&255;return t+n},h.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var i=Math.pow(2,8*n-1);M(this,e,t,n,i-1,-i)}var o=n-1,a=1,l=0;for(this[t+o]=255&e;0<=--o&&(a*=256);)e<0&&0===l&&0!==this[t+o+1]&&(l=1),this[t+o]=(e/a>>0)-l&255;return t+n},h.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},h.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},h.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},h.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},h.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},h.prototype.writeFloatLE=function(e,t,n){return N(this,e,t,!0,n)},h.prototype.writeFloatBE=function(e,t,n){return N(this,e,t,!1,n)},h.prototype.writeDoubleLE=function(e,t,n){return E(this,e,t,!0,n)},h.prototype.writeDoubleBE=function(e,t,n){return E(this,e,t,!1,n)},h.prototype.copy=function(e,t,n,r){if(!h.isBuffer(e))throw new TypeError("argument should be a Buffer");if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),0=this.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(o=t;o>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function I(e){return r.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(D,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function B(e,t,n,r){for(var i=0;i=t.length||i>=e.length);++i)t[i+n]=e[i];return i}function R(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function H(e){return e!=e}},{"base64-js":1,ieee754:16}],4:[function(e,t,n){"use strict";var l=e("typo-js");function s(a){"function"==typeof(a=a||{}).codeMirrorInstance&&"function"==typeof a.codeMirrorInstance.defineMode?(String.prototype.includes||(String.prototype.includes=function(){return-1!==String.prototype.indexOf.apply(this,arguments)}),a.codeMirrorInstance.defineMode("spell-checker",function(e){if(!s.aff_loading){s.aff_loading=!0;var t=new XMLHttpRequest;t.open("GET","https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.aff",!0),t.onload=function(){4===t.readyState&&200===t.status&&(s.aff_data=t.responseText,2==++s.num_loaded&&(s.typo=new l("en_US",s.aff_data,s.dic_data,{platform:"any"})))},t.send(null)}if(!s.dic_loading){s.dic_loading=!0;var n=new XMLHttpRequest;n.open("GET","https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.dic",!0),n.onload=function(){4===n.readyState&&200===n.status&&(s.dic_data=n.responseText,2==++s.num_loaded&&(s.typo=new l("en_US",s.aff_data,s.dic_data,{platform:"any"})))},n.send(null)}var r='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~ ',i={token:function(e){var t=e.peek(),n="";if(r.includes(t))return e.next(),null;for(;null!=(t=e.peek())&&!r.includes(t);)n+=t,e.next();return s.typo&&!s.typo.check(n)?"spell-error":null}},o=a.codeMirrorInstance.getMode(e,e.backdrop||"text/plain");return a.codeMirrorInstance.overlayMode(o,i,!0)})):console.log("CodeMirror Spell Checker: You must provide an instance of CodeMirror via the option `codeMirrorInstance`")}s.num_loaded=0,s.aff_loading=!1,s.dic_loading=!1,s.aff_data="",s.dic_data="",t.exports=s},{"typo-js":18}],5:[function(e,t,n){(function(o){"use strict";o.defineOption("fullScreen",!1,function(e,t,n){var r,i;(n==o.Init&&(n=!1),!n!=!t)&&(t?(i=(r=e).getWrapperElement(),r.state.fullScreenRestore={scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset,width:i.style.width,height:i.style.height},i.style.width="",i.style.height="auto",i.className+=" CodeMirror-fullscreen",document.documentElement.style.overflow="hidden",r.refresh()):function(e){var t=e.getWrapperElement();t.className=t.className.replace(/\s*CodeMirror-fullscreen\b/,""),document.documentElement.style.overflow="";var n=e.state.fullScreenRestore;t.style.width=n.width,t.style.height=n.height,window.scrollTo(n.scrollLeft,n.scrollTop),e.refresh()}(e))})})("object"==typeof n&&"object"==typeof t?e("../../lib/codemirror"):CodeMirror)},{"../../lib/codemirror":11}],6:[function(e,t,n){(function(o){function a(e){e.state.placeholder&&(e.state.placeholder.parentNode.removeChild(e.state.placeholder),e.state.placeholder=null)}function r(e){a(e);var t=e.state.placeholder=document.createElement("pre");t.style.cssText="height: 0; overflow: visible",t.style.direction=e.getOption("direction"),t.className="CodeMirror-placeholder";var n=e.getOption("placeholder");"string"==typeof n&&(n=document.createTextNode(n)),t.appendChild(n),e.display.lineSpace.insertBefore(t,e.display.lineSpace.firstChild)}function l(e){i(e)&&r(e)}function s(e){var t=e.getWrapperElement(),n=i(e);t.className=t.className.replace(" CodeMirror-empty","")+(n?" CodeMirror-empty":""),n?r(e):a(e)}function i(e){return 1===e.lineCount()&&""===e.getLine(0)}o.defineOption("placeholder","",function(e,t,n){var r=n&&n!=o.Init;if(t&&!r)e.on("blur",l),e.on("change",s),e.on("swapDoc",s),s(e);else if(!t&&r){e.off("blur",l),e.off("change",s),e.off("swapDoc",s),a(e);var i=e.getWrapperElement();i.className=i.className.replace(" CodeMirror-empty","")}t&&!e.hasFocus()&&l(e)})})("object"==typeof n&&"object"==typeof t?e("../../lib/codemirror"):CodeMirror)},{"../../lib/codemirror":11}],7:[function(e,t,n){(function(m){"use strict";var g=/^(\s*)(>[> ]*|[*+-] \[[x ]\]\s|[*+-]\s|(\d+)([.)]))(\s*)/,v=/^(\s*)(>[> ]*|[*+-] \[[x ]\]|[*+-]|(\d+)[.)])(\s*)$/,y=/[*+-]\s/;function x(e,t){var n=t.line,r=0,i=0,o=g.exec(e.getLine(n)),a=o[1];do{var l=n+(r+=1),s=e.getLine(l),u=g.exec(s);if(u){var c=u[1],h=parseInt(o[3],10)+r-i,f=parseInt(u[3],10),d=f;if(a!==c||isNaN(f)){if(a.length>c.length)return;if(a.length\s*$/.test(s)||e.replaceRange("",{line:i.line,ch:0},{line:i.line,ch:i.ch+1}),n[r]="\n";else{var h=u[1],f=u[5],d=!(y.test(u[2])||0<=u[2].indexOf(">")),p=d?parseInt(u[3],10)+1+u[4]:u[2].replace("x"," ");n[r]="\n"+h+p+f,d&&x(e,i)}}e.replaceSelections(n)}})("object"==typeof n&&"object"==typeof t?e("../../lib/codemirror"):CodeMirror)},{"../../lib/codemirror":11}],8:[function(e,t,n){(function(t){"use strict";t.overlayMode=function(r,i,o){return{startState:function(){return{base:t.startState(r),overlay:t.startState(i),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(e){return{base:t.copyState(r,e.base),overlay:t.copyState(i,e.overlay),basePos:e.basePos,baseCur:null,overlayPos:e.overlayPos,overlayCur:null}},token:function(e,t){return(e!=t.streamSeen||Math.min(t.basePos,t.overlayPos)>1,l=r(e.slice(0,a)).length;if(l==n)return a;n=n.line,c=u?n:d(s,0),h=e.markText(l,c,{className:o});if(null==r?i.push(h):i.splice(r++,0,h),u)break;a=s}}function s(e){for(var t=e.state.markedSelection,n=0;n=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],o=i.chunkSize();if(t=e.first&&to?ge(o,se(e,o).text.length):(r=se(e,(n=t).line).text.length,null==(i=n.ch)||r=t:o.to>t);(r||(r=[])).push(new Me(a,o.from,l?null:o.to))}}return r}(n,i,a),s=function(e,t,n){var r;if(e)for(var i=0;i=t:o.to>t)||o.from==t&&"bookmark"==a.type&&(!n||o.marker.insertLeft)){var l=null==o.from||(a.inclusiveLeft?o.from<=t:o.fromt)&&(!n||Re(n,o.marker)<0)&&(n=o.marker)}return n}function _e(e,t,n,r,i){var o=se(e,t),a=Te&&o.markedSpans;if(a)for(var l=0;le.lastLine())return t;var n,r=se(e,t);if(!$e(e,r))return t;for(;n=Pe(r);)r=n.find(1,!0).line;return fe(r)+1}function $e(e,t){var n=Te&&t.markedSpans;if(n)for(var r=void 0,i=0;in.maxLineLength&&(n.maxLineLength=t,n.maxLine=e)})}var Ye=null;function Ze(e,t,n){var r;Ye=null;for(var i=0;it)return i;o.to==t&&(o.from!=o.to&&"before"==n?r=i:Ye=i),o.from==t&&(o.from!=o.to&&"before"!=n?r=i:Ye=i)}return null!=r?r:Ye}var Je=function(){var H="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",z="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";var P=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,W=/[stwN]/,_=/[LRr]/,j=/[Lb1n]/,U=/[1n]/;function q(e,t,n){this.level=e,this.from=t,this.to=n}return function(e,t){var n="ltr"==t?"L":"R";if(0==e.length||"ltr"==t&&!P.test(e))return!1;for(var r,i=e.length,o=[],a=0;a=this.string.length},It.prototype.sol=function(){return this.pos==this.lineStart},It.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},It.prototype.next=function(){if(this.post},It.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},It.prototype.skipToEnd=function(){this.pos=this.string.length},It.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(-1e.options.maxHighlightLength&&Dt(e.doc.mode,r.state),o=Ht(e,t,r);i&&(r.state=i),t.stateAfter=r.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function Pt(n,r,e){var t=n.doc,i=n.display;if(!t.mode.startState)return new Rt(t,!0,r);var o=function(e,t,n){for(var r,i,o=e.doc,a=n?-1:t-(e.doc.mode.innerMode?1e3:100),l=t;at.first&&se(t,o-1).stateAfter,l=a?Rt.fromSaved(t,a,o):new Rt(t,Ot(t.mode),o);return t.iter(o,r,function(e){Wt(n,e.text,l);var t=l.line;e.stateAfter=t==r-1||t%5==0||t>=i.viewFrom&&tt.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}Rt.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},Rt.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},Rt.prototype.nextLine=function(){this.line++,0e.options.maxHighlightLength?(l=!1,a&&Wt(e,t,r,h.pos),h.pos=t.length,null):$t(jt(n,h,r.state,f),o),f){var d=f[0].name;d&&(s="m-"+(s?d+" "+s:d))}if(!l||c!=s){for(;ul&&u.from<=l);c++);if(u.to>=s)return h(e,t,n,r,i,o,a);h(e,t.slice(0,u.to-l),n,r,null,o,a),r=null,t=t.slice(u.to-l),l=u.to}}}function tn(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",n.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function nn(e,t,n){var r=e.markedSpans,i=e.text,o=0;if(r)for(var a,l,s,u,c,h,f,d=i.length,p=0,m=1,g="",v=0;;){if(v==p){s=u=c=h=l="",f=null,v=1/0;for(var y=[],x=void 0,b=0;bp||k.collapsed&&w.to==p&&w.from==p)?(null!=w.to&&w.to!=p&&v>w.to&&(v=w.to,u=""),k.className&&(s+=" "+k.className),k.css&&(l=(l?l+";":"")+k.css),k.startStyle&&w.from==p&&(c+=" "+k.startStyle),k.endStyle&&w.to==v&&(x||(x=[])).push(k.endStyle,w.to),k.title&&!h&&(h=k.title),k.collapsed&&(!f||Re(f.marker,k)<0)&&(f=w)):w.from>p&&v>w.from&&(v=w.from)}if(x)for(var C=0;Cn)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function Nn(e,t,n,r){return Fn(e,Dn(e,t),n,r)}function En(e,t){if(t>=e.display.viewFrom&&t=n.lineN&&tt)&&(i=(o=s-l)-1,s<=t&&(a="right")),null!=i){if(r=e[u+2],l==s&&n==(r.insertLeft?"left":"right")&&(a=n),"left"==n&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)r=e[2+(u-=3)],a="left";if("right"==n&&i==s-l)for(;u=o.text.length?(t=o.text.length,n="before"):t<=0&&(t=0,n="after"),!u)return s("before"==n?t-1:t,"before"==n);function c(e,t,n){return s(n?e-1:e,1==u[t].level!=n)}var h=Ze(u,t,n),f=Ye,d=c(t,h,"before"==n);return null!=f&&(d.other=c(t,f,"before"!=n)),d}function Vn(e,t){var n=0;t=Ce(e.doc,t),e.options.lineWrapping||(n=tr(e.display)*t.ch);var r=se(e.doc,t.line),i=Ve(r)+kn(e.display);return{left:n,right:n,top:i,bottom:i+r.height}}function Xn(e,t,n,r,i){var o=ge(e,t,n);return o.xRel=i,r&&(o.outside=!0),o}function Kn(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return Xn(r.first,0,null,!0,-1);var i=de(r,n),o=r.first+r.size-1;if(or},o,i)}}function Zn(e,t,n,r){return n||(n=Dn(e,t)),Yn(e,t,n,Un(e,t,Fn(e,n,r),"line").top)}function Jn(e,t,n,r){return!(e.bottom<=n)&&(e.top>n||(r?e.left:e.right)>t)}function Qn(n,e,t,r,i){i-=Ve(e);var o=Dn(n,e),a=jn(e),l=0,s=e.text.length,u=!0,c=Qe(e,n.doc.direction);if(c){var h=(n.options.lineWrapping?function(e,t,n,r,i,o,a){var l=Yn(e,t,r,a),s=l.begin,u=l.end;/\s/.test(t.text.charAt(u-1))&&u--;for(var c=null,h=null,f=0;f=u||d.to<=s)){var p=1!=d.level,m=Fn(e,r,p?Math.min(u,d.to)-1:Math.max(s,d.from)).right,g=mu&&(c={from:c.from,to:u,level:c.level});return c}:function(r,i,o,a,l,s,u){var e=ae(function(e){var t=l[e],n=1!=t.level;return Jn(Gn(r,ge(o,n?t.to:t.from,n?"before":"after"),"line",i,a),s,u,!0)},0,l.length-1),t=l[e];if(0u&&(t=l[e-1])}return t})(n,e,t,o,c,r,i);l=(u=1!=h.level)?h.from:h.to-1,s=u?h.to:h.from-1}var f,d,p=null,m=null,g=ae(function(e){var t=Fn(n,o,e);return t.top+=a,t.bottom+=a,!!Jn(t,r,i,!1)&&(t.top<=i&&t.left<=r&&(p=e,m=t),!0)},l,s),v=!1;if(m){var y=r-m.left=b.bottom}return Xn(t,g=oe(e.text,g,1),d,v,r-f)}function er(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==On){On=E("pre");for(var t=0;t<49;++t)On.appendChild(document.createTextNode("x")),On.appendChild(E("br"));On.appendChild(document.createTextNode("x"))}A(e.measure,On);var n=On.offsetHeight/50;return 3=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,r=0;r=e.display.viewTo||l.to().linet||t==n&&a.to==t)&&(r(Math.max(a.from,t),Math.min(a.to,n),1==a.level?"rtl":"ltr",o),i=!0)}i||r(t,n,"ltr")}(L,y||0,null==x?k:x,function(e,t,n,r){var i="ltr"==n,o=C(e,i?"left":"right"),a=C(t-1,i?"right":"left"),l=null==y&&0==e,s=null==x&&t==k,u=0==r,c=!L||r==L.length-1;if(a.top-o.top<=3){var h=(A?s:l)&&c,f=(A?l:s)&&u?T:(i?o:a).left,d=h?M:(i?a:o).right;N(f,o.top,d-f,o.bottom)}else{var p,m,g,v;v=i?(p=A&&l&&u?T:o.left,m=A?M:S(e,n,"before"),g=A?T:S(t,n,"after"),A&&s&&c?M:a.right):(p=A?S(e,n,"before"):T,m=!A&&l&&u?M:o.right,g=!A&&s&&c?T:a.left,A?S(t,n,"after"):M),N(p,o.top,m-p,o.bottom),o.bottom=a&&(o=de(t,Ve(se(t,s))-e.wrapper.clientHeight),a=s)}return{from:o,to:Math.max(a,o+1)}}function wr(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=rr(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=r+"px",a=0;ao&&(t.bottom=t.top+o);var l=e.doc.height+Cn(n),s=t.topl-r;if(t.topi+o){var c=Math.min(t.top,(u?l:t.bottom)-o);c!=i&&(a.scrollTop=c)}var h=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft,f=Tn(e)-(e.options.fixedGutter?n.gutters.offsetWidth:0),d=t.right-t.left>f;return d&&(t.right=t.left+f),t.left<10?a.scrollLeft=0:t.leftf+h-3&&(a.scrollLeft=t.right+(d?0:10)-f),a}function Sr(e,t){null!=t&&(Mr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function Lr(e){Mr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Tr(e,t,n){null==t&&null==n||Mr(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function Mr(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Ar(e,Vn(e,t.from),Vn(e,t.to),t.margin))}function Ar(e,t,n,r){var i=Cr(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});Tr(e,i.scrollLeft,i.scrollTop)}function Nr(e,t){Math.abs(e.doc.scrollTop-t)<2||(m||ai(e,{top:t}),Er(e,t,!0),m&&ai(e),ti(e,100))}function Er(e,t,n){t=Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t),(e.display.scroller.scrollTop!=t||n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Dr(e,t,n,r){t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(e.doc.scrollLeft=t,wr(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Fr(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+Cn(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+Ln(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}var Or=function(e,t,n){this.cm=n;var r=this.vert=E("div",[E("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=E("div",[E("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=i.tabIndex=-1,e(r),e(i),tt(r,"scroll",function(){r.clientHeight&&t(r.scrollTop,"vertical")}),tt(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,w&&k<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};Or.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,r=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?r+"px":"0";var i=e.viewHeight-(t?r:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?r+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(n?r:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&0=i.viewTo)||i.maxLineChanged&&r.options.lineWrapping,e.update=e.mustUpdate&&new ri(r,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Ur(e){var t=e.cm,n=t.display;e.updatedDisplay&&yr(t),e.barMeasure=Fr(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Nn(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+Ln(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-Tn(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}function qr(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!u){var o=E("div","​",null,"position: absolute;\n top: "+(t.top-n.viewOffset-kn(e.display))+"px;\n height: "+(t.bottom-t.top+Ln(e)+n.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(o),o.scrollIntoView(i),e.display.lineSpace.removeChild(o)}}}(t,function(e,t,n,r){var i;null==r&&(r=0),e.options.lineWrapping||t!=n||(n="before"==(t=t.ch?ge(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t).sticky?ge(t.line,t.ch+1,"before"):t);for(var o=0;o<5;o++){var a=!1,l=Gn(e,t),s=n&&n!=t?Gn(e,n):l,u=Cr(e,i={left:Math.min(l.left,s.left),top:Math.min(l.top,s.top)-r,right:Math.max(l.left,s.left),bottom:Math.max(l.bottom,s.bottom)+r}),c=e.doc.scrollTop,h=e.doc.scrollLeft;if(null!=u.scrollTop&&(Nr(e,u.scrollTop),1t)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)Te&&Ue(e.doc,t)i.viewFrom?Jr(e):(i.viewFrom+=r,i.viewTo+=r);else if(t<=i.viewFrom&&n>=i.viewTo)Jr(e);else if(t<=i.viewFrom){var o=Qr(e,n,n+r,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=r):Jr(e)}else if(n>=i.viewTo){var a=Qr(e,t,t,-1);a?(i.view=i.view.slice(0,a.index),i.viewTo=a.lineN):Jr(e)}else{var l=Qr(e,t,t,-1),s=Qr(e,n,n+r,1);l&&s?(i.view=i.view.slice(0,l.index).concat(on(e,l.lineN,s.lineN)).concat(i.view.slice(s.index)),i.viewTo+=r):Jr(e)}var u=i.externalMeasured;u&&(n=i.lineN&&t=r.viewTo)){var o=r.view[lr(e,t)];if(null!=o.node){var a=o.changes||(o.changes=[]);-1==W(a,n)&&a.push(n)}}}function Jr(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function Qr(e,t,n,r){var i,o=lr(e,t),a=e.display.view;if(!Te||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var l=e.display.viewFrom,s=0;s=s.display.viewTo)){var c=+new Date+s.options.workTime,h=Pt(s,u.highlightFrontier),f=[];u.iter(h.line,Math.min(u.first+u.size,s.display.viewTo+500),function(e){if(h.line>=s.display.viewFrom){var t=e.styles,n=e.text.length>s.options.maxHighlightLength?Dt(u.mode,h.state):null,r=Ht(s,e,h,!0);n&&(h.state=n),e.styles=r.styles;var i=e.styleClasses,o=r.classes;o?e.styleClasses=o:i&&(e.styleClasses=null);for(var a=!t||t.length!=e.styles.length||i!=o&&(!i||!o||i.bgClass!=o.bgClass||i.textClass!=o.textClass),l=0;!a&&lc)return ti(s,s.options.workDelay),!0}),u.highlightFrontier=h.line,u.modeFrontier=Math.max(u.modeFrontier,h.line),f.length&&Gr(s,function(){for(var e=0;e=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==ei(e))return!1;kr(e)&&(Jr(e),t.dims=nr(e));var i=r.first+r.size,o=Math.max(t.visible.from-e.options.viewportMargin,r.first),a=Math.min(i,t.visible.to+e.options.viewportMargin);n.viewFroma&&n.viewTo-a<20&&(a=Math.min(i,n.viewTo)),Te&&(o=Ue(e.doc,o),a=qe(e.doc,a));var l,s,u,c,h=o!=n.viewFrom||a!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;s=o,u=a,0==(c=(l=e).display).view.length||s>=c.viewTo||u<=c.viewFrom?(c.view=on(l,s,u),c.viewFrom=s):(c.viewFrom>s?c.view=on(l,s,c.viewFrom).concat(c.view):c.viewFromu&&(c.view=c.view.slice(0,lr(l,u)))),c.viewTo=u,n.viewOffset=Ve(se(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var f=ei(e);if(!h&&0==f&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var d=function(e){if(e.hasFocus())return null;var t=F();if(!t||!D(e.display.lineDiv,t))return null;var n={activeElt:t};if(window.getSelection){var r=window.getSelection();r.anchorNode&&r.extend&&D(e.display.lineDiv,r.anchorNode)&&(n.anchorNode=r.anchorNode,n.anchorOffset=r.anchorOffset,n.focusNode=r.focusNode,n.focusOffset=r.focusOffset)}return n}(e);return 4=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&ii(e,t);r=!1){yr(e);var i=Fr(e);sr(e),Br(e,i),si(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function ai(e,t){var n=new ri(e,t);if(ii(e,n)){yr(e),oi(e,n);var r=Fr(e);sr(e),Br(e,r),si(e,r),n.finish()}}function li(e){var t=e.display.gutters.offsetWidth;e.display.sizer.style.marginLeft=t+"px"}function si(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Ln(e)+"px"}function ui(e){var t=e.display.gutters,n=e.options.gutters;M(t);for(var r=0;ra.clientWidth,s=a.scrollHeight>a.clientHeight;if(r&&l||i&&s){if(i&&b&&x)e:for(var u=t.target,c=o.view;u!=a;u=u.parentNode)for(var h=0;hs-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=(l=i).lastOp==r?(Oi(l.done),K(l.done)):l.done.length&&!K(l.done).ranges?K(l.done):1i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(n),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=r,i.lastOrigin=i.lastSelOrigin=t.origin,a||it(e,"historyAdded")}function Bi(e,t,n,r){var i,o,a,l,s,u=e.history,c=r&&r.origin;n==u.lastSelOp||c&&u.lastSelOrigin==c&&(u.lastModTime==u.lastSelTime&&u.lastOrigin==c||(i=e,o=c,a=K(u.done),l=t,"*"==(s=o.charAt(0))||"+"==s&&a.ranges.length==l.ranges.length&&a.somethingSelected()==l.somethingSelected()&&new Date-i.history.lastSelTime<=(i.cm?i.cm.options.historyEventDelay:500)))?u.done[u.done.length-1]=t:Ri(t,u.done),u.lastSelTime=+new Date,u.lastSelOrigin=c,u.lastSelOp=n,r&&!1!==r.clearRedo&&Oi(u.undone)}function Ri(e,t){var n=K(t);n&&n.ranges&&n.equals(e)||t.push(e)}function Hi(t,n,e,r){var i=n["spans_"+t.id],o=0;t.iter(Math.max(t.first,e),Math.min(t.first+t.size,r),function(e){e.markedSpans&&((i||(i=n["spans_"+t.id]={}))[o]=e.markedSpans),++o})}function zi(e){if(!e)return null;for(var t,n=0;n=t.ch:l.to>t.ch))){if(i&&(it(s,"beforeCursorEnter"),s.explicitlyCleared)){if(o.markedSpans){--a;continue}break}if(!s.atomic)continue;if(n){var u=s.find(r<0?1:-1),c=void 0;if((r<0?s.inclusiveRight:s.inclusiveLeft)&&(u=eo(e,u,-r,u&&u.line==t.line?o:null)),u&&u.line==t.line&&(c=ve(u,n))&&(r<0?c<0:0e.first?Ce(e,ge(t.line-1)):null:0e.lastLine())){if(t.from.lineo&&(t={from:t.from,to:ge(o,se(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=ue(e,t.from,t.to),n||(n=ki(e,t)),e.cm?function(e,t,n){var r=e.doc,i=e.display,o=t.from,a=t.to,l=!1,s=o.line;e.options.lineWrapping||(s=fe(je(se(r,o.line))),r.iter(s,a.line+1,function(e){if(e==i.maxLine)return l=!0}));-1i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,l=!1)}),l&&(e.curOp.updateMaxLine=!0));(function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontiert.display.maxLineLength&&(t.display.maxLine=c,t.display.maxLineLength=h,t.display.maxLineChanged=!0)}null!=i&&t&&this.collapsed&&Yr(t,i,o+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Yi(t.doc)),t&&sn(t,"markerCleared",t,this,i,o),n&&_r(t),this.parent&&this.parent.clear()}},xo.prototype.find=function(e,t){var n,r;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(i,o,a){i=Ce(this,i),o=Ce(this,o);var l=[],s=i.line;return this.iter(i.line,o.line+1,function(e){var t=e.markedSpans;if(t)for(var n=0;n=r.to||null==r.from&&s!=i.line||null!=r.from&&s==o.line&&r.from>=o.ch||a&&!a(r.marker)||l.push(r.marker.parent||r.marker)}++s}),l},getAllMarks:function(){var r=[];return this.iter(function(e){var t=e.markedSpans;if(t)for(var n=0;nt&&(t=e.from),null!=e.to&&e.toe.text.length?null:r}function Vo(e,t,n){var r=Go(e,t.ch,n);return null==r?null:new ge(t.line,r,n<0?"after":"before")}function Xo(e,t,n,r,i){if(e){var o=Qe(n,t.doc.direction);if(o){var a,l=i<0?K(o):o[0],s=i<0==(1==l.level)?"after":"before";if(0a.doc.first){var o=se(a.doc,r.line-1).text;o&&(r=new ge(r.line,1),a.replaceRange(i.charAt(0)+a.doc.lineSeparator()+o.charAt(o.length-1),ge(r.line-1,o.length-1),r,"+transpose"))}t.push(new vi(r,r))}a.setSelections(t)})},newlineAndIndent:function(r){return Gr(r,function(){for(var e=r.listSelections(),t=e.length-1;0<=t;t--)r.replaceRange(r.doc.lineSeparator(),e[t].anchor,e[t].head,"+input");e=r.listSelections();for(var n=0;nc&&t.push(new vi(ge(l,c),ge(l,G(u,a,n))))}t.length||t.push(new vi(v,v)),Vi(x,yi(g,k.ranges.slice(0,w).concat(t),w),{origin:"*mouse",scroll:!1}),g.scrollIntoView(e)}else{var h,f=b,d=ha(g,e,y.unit),p=f.anchor;p=0=i.to||r.lines.bottom?20:0;o&&setTimeout(Vr(g,function(){u==n&&(a.scroller.scrollTop+=o,e(t))}),50)}}(e):r(e)}),o=Vr(g,r);g.state.selectingText=o,tt(a.wrapper.ownerDocument,"mousemove",i),tt(a.wrapper.ownerDocument,"mouseup",o)}(e,r,t,o)}(t,a,s,e):dt(e)==n.scroller&&ut(e):2==l?(a&&ji(t.doc,a),setTimeout(function(){return n.input.focus()},20)):3==l&&(C?t.display.input.onContextMenu(e):mr(t)))}}function ha(e,t,n){if("char"==n)return new vi(t,t);if("word"==n)return e.findWordAt(t);if("line"==n)return new vi(ge(t.line,0),Ce(e.doc,ge(t.line+1,0)));var r=n(e,t);return new vi(r.from,r.to)}function fa(e,t,n,r){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&ut(t);var a=e.display,l=a.lineDiv.getBoundingClientRect();if(o>l.bottom||!lt(e,n))return ht(t);o-=l.top-a.viewOffset;for(var s=0;s=i)return it(e,n,e,de(e.doc,o),e.options.gutters[s],t),ht(t)}}function da(e,t){return fa(e,t,"gutterClick",!0)}function pa(e,t){var n,r;wn(e.display,t)||(r=t,lt(n=e,"gutterContextMenu")&&fa(n,r,"gutterContextMenu",!1))||(ot(e,t,"contextmenu")||C||e.display.input.onContextMenu(t))}function ma(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Pn(e)}ua.prototype.compare=function(e,t,n){return this.time+400>e&&0==ve(t,this.pos)&&n==this.button};var ga={toString:function(){return"CodeMirror.Init"}},va={},ya={};function xa(e){ui(e),Yr(e),wr(e)}function ba(e,t,n){if(!t!=!(n&&n!=ga)){var r=e.display.dragFunctions,i=t?tt:rt;i(e.display.scroller,"dragstart",r.start),i(e.display.scroller,"dragenter",r.enter),i(e.display.scroller,"dragover",r.over),i(e.display.scroller,"dragleave",r.leave),i(e.display.scroller,"drop",r.drop)}}function wa(e){e.options.lineWrapping?(O(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(T(e.display.wrapper,"CodeMirror-wrap"),Ke(e)),or(e),Yr(e),Pn(e),setTimeout(function(){return Br(e)},100)}function ka(e,t){var n=this;if(!(this instanceof ka))return new ka(e,t);this.options=t=t?H(t):{},H(va,t,!1),ci(t);var r=t.value;"string"==typeof r?r=new Lo(r,t.mode,null,t.lineSeparator,t.direction):t.mode&&(r.modeOption=t.mode),this.doc=r;var i=new ka.inputStyles[t.inputStyle](this),o=this.display=new le(e,r,i);for(var a in ui(o.wrapper.CodeMirror=this),ma(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),zr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new P,keySeq:null,specialChars:null},t.autofocus&&!f&&o.input.focus(),w&&k<11&&setTimeout(function(){return n.display.input.reset(!0)},20),function(i){var o=i.display;tt(o.scroller,"mousedown",Vr(i,ca)),tt(o.scroller,"dblclick",w&&k<11?Vr(i,function(e){if(!ot(i,e)){var t=ar(i,e);if(t&&!da(i,e)&&!wn(i.display,e)){ut(e);var n=i.findWordAt(t);ji(i.doc,n.anchor,n.head)}}}):function(e){return ot(i,e)||ut(e)});tt(o.scroller,"contextmenu",function(e){return pa(i,e)});var n,r={end:0};function a(){o.activeTouch&&(n=setTimeout(function(){return o.activeTouch=null},1e3),(r=o.activeTouch).end=+new Date)}function l(e,t){if(null==t.left)return!0;var n=t.left-e.left,r=t.top-e.top;return 400o.first?z(se(o,t-1).text,null,a):0:"add"==n?u=s+e.options.indentUnit:"subtract"==n?u=s-e.options.indentUnit:"number"==typeof n&&(u=s+n),u=Math.max(0,u);var h="",f=0;if(e.options.indentWithTabs)for(var d=Math.floor(u/a);d;--d)f+=a,h+="\t";if(f=n.text.length?(l.ch=n.text.length,l.sticky="before"):l.ch<=0&&(l.ch=0,l.sticky="after");var r=Ze(s,l.ch,l.sticky),i=s[r];if("ltr"==t.doc.direction&&i.level%2==0&&(0l.ch:i.from=i.from&&f>=c.begin)){var d=h?"before":"after";return new ge(l.line,f,d)}}var p=function(e,t,n){for(var r=function(e,t){return t?new ge(l.line,u(e,1),"before"):new ge(l.line,e,"after")};0<=e&&e=r.first+r.size||(i=new ge(n,i.ch,i.sticky),!(l=se(r,n))))return!1;i=Xo(a,r.cm,l,i.line,o)}else i=t;return!0}if("char"==e)s();else if("column"==e)s(!0);else if("word"==e||"group"==e)for(var u=null,c="group"==e,h=r.cm&&r.cm.getHelper(i,"wordChars"),f=!0;!(o<0)||s(!f);f=!1){var d=l.text.charAt(i.ch)||"\n",p=te(d,h)?"w":c&&"\n"==d?"n":!c||/\s/.test(d)?null:"p";if(!c||f||p||(p="s"),u&&u!=p){o<0&&(o=1,s(),i.sticky="after");break}if(p&&(u=p),0=a.height){o.hitSide=!0;break}i+=5*n}return o}var Ba=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new P,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Ra(e,t){var n=En(e,t.line);if(!n||n.hidden)return null;var r=se(e.doc,t.line),i=An(n,r,t.line),o=Qe(r,e.doc.direction),a="left";o&&(a=Ze(o,t.ch)%2?"right":"left");var l=Bn(i.map,t.ch,a);return l.offset="right"==l.collapse?l.end:l.start,l}function Ha(e,t){return t&&(e.bad=!0),e}function za(e,t,n){var r;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return Ha(e.clipPos(ge(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i=t.display.viewTo||i.line=t.display.viewFrom&&Ra(t,r)||{node:l[0].measure.map[2],offset:0},u=i.liner.firstLine()&&(a=ge(a.line-1,se(r.doc,a.line-1).length)),l.ch==se(r.doc,l.line).text.length&&l.linei.viewTo-1)return!1;n=a.line==i.viewFrom||0==(e=lr(r,a.line))?(t=fe(i.view[0].line),i.view[0].node):(t=fe(i.view[e].line),i.view[e-1].node.nextSibling);var s,u,c=lr(r,l.line);if(u=c==i.view.length-1?(s=i.viewTo-1,i.lineDiv.lastChild):(s=fe(i.view[c+1].line)-1,i.view[c+1].node.previousSibling),!n)return!1;for(var h=r.doc.splitLines(function(s,e,t,u,c){var n="",h=!1,f=s.doc.lineSeparator(),d=!1;function p(){h&&(n+=f,d&&(n+=f),h=d=!1)}function m(e){e&&(p(),n+=e)}function g(e){if(1==e.nodeType){var t=e.getAttribute("cm-text");if(t)return void m(t);var n,r=e.getAttribute("cm-marker");if(r){var i=s.findMarks(ge(u,0),ge(c+1,0),(l=+r,function(e){return e.id==l}));return void(i.length&&(n=i[0].find(0))&&m(ue(s.doc,n.from,n.to).join(f)))}if("false"==e.getAttribute("contenteditable"))return;var o=/^(pre|div|p|li|table|br)$/i.test(e.nodeName);if(!/^br$/i.test(e.nodeName)&&0==e.textContent.length)return;o&&p();for(var a=0;aa.ch&&y.charCodeAt(y.length-p-1)==x.charCodeAt(x.length-p-1);)d--,p++;h[h.length-1]=y.slice(0,y.length-p).replace(/^\u200b+/,""),h[0]=h[0].slice(d).replace(/\u200b+$/,"");var w=ge(t,d),k=ge(s,f.length?K(f).length-p:0);return 1n&&(Sa(this,i.head.line,e,!0),n=i.head.line,r==this.doc.sel.primIndex&&Lr(this));else{var o=i.from(),a=i.to(),l=Math.max(n,o.line);n=Math.min(this.lastLine(),a.line-(a.ch?0:1))+1;for(var s=l;s>1;if((a?n[2*a-1]:0)>=o)i=a;else{if(!(n[2*a+1]h)&&e.top>t.offsetHeight?u=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=h&&(u=e.bottom),c+t.offsetWidth>f&&(c=f-t.offsetWidth)}t.style.top=u+"px",t.style.left=t.style.right="","right"==i?(c=s.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?c=0:"middle"==i&&(c=(s.sizer.clientWidth-t.offsetWidth)/2),t.style.left=c+"px"),n&&(o=this,a={left:c,top:u,right:c+t.offsetWidth,bottom:u+t.offsetHeight},null!=(l=Cr(o,a)).scrollTop&&Nr(o,l.scrollTop),null!=l.scrollLeft&&Dr(o,l.scrollLeft))},triggerOnKeyDown:Xr(ia),triggerOnKeyPress:Xr(aa),triggerOnKeyUp:oa,triggerOnMouseDown:Xr(ca),execCommand:function(e){if(Ko.hasOwnProperty(e))return Ko[e].call(null,this)},triggerElectric:Xr(function(e){Na(this,e)}),findPosH:function(e,t,n,r){var i=1;t<0&&(i=-1,t=-t);for(var o=Ce(this.doc,e),a=0;a]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i;a.defineMode("gfm",function(e,i){var o=0;var t={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(e){return{code:e.code,codeBlock:e.codeBlock,ateSpace:e.ateSpace}},token:function(e,t){if(t.combineTokens=null,t.codeBlock)return e.match(/^```+/)?t.codeBlock=!1:e.skipToEnd(),null;if(e.sol()&&(t.code=!1),e.sol()&&e.match(/^```+/))return e.skipToEnd(),t.codeBlock=!0,null;if("`"===e.peek()){e.next();var n=e.pos;e.eatWhile("`");var r=1+e.pos-n;return t.code?r===o&&(t.code=!1):(o=r,t.code=!0),null}if(t.code)return e.next(),null;if(e.eatSpace())return t.ateSpace=!0,null;if((e.sol()||t.ateSpace)&&(t.ateSpace=!1)!==i.gitHubSpice){if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?=.{0,6}\d)(?:[a-f0-9]{7,40}\b)/))return t.combineTokens=!0,"link";if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/))return t.combineTokens=!0,"link"}return e.match(l)&&"]("!=e.string.slice(e.start-2,e.start)&&(0==e.start||/\W/.test(e.string.charAt(e.start-1)))?(t.combineTokens=!0,"link"):(e.next(),null)},blankLine:function(e){return e.code=!1,null}},n={taskLists:!0,strikethrough:!0,emoji:!0};for(var r in i)n[r]=i[r];return n.name="markdown",a.overlayMode(a.getMode(e,n),t)},"markdown"),a.defineMIME("text/x-gfm","gfm")},"object"==typeof n&&"object"==typeof t?r(e("../../lib/codemirror"),e("../markdown/markdown"),e("../../addon/mode/overlay")):r(CodeMirror)},{"../../addon/mode/overlay":8,"../../lib/codemirror":11,"../markdown/markdown":13}],13:[function(e,t,n){var r;r=function(B){"use strict";B.defineMode("markdown",function(p,w){var k=B.getMode(p,"text/html"),i="null"==k.name;void 0===w.highlightFormatting&&(w.highlightFormatting=!1),void 0===w.maxBlockquoteDepth&&(w.maxBlockquoteDepth=0),void 0===w.taskLists&&(w.taskLists=!1),void 0===w.strikethrough&&(w.strikethrough=!1),void 0===w.emoji&&(w.emoji=!1),void 0===w.fencedCodeBlockHighlighting&&(w.fencedCodeBlockHighlighting=!0),void 0===w.xml&&(w.xml=!0),void 0===w.tokenTypeOverrides&&(w.tokenTypeOverrides={});var C={header:"header",code:"comment",quote:"quote",list1:"variable-2",list2:"variable-3",list3:"keyword",hr:"hr",image:"image",imageAltText:"image-alt-text",imageMarker:"image-marker",formatting:"formatting",linkInline:"link",linkEmail:"link",linkText:"link",linkHref:"string",em:"em",strong:"strong",strikethrough:"strikethrough",emoji:"builtin"};for(var e in C)C.hasOwnProperty(e)&&w.tokenTypeOverrides[e]&&(C[e]=w.tokenTypeOverrides[e]);var m=/^([*\-_])(?:\s*\1){2,}\s*$/,g=/^(?:[*\-+]|^[0-9]+([.)]))\s+/,S=/^\[(x| )\](?=\s)/i,v=w.allowAtxHeaderWithoutSpace?/^(#+)/:/^(#+)(?: |$)/,y=/^ *(?:\={1,}|-{1,})\s*$/,n=/^[^#!\[\]*_\\<>` "'(~:]+/,x=/^(~~~+|```+)[ \t]*([\w+#-]*)[^\n`]*$/,b=/^\s*\[[^\]]+?\]:.*$/,L=/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/;function T(e,t,n){return t.f=t.inline=n,n(e,t)}function M(e,t,n){return t.f=t.block=n,n(e,t)}function r(e){if(e.linkTitle=!1,e.linkHref=!1,e.linkText=!1,e.em=!1,e.strong=!1,e.strikethrough=!1,e.quote=0,e.indentedCode=!1,e.f==A){var t=i;if(!t){var n=B.innerMode(k,e.htmlState);t="xml"==n.mode.name&&null===n.state.tagStart&&!n.state.context&&n.state.tokenize.isInText}t&&(e.f=D,e.block=a,e.htmlState=null)}return e.trailingSpace=0,e.trailingSpaceNewLine=!1,e.prevLine=e.thisLine,e.thisLine={stream:null},null}function a(e,t){var n,r=e.column()===t.indentation,i=!(n=t.prevLine.stream)||!/\S/.test(n.string),o=t.indentedCode,a=t.prevLine.hr,l=!1!==t.list,s=(t.listStack[t.listStack.length-1]||0)+3;t.indentedCode=!1;var u=t.indentation;if(null===t.indentationDiff&&(t.indentationDiff=t.indentation,l)){for(t.em=!1,t.strong=!1,t.code=!1,t.strikethrough=!1,t.list=null;u"))return t.quote=r?1:t.quote+1,w.highlightFormatting&&(t.formatting="quote"),e.eatSpace(),E(t);if(!h&&!t.setext&&r&&t.indentation<=s&&(f=e.match(g))){var d=f[1]?"ol":"ul";return t.indentation=u+e.current().length,t.list=!0,t.quote=0,t.listStack.push(t.indentation),w.taskLists&&e.match(S,!1)&&(t.taskList=!0),t.f=t.inline,w.highlightFormatting&&(t.formatting=["list","list-"+d]),E(t)}return r&&t.indentation<=s&&(f=e.match(x,!0))?(t.quote=0,t.fencedEndRE=new RegExp(f[1]+"+ *$"),t.localMode=w.fencedCodeBlockHighlighting&&function(e){if(B.findModeByName){var t=B.findModeByName(e);t&&(e=t.mime||t.mimes[0])}var n=B.getMode(p,e);return"null"==n.name?null:n}(f[2]),t.localMode&&(t.localState=B.startState(t.localMode)),t.f=t.block=N,w.highlightFormatting&&(t.formatting="code-block"),t.code=-1,E(t)):t.setext||!(c&&l||t.quote||!1!==t.list||t.code||h||b.test(e.string))&&(f=e.lookAhead(1))&&(f=f.match(y))?(t.setext?(t.header=t.setext,t.setext=0,e.skipToEnd(),w.highlightFormatting&&(t.formatting="header")):(t.header="="==f[0].charAt(0)?1:2,t.setext=t.header),t.thisLine.header=!0,t.f=t.inline,E(t)):h?(e.skipToEnd(),t.hr=!0,t.thisLine.hr=!0,C.hr):"["===e.peek()?T(e,t,I):T(e,t,t.inline)}function A(e,t){var n=k.token(e,t.htmlState);if(!i){var r=B.innerMode(k,t.htmlState);("xml"==r.mode.name&&null===r.state.tagStart&&!r.state.context&&r.state.tokenize.isInText||t.md_inside&&-1"))&&(t.f=D,t.block=a,t.htmlState=null)}return n}function N(e,t){var n,r=t.listStack[t.listStack.length-1]||0,i=t.indentation=e.quote?t.push(C.formatting+"-"+e.formatting[n]+"-"+e.quote):t.push("error"))}if(e.taskOpen)return t.push("meta"),t.length?t.join(" "):null;if(e.taskClosed)return t.push("property"),t.length?t.join(" "):null;if(e.linkHref?t.push(C.linkHref,"url"):(e.strong&&t.push(C.strong),e.em&&t.push(C.em),e.strikethrough&&t.push(C.strikethrough),e.emoji&&t.push(C.emoji),e.linkText&&t.push(C.linkText),e.code&&t.push(C.code),e.image&&t.push(C.image),e.imageAltText&&t.push(C.imageAltText,"link"),e.imageMarker&&t.push(C.imageMarker)),e.header&&t.push(C.header,C.header+"-"+e.header),e.quote&&(t.push(C.quote),!w.maxBlockquoteDepth||w.maxBlockquoteDepth>=e.quote?t.push(C.quote+"-"+e.quote):t.push(C.quote+"-"+w.maxBlockquoteDepth)),!1!==e.list){var r=(e.listStack.length-1)%3;r?1===r?t.push(C.list2):t.push(C.list3):t.push(C.list1)}return e.trailingSpaceNewLine?t.push("trailing-space-new-line"):e.trailingSpace&&t.push("trailing-space-"+(e.trailingSpace%2?"a":"b")),t.length?t.join(" "):null}function t(e,t){if(e.match(n,!0))return E(t)}function D(e,t){var n=t.text(e,t);if(void 0!==n)return n;if(t.list)return t.list=null,E(t);if(t.taskList)return" "===e.match(S,!0)[1]?t.taskOpen=!0:t.taskClosed=!0,w.highlightFormatting&&(t.formatting="task"),t.taskList=!1,E(t);if(t.taskOpen=!1,t.taskClosed=!1,t.header&&e.match(/^#+$/,!0))return w.highlightFormatting&&(t.formatting="header"),E(t);var r=e.next();if(t.linkTitle){t.linkTitle=!1;var i=r;"("===r&&(i=")");var o="^\\s*(?:[^"+(i=(i+"").replace(/([.?*+^\[\]\\(){}|-])/g,"\\$1"))+"\\\\]+|\\\\\\\\|\\\\.)"+i;if(e.match(new RegExp(o),!0))return C.linkHref}if("`"===r){var a=t.formatting;w.highlightFormatting&&(t.formatting="code"),e.eatWhile("`");var l=e.current().length;if(0!=t.code||t.quote&&1!=l){if(l!=t.code)return t.formatting=a,E(t);var s=E(t);return t.code=0,s}return t.code=l,E(t)}if(t.code)return E(t);if("\\"===r&&(e.next(),w.highlightFormatting)){var u=E(t),c=C.formatting+"-escape";return u?u+" "+c:c}if("!"===r&&e.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return t.imageMarker=!0,t.image=!0,w.highlightFormatting&&(t.formatting="image"),E(t);if("["===r&&t.imageMarker&&e.match(/[^\]]*\](\(.*?\)| ?\[.*?\])/,!1))return t.imageMarker=!1,t.imageAltText=!0,w.highlightFormatting&&(t.formatting="image"),E(t);if("]"===r&&t.imageAltText){w.highlightFormatting&&(t.formatting="image");var u=E(t);return t.imageAltText=!1,t.image=!1,t.inline=t.f=O,u}if("["===r&&!t.image)return t.linkText&&e.match(/^.*?\]/)||(t.linkText=!0,w.highlightFormatting&&(t.formatting="link")),E(t);if("]"===r&&t.linkText){w.highlightFormatting&&(t.formatting="link");var u=E(t);return t.linkText=!1,t.inline=t.f=e.match(/\(.*?\)| ?\[.*?\]/,!1)?O:D,u}if("<"===r&&e.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1))return t.f=t.inline=F,w.highlightFormatting&&(t.formatting="link"),(u=E(t))?u+=" ":u="",u+C.linkInline;if("<"===r&&e.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1))return t.f=t.inline=F,w.highlightFormatting&&(t.formatting="link"),(u=E(t))?u+=" ":u="",u+C.linkEmail;if(w.xml&&"<"===r&&e.match(/^(!--|\?|!\[CDATA\[|[a-z][a-z0-9-]*(?:\s+[a-z_:.\-]+(?:\s*=\s*[^>]+)?)*\s*(?:>|$))/i,!1)){var h=e.string.indexOf(">",e.pos);if(-1!=h){var f=e.string.substring(e.start,h);/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(f)&&(t.md_inside=!0)}return e.backUp(1),t.htmlState=B.startState(k),M(e,t,A)}if(w.xml&&"<"===r&&e.match(/^\/\w*?>/))return t.md_inside=!1,"tag";if("*"===r||"_"===r){for(var d=1,p=1==e.pos?" ":e.string.charAt(e.pos-2);d<3&&e.eat(r);)d++;var m=e.peek()||" ",g=!/\s/.test(m)&&(!L.test(m)||/\s/.test(p)||L.test(p)),v=!/\s/.test(p)&&(!L.test(p)||/\s/.test(m)||L.test(m)),y=null,x=null;if(d%2&&(t.em||!g||"*"!==r&&v&&!L.test(p)?t.em!=r||!v||"*"!==r&&g&&!L.test(m)||(y=!1):y=!0),1"!==e.next())return e.match(/^[^>]+/,!0),C.linkInline;t.f=t.inline=D,w.highlightFormatting&&(t.formatting="link");var n=E(t);return n?n+=" ":n="",n+C.linkInline}function O(e,t){if(e.eatSpace())return null;var i,n=e.next();return"("===n||"["===n?(t.f=t.inline=(i="("===n?")":"]",function(e,t){var n=e.next();if(n!==i)return e.match(o[i]),t.linkHref=!0,E(t);t.f=t.inline=D,w.highlightFormatting&&(t.formatting="link-string");var r=E(t);return t.linkHref=!1,r}),w.highlightFormatting&&(t.formatting="link-string"),t.linkHref=!0,E(t)):"error"}var o={")":/^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/,"]":/^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\]]|\\.)*\])*?(?=\])/};function I(e,t){return e.match(/^([^\]\\]|\\.)*\]:/,!1)?(t.f=l,e.next(),w.highlightFormatting&&(t.formatting="link"),t.linkText=!0,E(t)):T(e,t,D)}function l(e,t){if(e.match(/^\]:/,!0)){t.f=t.inline=s,w.highlightFormatting&&(t.formatting="link");var n=E(t);return t.linkText=!1,n}return e.match(/^([^\]\\]|\\.)+/,!0),C.linkText}function s(e,t){return e.eatSpace()?null:(e.match(/^[^\s]+/,!0),void 0===e.peek()?t.linkTitle=!0:e.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/,!0),t.f=t.inline=D,C.linkHref+" url")}var u={startState:function(){return{f:a,prevLine:{stream:null},thisLine:{stream:null},block:a,htmlState:null,indentation:0,inline:D,text:t,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,setext:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,emoji:!1,fencedEndRE:null}},copyState:function(e){return{f:e.f,prevLine:e.prevLine,thisLine:e.thisLine,block:e.block,htmlState:e.htmlState&&B.copyState(k,e.htmlState),indentation:e.indentation,localMode:e.localMode,localState:e.localMode?B.copyState(e.localMode,e.localState):null,inline:e.inline,text:e.text,formatting:!1,linkText:e.linkText,linkTitle:e.linkTitle,linkHref:e.linkHref,code:e.code,em:e.em,strong:e.strong,strikethrough:e.strikethrough,emoji:e.emoji,header:e.header,setext:e.setext,hr:e.hr,taskList:e.taskList,list:e.list,listStack:e.listStack.slice(0),quote:e.quote,indentedCode:e.indentedCode,trailingSpace:e.trailingSpace,trailingSpaceNewLine:e.trailingSpaceNewLine,md_inside:e.md_inside,fencedEndRE:e.fencedEndRE}},token:function(e,t){if(t.formatting=!1,e!=t.thisLine.stream){if(t.header=0,t.hr=!1,e.match(/^\s*$/,!0))return r(t),null;if(t.prevLine=t.thisLine,t.thisLine={stream:e},t.taskList=!1,t.trailingSpace=0,t.trailingSpaceNewLine=!1,!t.localState&&(t.f=t.block,t.f!=A)){var n=e.match(/^\s*/,!0)[0].replace(/\t/g," ").length;if(t.indentation=n,t.indentationDiff=null,0")):null:t.match("--")?e(i("comment","--\x3e")):t.match("DOCTYPE",!0,!0)?(t.eatWhile(/[\w\._\-]/),e(function r(i){return function(e,t){for(var n;null!=(n=e.next());){if("<"==n)return t.tokenize=r(i+1),t.tokenize(e,t);if(">"==n){if(1!=i)return t.tokenize=r(i-1),t.tokenize(e,t);t.tokenize=u;break}}return"meta"}}(1))):null:t.eat("?")?(t.eatWhile(/[\w\._\-]/),n.tokenize=i("meta","?>"),"meta"):(a=t.eat("/")?"closeTag":"openTag",n.tokenize=c,"tag bracket"):"&"!=r?(t.eatWhile(/[^&<]/),null):(t.eat("#")?t.eat("x")?t.eatWhile(/[a-fA-F\d]/)&&t.eat(";"):t.eatWhile(/[\d]/)&&t.eat(";"):t.eatWhile(/[\w\.\-:]/)&&t.eat(";"))?"atom":"error"}function c(e,t){var n=e.next();if(">"==n||"/"==n&&e.eat(">"))return t.tokenize=u,a=">"==n?"endTag":"selfcloseTag","tag bracket";if("="==n)return a="equals",null;if("<"!=n)return/[\'\"]/.test(n)?(t.tokenize=(r=n,(i=function(e,t){for(;!e.eol();)if(e.next()==r){t.tokenize=c;break}return"string"}).isInAttribute=!0,i),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word");t.tokenize=u,t.state=p,t.tagName=t.tagStart=null;var r,i,o=t.tokenize(e,t);return o?o+" tag error":"tag error"}function i(n,r){return function(e,t){for(;!e.eol();){if(e.match(r)){t.tokenize=u;break}e.next()}return n}}function h(e,t,n){this.prev=e.context,this.tagName=t,this.indent=e.indented,this.startOfLine=n,(s.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}function f(e){e.context&&(e.context=e.context.prev)}function d(e,t){for(var n;;){if(!e.context)return;if(n=e.context.tagName,!s.contextGrabbers.hasOwnProperty(n)||!s.contextGrabbers[n].hasOwnProperty(t))return;f(e)}}function p(e,t,n){return"openTag"==e?(n.tagStart=t.column(),m):"closeTag"==e?g:p}function m(e,t,n){return"word"==e?(n.tagName=t.current(),o="tag",x):s.allowMissingTagName&&"endTag"==e?(o="tag bracket",x(e,t,n)):(o="error",m)}function g(e,t,n){if("word"!=e)return s.allowMissingTagName&&"endTag"==e?(o="tag bracket",v(e,t,n)):(o="error",y);var r=t.current();return n.context&&n.context.tagName!=r&&s.implicitlyClosed.hasOwnProperty(n.context.tagName)&&f(n),n.context&&n.context.tagName==r||!1===s.matchClosing?(o="tag",v):(o="tag error",y)}function v(e,t,n){return"endTag"!=e?(o="error",v):(f(n),p)}function y(e,t,n){return o="error",v(e,0,n)}function x(e,t,n){if("word"==e)return o="attribute",b;if("endTag"!=e&&"selfcloseTag"!=e)return o="error",x;var r=n.tagName,i=n.tagStart;return n.tagName=n.tagStart=null,"selfcloseTag"==e||s.autoSelfClosers.hasOwnProperty(r)?d(n,r):(d(n,r),n.context=new h(n,r,i==n.indented)),p}function b(e,t,n){return"equals"==e?w:(s.allowMissing||(o="error"),x(e,0,n))}function w(e,t,n){return"string"==e?k:"word"==e&&s.allowUnquoted?(o="string",x):(o="error",x(e,0,n))}function k(e,t,n){return"string"==e?k:x(e,0,n)}return u.isInText=!0,{startState:function(e){var t={tokenize:u,state:p,indented:e||0,tagName:null,tagStart:null,context:null};return null!=e&&(t.baseIndent=e),t},token:function(e,t){if(!t.tagName&&e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;a=null;var n=t.tokenize(e,t);return(n||a)&&"comment"!=n&&(o=null,t.state=t.state(a||n,e,t),o&&(n="error"==o?n+" error":o)),n},indent:function(e,t,n){var r=e.context;if(e.tokenize.isInAttribute)return e.tagStart==e.indented?e.stringStartCol+1:e.indented+l;if(r&&r.noIndent)return C.Pass;if(e.tokenize!=c&&e.tokenize!=u)return n?n.match(/^(\s*)/)[0].length:0;if(e.tagName)return!1!==s.multilineTagIndentPastTag?e.tagStart+e.tagName.length+2:e.tagStart+l*(s.multilineTagIndentFactor||1);if(s.alignCDATA&&/$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:s.htmlMode?"html":"xml",helperType:s.htmlMode?"html":"xml",skipAttribute:function(e){e.state==w&&(e.state=x)}}}),C.defineMIME("text/xml","xml"),C.defineMIME("application/xml","xml"),C.mimeModes.hasOwnProperty("text/html")||C.defineMIME("text/html",{name:"xml",htmlMode:!0})})("object"==typeof n&&"object"==typeof t?e("../../lib/codemirror"):CodeMirror)},{"../../lib/codemirror":11}],16:[function(e,t,n){n.read=function(e,t,n,r,i){var o,a,l=8*i-r-1,s=(1<>1,c=-7,h=n?i-1:0,f=n?-1:1,d=e[t+h];for(h+=f,o=d&(1<<-c)-1,d>>=-c,c+=l;0>=-c,c+=r;0>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,p=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(l=isNaN(t)?1:0,a=c):(a=Math.floor(Math.log(t)/Math.LN2),t*(s=Math.pow(2,-a))<1&&(a--,s*=2),2<=(t+=1<=a+h?f/s:f*Math.pow(2,1-h))*s&&(a++,s/=2),c<=a+h?(l=0,a=c):1<=a+h?(l=(t*s-1)*Math.pow(2,i),a+=h):(l=t*Math.pow(2,h-1)*Math.pow(2,i),a=0));8<=i;e[n+d]=255&l,d+=p,l/=256,i-=8);for(a=a< ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|\\n*|\\n*|)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:d,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,text:/^[^\n]+/};function s(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||m.defaults,this.rules=y.normal,this.options.pedantic?this.rules=y.pedantic:this.options.gfm&&(this.options.tables?this.rules=y.tables:this.rules=y.gfm)}y._label=/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,y._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,y.def=t(y.def).replace("label",y._label).replace("title",y._title).getRegex(),y.bullet=/(?:[*+-]|\d+\.)/,y.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,y.item=t(y.item,"gm").replace(/bull/g,y.bullet).getRegex(),y.list=t(y.list).replace(/bull/g,y.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+y.def.source+")").getRegex(),y._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",y._comment=//,y.html=t(y.html,"i").replace("comment",y._comment).replace("tag",y._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),y.paragraph=t(y.paragraph).replace("hr",y.hr).replace("heading",y.heading).replace("lheading",y.lheading).replace("tag",y._tag).getRegex(),y.blockquote=t(y.blockquote).replace("paragraph",y.paragraph).getRegex(),y.normal=p({},y),y.gfm=p({},y.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),y.gfm.paragraph=t(y.paragraph).replace("(?!","(?!"+y.gfm.fences.source.replace("\\1","\\2")+"|"+y.list.source.replace("\\1","\\3")+"|").getRegex(),y.tables=p({},y.gfm,{nptable:/^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),y.pedantic=p({},y.normal,{html:t("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",y._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/}),s.rules=y,s.lex=function(e,t){return new s(t).lex(e)},s.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},s.prototype.token=function(e,t){var n,r,i,o,a,l,s,u,c,h,f,d,p,m,g,v;for(e=e.replace(/^ +$/gm,"");e;)if((i=this.rules.newline.exec(e))&&(e=e.substring(i[0].length),1 ?/gm,""),this.token(i,t),this.tokens.push({type:"blockquote_end"});else if(i=this.rules.list.exec(e)){for(e=e.substring(i[0].length),s={type:"list_start",ordered:m=1<(o=i[2]).length,start:m?+o:"",loose:!1},this.tokens.push(s),n=!(u=[]),p=(i=i[0].match(this.rules.item)).length,f=0;f?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:d,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s])__(?!_)|^\*\*([^\s])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,em:/^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_)|^_([^\s_][\s\S]*?[^\s])_(?!_)|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:d,text:/^(`+|[^`])[\s\S]*?(?=[\\?@\[\]\\^_`{|}~])/g,n._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,n._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,n.autolink=t(n.autolink).replace("scheme",n._scheme).replace("email",n._email).getRegex(),n._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,n.tag=t(n.tag).replace("comment",y._comment).replace("attribute",n._attribute).getRegex(),n._label=/(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/,n._href=/\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f\\]*\)|[^\s\x00-\x1f()\\])*?)/,n._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,n.link=t(n.link).replace("label",n._label).replace("href",n._href).replace("title",n._title).getRegex(),n.reflink=t(n.reflink).replace("label",n._label).getRegex(),n.normal=p({},n),n.pedantic=p({},n.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:t(/^!?\[(label)\]\((.*?)\)/).replace("label",n._label).getRegex(),reflink:t(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",n._label).getRegex()}),n.gfm=p({},n.normal,{escape:t(n.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:t(n.text).replace("]|","~]|").replace("|$","|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|$").getRegex()}),n.gfm.url=t(n.gfm.url).replace("email",n.gfm._extended_email).getRegex(),n.breaks=p({},n.gfm,{br:t(n.br).replace("{2,}","*").getRegex(),text:t(n.gfm.text).replace("{2,}","*").getRegex()}),u.rules=n,u.output=function(e,t,n){return new u(t,n).output(e)},u.prototype.output=function(e){for(var t,n,r,i,o,a,l="";e;)if(o=this.rules.escape.exec(e))e=e.substring(o[0].length),l+=o[1];else if(o=this.rules.autolink.exec(e))e=e.substring(o[0].length),r="@"===o[2]?"mailto:"+(n=h(this.mangle(o[1]))):n=h(o[1]),l+=this.renderer.link(r,null,n);else if(this.inLink||!(o=this.rules.url.exec(e))){if(o=this.rules.tag.exec(e))!this.inLink&&/^/i.test(o[0])&&(this.inLink=!1),!this.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(o[0])?this.inRawBlock=!0:this.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(o[0])&&(this.inRawBlock=!1),e=e.substring(o[0].length),l+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(o[0]):h(o[0]):o[0];else if(o=this.rules.link.exec(e))e=e.substring(o[0].length),this.inLink=!0,r=o[2],i=this.options.pedantic?(t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(r))?(r=t[1],t[3]):"":o[3]?o[3].slice(1,-1):"",r=r.trim().replace(/^<([\s\S]*)>$/,"$1"),l+=this.outputLink(o,{href:u.escapes(r),title:u.escapes(i)}),this.inLink=!1;else if((o=this.rules.reflink.exec(e))||(o=this.rules.nolink.exec(e))){if(e=e.substring(o[0].length),t=(o[2]||o[1]).replace(/\s+/g," "),!(t=this.links[t.toLowerCase()])||!t.href){l+=o[0].charAt(0),e=o[0].substring(1)+e;continue}this.inLink=!0,l+=this.outputLink(o,t),this.inLink=!1}else if(o=this.rules.strong.exec(e))e=e.substring(o[0].length),l+=this.renderer.strong(this.output(o[4]||o[3]||o[2]||o[1]));else if(o=this.rules.em.exec(e))e=e.substring(o[0].length),l+=this.renderer.em(this.output(o[6]||o[5]||o[4]||o[3]||o[2]||o[1]));else if(o=this.rules.code.exec(e))e=e.substring(o[0].length),l+=this.renderer.codespan(h(o[2].trim(),!0));else if(o=this.rules.br.exec(e))e=e.substring(o[0].length),l+=this.renderer.br();else if(o=this.rules.del.exec(e))e=e.substring(o[0].length),l+=this.renderer.del(this.output(o[1]));else if(o=this.rules.text.exec(e))e=e.substring(o[0].length),this.inRawBlock?l+=this.renderer.text(o[0]):l+=this.renderer.text(h(this.smartypants(o[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else{if("@"===o[2])r="mailto:"+(n=h(o[0]));else{for(;a=o[0],o[0]=this.rules._backpedal.exec(o[0])[0],a!==o[0];);n=h(o[0]),r="www."===o[1]?"http://"+n:n}e=e.substring(o[0].length),l+=this.renderer.link(r,null,n)}return l},u.escapes=function(e){return e?e.replace(u.rules._escapes,"$1"):e},u.prototype.outputLink=function(e,t){var n=t.href,r=t.title?h(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,h(e[1]))},u.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},u.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,i=0;i'+(n?e:h(e,!0))+"
\n":"
"+(n?e:h(e,!0))+"
"},r.prototype.blockquote=function(e){return"
\n"+e+"
\n"},r.prototype.html=function(e){return e},r.prototype.heading=function(e,t,n){return this.options.headerIds?"'+e+"\n":""+e+"\n"},r.prototype.hr=function(){return this.options.xhtml?"
\n":"
\n"},r.prototype.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"},r.prototype.listitem=function(e){return"
  • "+e+"
  • \n"},r.prototype.checkbox=function(e){return" "},r.prototype.paragraph=function(e){return"

    "+e+"

    \n"},r.prototype.table=function(e,t){return t&&(t=""+t+""),"\n\n"+e+"\n"+t+"
    \n"},r.prototype.tablerow=function(e){return"\n"+e+"\n"},r.prototype.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"\n"},r.prototype.strong=function(e){return""+e+""},r.prototype.em=function(e){return""+e+""},r.prototype.codespan=function(e){return""+e+""},r.prototype.br=function(){return this.options.xhtml?"
    ":"
    "},r.prototype.del=function(e){return""+e+""},r.prototype.link=function(e,t,n){if(this.options.sanitize){try{var r=decodeURIComponent(f(e)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return n}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:")||0===r.indexOf("data:"))return n}this.options.baseUrl&&!l.test(e)&&(e=o(this.options.baseUrl,e));try{e=encodeURI(e).replace(/%25/g,"%")}catch(e){return n}var i='
    "},r.prototype.image=function(e,t,n){this.options.baseUrl&&!l.test(e)&&(e=o(this.options.baseUrl,e));var r=''+n+'":">"},r.prototype.text=function(e){return e},i.prototype.strong=i.prototype.em=i.prototype.codespan=i.prototype.del=i.prototype.text=function(e){return e},i.prototype.link=i.prototype.image=function(e,t,n){return""+n},i.prototype.br=function(){return""},c.parse=function(e,t){return new c(t).parse(e)},c.prototype.parse=function(e){this.inline=new u(e.links,this.options),this.inlineText=new u(e.links,p({},this.options,{renderer:new i})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},c.prototype.next=function(){return this.token=this.tokens.pop()},c.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},c.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},c.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,f(this.inlineText.output(this.token.text)));case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,i="",o="";for(n="",e=0;e"']/,h.escapeReplace=/[&<>"']/g,h.replacements={"&":"&","<":"<",">":">",'"':""","'":"'"},h.escapeTestNoEncode=/[<>"']|&(?!#?\w+;)/,h.escapeReplaceNoEncode=/[<>"']|&(?!#?\w+;)/g;var a={},l=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function d(){}function p(e){for(var t,n,r=1;rt)n.splice(t);else for(;n.lengthAn error occurred:

    "+h(e.message+"",!0)+"
    ";throw e}}d.exec=d,m.options=m.setOptions=function(e){return p(m.defaults,e),m},m.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new r,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tables:!0,xhtml:!1}},m.defaults=m.getDefaults(),m.Parser=c,m.parser=c.parse,m.Renderer=r,m.TextRenderer=i,m.Lexer=s,m.lexer=s.lex,m.InlineLexer=u,m.inlineLexer=u.output,m.parse=m,void 0!==g&&"object"==typeof v?g.exports=m:e.marked=m}(this||("undefined"!=typeof window?window:e))}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],18:[function(c,t,e){(function(u,p){var e;!function(){"use strict";(e=function(e,i,o,a){a=a||{},this.dictionary=null,this.rules={},this.dictionaryTable={},this.compoundRules=[],this.compoundRuleCodes={},this.replacementTable=[],this.flags=a.flags||{},this.memoized={},this.loaded=!1;var t,l,s,u,c,h=this;function n(e,t){var n=h._readFile(e,null,a.asyncLoad);a.asyncLoad?n.then(function(e){t(e)}):t(n)}function r(e){i=e,o&&d()}function f(e){o=e,i&&d()}function d(){for(h.rules=h._parseAFF(i),h.compoundRuleCodes={},l=0,u=h.compoundRules.length;l=this.flags.COMPOUNDMIN)for(t=0,n=this.compoundRules.length;t)+?/g),h={toggleBold:r,toggleItalic:y,drawLink:E,toggleHeadingSmaller:k,toggleHeadingBigger:C,drawImage:D,toggleBlockquote:w,toggleOrderedList:A,toggleUnorderedList:M,toggleCodeBlock:b,togglePreview:H,toggleStrikethrough:x,toggleHeading1:S,toggleHeading2:L,toggleHeading3:T,cleanBlock:N,drawTable:F,drawHorizontalRule:O,undo:I,redo:B,toggleSideBySide:R,toggleFullScreen:v},l={toggleBold:"Cmd-B",toggleItalic:"Cmd-I",drawLink:"Cmd-K",toggleHeadingSmaller:"Cmd-H",toggleHeadingBigger:"Shift-Cmd-H",cleanBlock:"Cmd-E",drawImage:"Cmd-Alt-I",toggleBlockquote:"Cmd-'",toggleOrderedList:"Cmd-Alt-L",toggleUnorderedList:"Cmd-L",toggleCodeBlock:"Cmd-Alt-C",togglePreview:"Cmd-P",toggleSideBySide:"F9",toggleFullScreen:"F11"},s=function(e){for(var t in h)if(h[t]===e)return t;return null},f=function(){var e,t=!1;return e=navigator.userAgent||navigator.vendor||window.opera,(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e.substr(0,4)))&&(t=!0),t};function d(e){return e=o?e.replace("Ctrl","Cmd"):e.replace("Cmd","Ctrl")}function p(e,t,n){e=e||{};var r=document.createElement("button");r.className=e.name,r.setAttribute("type","button"),t=null==t||t,e.title&&t&&(r.title=function(e,t,n){var r,i=e;t&&(r=s(t),n[r]&&(i+=" ("+d(n[r])+")"));return i}(e.title,e.action,n),o&&(r.title=r.title.replace("Ctrl","⌘"),r.title=r.title.replace("Alt","⌥"))),e.noDisable&&r.classList.add("no-disable"),e.noMobile&&r.classList.add("no-mobile"),r.tabIndex=-1;var i=document.createElement("i");return i.className=e.className,r.appendChild(i),r}function m(e,t){t=t||e.getCursor("start");var n=e.getTokenAt(t);if(!n.type)return{};for(var r,i,o=n.type.split(" "),a={},l=0;l ]+|[0-9]+(.|\)))[ ]*/,""),e.replaceRange(t,{line:i,ch:0},{line:i,ch:99999999999999})}(e.codemirror)}function E(e){var t=e.codemirror,n=m(t),r=e.options,i="https://";if(r.promptURLs&&!(i=prompt(r.promptTexts.link)))return!1;z(t,n.link,r.insertTexts.link,i)}function D(e){var t=e.codemirror,n=m(t),r=e.options,i="https://";if(r.promptURLs&&!(i=prompt(r.promptTexts.image)))return!1;z(t,n.image,r.insertTexts.image,i)}function F(e){var t=e.codemirror,n=m(t),r=e.options;z(t,n.table,r.insertTexts.table)}function O(e){var t=e.codemirror,n=m(t),r=e.options;z(t,n.image,r.insertTexts.horizontalRule)}function I(e){var t=e.codemirror;t.undo(),t.focus()}function B(e){var t=e.codemirror;t.redo(),t.focus()}function R(e){var t=e.codemirror,n=t.getWrapperElement(),r=n.nextSibling,i=e.toolbarElements&&e.toolbarElements["side-by-side"],o=!1;/editor-preview-active-side/.test(r.className)?(r.className=r.className.replace(/\s*editor-preview-active-side\s*/g,""),i&&(i.className=i.className.replace(/\s*active\s*/g,"")),n.className=n.className.replace(/\s*CodeMirror-sided\s*/g," ")):(setTimeout(function(){t.getOption("fullScreen")||v(e),r.className+=" editor-preview-active-side"},1),i&&(i.className+=" active"),n.className+=" CodeMirror-sided",o=!0);var a=n.lastChild;if(/editor-preview-active/.test(a.className)){a.className=a.className.replace(/\s*editor-preview-active\s*/g,"");var l=e.toolbarElements.preview,s=n.previousSibling;l.className=l.className.replace(/\s*active\s*/g,""),s.className=s.className.replace(/\s*disabled-for-preview*/g,"")}t.sideBySideRenderingFunction||(t.sideBySideRenderingFunction=function(){r.innerHTML=e.options.previewRender(e.value(),r)}),o?(r.innerHTML=e.options.previewRender(e.value(),r),t.on("update",t.sideBySideRenderingFunction)):t.off("update",t.sideBySideRenderingFunction),t.refresh()}function H(e){var t=e.codemirror,n=t.getWrapperElement(),r=n.previousSibling,i=!!e.options.toolbar&&e.toolbarElements.preview,o=n.lastChild;o&&/editor-preview/.test(o.className)||((o=document.createElement("div")).className="editor-preview",n.appendChild(o)),/editor-preview-active/.test(o.className)?(o.className=o.className.replace(/\s*editor-preview-active\s*/g,""),i&&(i.className=i.className.replace(/\s*active\s*/g,""),r.className=r.className.replace(/\s*disabled-for-preview*/g,""))):(setTimeout(function(){o.className+=" editor-preview-active"},1),i&&(i.className+=" active",r.className+=" disabled-for-preview")),o.innerHTML=e.options.previewRender(e.value(),o);var a=t.getWrapperElement().nextSibling;/editor-preview-active-side/.test(a.className)&&R(e)}function z(e,t,n,r){if(!/editor-preview-active/.test(e.getWrapperElement().lastChild.className)){var i,o=n[0],a=n[1],l={},s={};Object.assign(l,e.getCursor("start")),Object.assign(s,e.getCursor("end")),r&&(a=a.replace("#url#",r)),t?(o=(i=e.getLine(l.line)).slice(0,l.ch),a=i.slice(l.ch),e.replaceRange(o+a,{line:l.line,ch:0})):(i=e.getSelection(),e.replaceSelection(o+i+a),l.ch+=o.length,l!==s&&(s.ch+=o.length)),e.setSelection(l,s),e.focus()}}function P(e,t,n){if(!/editor-preview-active/.test(e.getWrapperElement().lastChild.className)){for(var r,i,o,a=e.getCursor("start"),l=e.getCursor("end"),s=a.line;s<=l.line;s++)r=s,i=void 0,i=e.getLine(r),o=i.search(/[^#]/),i=void 0!==t?o<=0?"bigger"==t?"###### "+i:"# "+i:6==o&&"smaller"==t?i.substr(7):1==o&&"bigger"==t?i.substr(2):"bigger"==t?i.substr(1):"#"+i:1==n?o<=0?"# "+i:o==n?i.substr(o+1):"# "+i.substr(o+1):2==n?o<=0?"## "+i:o==n?i.substr(o+1):"## "+i.substr(o+1):o<=0?"### "+i:o==n?i.substr(o+1):"### "+i.substr(o+1),e.replaceRange(i,{line:r,ch:0},{line:r,ch:99999999999999});e.focus()}}function W(s,u){if(!/editor-preview-active/.test(s.getWrapperElement().lastChild.className)){for(var c=/^(\s*)(\*|-|\+|\d*\.)(\s+)/,h=/^\s*/,f=m(s),e=s.getCursor("start"),t=s.getCursor("end"),d={quote:/^(\s*)>\s+/,"unordered-list":c,"ordered-list":c},p=1,n=e.line;n<=t.line;n++)!function(e){var t,n,r,i,o=s.getLine(e);if(f[u])o=o.replace(d[u],"$1");else{var a=c.exec(o),l=(i=p,{quote:">","unordered-list":"*","ordered-list":"%%i."}[u].replace("%%i",i));o=null!==a?(t=u,n=a[2],r=new RegExp({quote:">","unordered-list":"*","ordered-list":"d+."}[t]),n&&r.test(n)&&(l=""),a[1]+l+a[3]+o.replace(h,"").replace(d[u],"$1")):l+" "+o,p+=1}s.replaceRange(o,{line:e,ch:0},{line:e,ch:99999999999999})}(n);s.focus()}}function _(e,t,n,r){if(!/editor-preview-active/.test(e.codemirror.getWrapperElement().lastChild.className)){r=void 0===r?n:r;var i,o=e.codemirror,a=m(o),l=n,s=r,u=o.getCursor("start"),c=o.getCursor("end");a[t]?(l=(i=o.getLine(u.line)).slice(0,u.ch),s=i.slice(u.ch),"bold"==t?(l=l.replace(/(\*\*|__)(?![\s\S]*(\*\*|__))/,""),s=s.replace(/(\*\*|__)/,"")):"italic"==t?(l=l.replace(/(\*|_)(?![\s\S]*(\*|_))/,""),s=s.replace(/(\*|_)/,"")):"strikethrough"==t&&(l=l.replace(/(\*\*|~~)(?![\s\S]*(\*\*|~~))/,""),s=s.replace(/(\*\*|~~)/,"")),o.replaceRange(l+s,{line:u.line,ch:0},{line:u.line,ch:99999999999999}),"bold"==t||"strikethrough"==t?(u.ch-=2,u!==c&&(c.ch-=2)):"italic"==t&&(u.ch-=1,u!==c&&(c.ch-=1))):(i=o.getSelection(),"bold"==t?i=(i=i.split("**").join("")).split("__").join(""):"italic"==t?i=(i=i.split("*").join("")).split("_").join(""):"strikethrough"==t&&(i=i.split("~~").join("")),o.replaceSelection(l+i+s),u.ch+=n.length,c.ch=u.ch+i.length),o.setSelection(u,c),o.focus()}}function j(e,t){for(var n in t)t.hasOwnProperty(n)&&(t[n]instanceof Array?e[n]=t[n].concat(e[n]instanceof Array?e[n]:[]):null!==t[n]&&"object"==typeof t[n]&&t[n].constructor===Object?e[n]=j(e[n]||{},t[n]):e[n]=t[n]);return e}function U(e){for(var t=1;t$/,' target="_blank">');e=e.replace(n,r)}}return e}(r)}},K.prototype.render=function(e){if(e||(e=this.element||document.getElementsByTagName("textarea")[0]),!this._rendered||this._rendered!==e){this.element=e;var t,n,r=this.options,i=this,o={};for(var a in r.shortcuts)null!==r.shortcuts[a]&&null!==h[a]&&function(e){o[d(r.shortcuts[e])]=function(){h[e](i)}}(a);if(o.Enter="newlineAndIndentContinueMarkdownList",o.Tab="tabAndIndentMarkdownList",o["Shift-Tab"]="shiftTabAndUnindentMarkdownList",o.Esc=function(e){e.getOption("fullScreen")&&v(i)},document.addEventListener("keydown",function(e){27==(e=e||window.event).keyCode&&i.codemirror.getOption("fullScreen")&&v(i)},!1),!1!==r.spellChecker?(t="spell-checker",(n=r.parsingConfig).name="gfm",n.gitHubSpice=!1,c({codeMirrorInstance:u})):((t=r.parsingConfig).name="gfm",t.gitHubSpice=!1),this.codemirror=u.fromTextArea(e,{mode:t,backdrop:n,theme:null!=r.theme?r.theme:"easymde",tabSize:null!=r.tabSize?r.tabSize:2,indentUnit:null!=r.tabSize?r.tabSize:2,indentWithTabs:!1!==r.indentWithTabs,lineNumbers:!1,autofocus:!0===r.autofocus,extraKeys:o,lineWrapping:!1!==r.lineWrapping,allowDropFileTypes:["text/plain"],placeholder:r.placeholder||e.getAttribute("placeholder")||"",styleSelectedText:null!=r.styleSelectedText?r.styleSelectedText:!f(),configureMouse:function(e,t,n){return{addNew:!1}}}),this.codemirror.getScrollerElement().style.minHeight=r.minHeight,!0===r.forceSync){var l=this.codemirror;l.on("change",function(){l.save()})}!(this.gui={})!==r.toolbar&&(this.gui.toolbar=this.createToolbar()),!1!==r.status&&(this.gui.statusbar=this.createStatusbar()),null!=r.autosave&&!0===r.autosave.enabled&&this.autosave(),this.gui.sideBySide=this.createSideBySide(),this._rendered=this.element;var s=this.codemirror;setTimeout(function(){s.refresh()}.bind(s),0)}},K.prototype.autosave=function(){if(Y()){var e=this;if(null==this.options.autosave.uniqueId||""==this.options.autosave.uniqueId)return void console.log("EasyMDE: You must set a uniqueId to use the autosave feature");!0!==this.options.autosave.binded&&(null!=e.element.form&&null!=e.element.form&&e.element.form.addEventListener("submit",function(){clearTimeout(e.autosaveTimeoutId),e.autosaveTimeoutId=void 0,localStorage.removeItem("smde_"+e.options.autosave.uniqueId),setTimeout(function(){e.autosave()},e.options.autosave.delay||1e4)}),this.options.autosave.binded=!0),!0!==this.options.autosave.loaded&&("string"==typeof localStorage.getItem("smde_"+this.options.autosave.uniqueId)&&""!=localStorage.getItem("smde_"+this.options.autosave.uniqueId)&&(this.codemirror.setValue(localStorage.getItem("smde_"+this.options.autosave.uniqueId)),this.options.autosave.foundSavedValue=!0),this.options.autosave.loaded=!0),localStorage.setItem("smde_"+this.options.autosave.uniqueId,e.value());var t=document.getElementById("autosaved");if(null!=t&&null!=t&&""!=t){var n=new Date,r=n.getHours(),i=n.getMinutes(),o="am",a=r;12<=a&&(a=r-12,o="pm"),0==a&&(a=12),i=i<10?"0"+i:i,t.innerHTML="Autosaved: "+a+":"+i+" "+o}this.autosaveTimeoutId=setTimeout(function(){e.autosave()},this.options.autosave.delay||1e4)}else console.log("EasyMDE: localStorage not available, cannot autosave")},K.prototype.clearAutosavedValue=function(){if(Y()){if(null==this.options.autosave||null==this.options.autosave.uniqueId||""==this.options.autosave.uniqueId)return void console.log("EasyMDE: You must set a uniqueId to clear the autosave value");localStorage.removeItem("smde_"+this.options.autosave.uniqueId)}else console.log("EasyMDE: localStorage not available, cannot autosave")},K.prototype.createSideBySide=function(){var r=this.codemirror,e=r.getWrapperElement(),i=e.nextSibling;if(i&&/editor-preview-side/.test(i.className)||((i=document.createElement("div")).className="editor-preview-side",e.parentNode.insertBefore(i,e.nextSibling)),!1===this.options.syncSideBySidePreviewScroll)return i;var o=!1,a=!1;return r.on("scroll",function(e){if(o)o=!1;else{a=!0;var t=e.getScrollInfo().height-e.getScrollInfo().clientHeight,n=parseFloat(e.getScrollInfo().top)/t,r=(i.scrollHeight-i.clientHeight)*n;i.scrollTop=r}}),i.onscroll=function(){if(a)a=!1;else{o=!0;var e=i.scrollHeight-i.clientHeight,t=parseFloat(i.scrollTop)/e,n=(r.getScrollInfo().height-r.getScrollInfo().clientHeight)*t;r.scrollTo(0,n)}},i},K.prototype.createToolbar=function(e){if((e=e||this.options.toolbar)&&0!==e.length){var t;for(t=0;t.file-object.type-flash,.file-zoom-content>.file-object.type-image,.file-zoom-content>.file-object.type-video{max-width:100%;max-height:100%;width:auto}.file-zoom-content>.file-object.type-flash,.file-zoom-content>.file-object.type-video{height:100%}.file-zoom-content>.file-object.type-default,.file-zoom-content>.file-object.type-html,.file-zoom-content>.file-object.type-pdf,.file-zoom-content>.file-object.type-text{width:100%}.file-loading:before{content:" Loading...";display:inline-block;padding-left:20px;line-height:16px;font-size:13px;font-variant:small-caps;color:#999;background:url(loading.gif) top left no-repeat}.file-object{margin:0 0 -5px;padding:0}.btn-file{overflow:hidden}.btn-file input[type=file]{top:0;left:0;min-width:100%;min-height:100%;text-align:right;opacity:0;background:none;cursor:inherit;display:block}.btn-file ::-ms-browse{font-size:10000px;width:100%;height:100%}.file-caption .file-caption-name{width:100%;margin:0;padding:0;box-shadow:none;border:none;background:0 0;outline:0}.file-caption.icon-visible .file-caption-icon{display:inline-block}.file-caption.icon-visible .file-caption-name{padding-left:15px}.file-caption-icon{left:8px}.file-error-message{color:#a94442;background-color:#f2dede;margin:5px;border:1px solid #ebccd1;border-radius:4px;padding:15px}.file-error-message pre{margin:5px 0}.file-caption-disabled{background-color:#eee;cursor:not-allowed;opacity:1}.file-preview{border-radius:5px;border:1px solid #ddd;padding:8px;width:100%;margin-bottom:5px}.file-preview .btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.file-preview .fileinput-remove{top:1px;right:1px;line-height:10px}.file-preview .clickable{cursor:pointer}.file-preview-image{font:40px Impact,Charcoal,sans-serif;color:green}.krajee-default.file-preview-frame{margin:8px;border:1px solid rgba(0,0,0,.2);box-shadow:0 0 10px 0 rgba(0,0,0,.2);padding:6px;float:left;text-align:center}.krajee-default.file-preview-frame .kv-file-content{width:213px;height:160px}.krajee-default.file-preview-frame .kv-file-content.kv-pdf-rendered{width:400px}.krajee-default.file-preview-frame .file-thumbnail-footer{height:70px}.krajee-default.file-preview-frame:not(.file-preview-error):hover{border:1px solid rgba(0,0,0,.3);box-shadow:0 0 10px 0 rgba(0,0,0,.4)}.krajee-default .file-preview-text{display:block;color:#428bca;border:1px solid #ddd;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;outline:0;padding:8px;resize:none}.krajee-default .file-preview-html{border:1px solid #ddd;padding:8px;overflow:auto}.krajee-default .file-other-icon{font-size:6em}.krajee-default .file-footer-buttons{float:right}.krajee-default .file-footer-caption{display:block;text-align:center;padding-top:4px;font-size:11px;color:#777;margin-bottom:15px}.krajee-default .file-preview-error{opacity:.65;box-shadow:none}.krajee-default .file-thumb-progress{height:11px;top:37px;left:0;right:0}.krajee-default.kvsortable-ghost{background:#e1edf7;border:2px solid #a1abff}.krajee-default .file-preview-other:hover{opacity:.8}.krajee-default .file-preview-frame:not(.file-preview-error) .file-footer-caption:hover{color:#000}.kv-upload-progress .progress{height:20px;margin:10px 0;overflow:hidden}.kv-upload-progress .progress-bar{height:20px;font-family:Verdana,Helvetica,sans-serif}.file-zoom-dialog .file-other-icon{font-size:22em;font-size:50vmin}.file-zoom-dialog .modal-dialog{width:auto}.file-zoom-dialog .modal-header{display:flex;align-items:center;justify-content:space-between}.file-zoom-dialog .btn-navigate{padding:0;margin:0;background:0 0;text-decoration:none;outline:0;opacity:.7;top:45%;font-size:4em;color:#1c94c4}.file-zoom-dialog .btn-navigate:not([disabled]):hover{outline:0;box-shadow:none;opacity:.6}.file-zoom-dialog .floating-buttons{top:5px;right:10px}.file-zoom-dialog .btn-navigate[disabled]{opacity:.3}.file-zoom-dialog .btn-prev{left:1px}.file-zoom-dialog .btn-next{right:1px}.file-zoom-dialog .kv-zoom-title{font-weight:300;color:#999;max-width:50%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.file-input-ajax-new .no-browse .form-control,.file-input-new .no-browse .form-control{border-top-right-radius:4px;border-bottom-right-radius:4px}.file-caption-main{width:100%}.file-thumb-loading{background:url(loading.gif) center center no-repeat content-box!important}.file-drop-zone{border:1px dashed #aaa;border-radius:4px;height:100%;text-align:center;vertical-align:middle;margin:12px 15px 12px 12px;padding:5px}.file-drop-zone.clickable:hover{border:2px dashed #999}.file-drop-zone.clickable:focus{border:2px solid #5acde2}.file-drop-zone .file-preview-thumbnails{cursor:default}.file-drop-zone-title{color:#aaa;font-size:1.6em;padding:85px 10px;cursor:default}.file-highlighted{border:2px dashed #999!important;background-color:#eee}.file-uploading{background:url(loading-sm.gif) center bottom 10px no-repeat;opacity:.65}.file-zoom-fullscreen .modal-dialog{min-width:100%;margin:0}.file-zoom-fullscreen .modal-content{border-radius:0;box-shadow:none;min-height:100vh}.file-zoom-fullscreen .modal-body{overflow-y:auto}.floating-buttons{z-index:3000}.floating-buttons .btn-kv{margin-left:3px;z-index:3000}.file-zoom-content{height:480px;text-align:center}.file-zoom-content .file-preview-image,.file-zoom-content .file-preview-video{max-height:100%}.file-zoom-content>.file-object.type-image{height:auto;min-height:inherit}.file-zoom-content>.file-object.type-audio{width:auto;height:30px}@media (min-width:576px){.file-zoom-dialog .modal-dialog{max-width:500px}}@media (min-width:992px){.file-zoom-dialog .modal-lg{max-width:800px}}@media (max-width:767px){.file-preview-thumbnails{display:flex;justify-content:center;align-items:center;flex-direction:column}.file-zoom-dialog .modal-header{flex-direction:column}}@media (max-width:350px){.krajee-default.file-preview-frame .kv-file-content{width:160px}}@media (max-width:420px){.krajee-default.file-preview-frame .kv-file-content.kv-pdf-rendered{width:100%}}.file-loading[dir=rtl]:before{background:url(loading.gif) top right no-repeat;padding-left:0;padding-right:20px}.file-sortable .file-drag-handle{cursor:move;opacity:1}.file-sortable .file-drag-handle:hover{opacity:.7}.clickable .file-drop-zone-title{cursor:pointer}.kv-zoom-actions .btn-kv{margin-left:3px}.file-preview-initial.sortable-chosen{background-color:#d9edf7} diff --git a/src/main/resources/static/plugins/fileinput/fileinput.min.js b/src/main/resources/static/halo-backend/plugins/fileinput/fileinput.min.js old mode 100755 new mode 100644 similarity index 70% rename from src/main/resources/static/plugins/fileinput/fileinput.min.js rename to src/main/resources/static/halo-backend/plugins/fileinput/fileinput.min.js index fb001b4c3..6632e5624 --- a/src/main/resources/static/plugins/fileinput/fileinput.min.js +++ b/src/main/resources/static/halo-backend/plugins/fileinput/fileinput.min.js @@ -1,5 +1,5 @@ /*! - * bootstrap-fileinput v4.5.0 + * bootstrap-fileinput v4.5.1 * http://plugins.krajee.com/file-input * * Author: Kartik Visweswaran @@ -8,4 +8,4 @@ * Licensed under the BSD 3-Clause * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md */ -!function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&module.exports?module.exports=e(require("jquery")):e(window.jQuery)}(function(e){"use strict";var t,i;e.fn.fileinputLocales={},e.fn.fileinputThemes={},String.prototype.setTokens=function(e){var t,i,a=this.toString();for(t in e)e.hasOwnProperty(t)&&(i=new RegExp("{"+t+"}","g"),a=a.replace(i,e[t]));return a},t={FRAMES:".kv-preview-thumb",SORT_CSS:"file-sortable",OBJECT_PARAMS:'\n\n\n\n\n\n',DEFAULT_PREVIEW:'
    \n{previewFileIcon}\n
    ',MODAL_ID:"kvFileinputModal",MODAL_EVENTS:["show","shown","hide","hidden","loaded"],objUrl:window.URL||window.webkitURL,compare:function(e,t,i){return void 0!==e&&(i?e===t:e.match(t))},isIE:function(e){if("Microsoft Internet Explorer"!==navigator.appName)return!1;if(10===e)return new RegExp("msie\\s"+e,"i").test(navigator.userAgent);var t,i=document.createElement("div");return i.innerHTML="\x3c!--[if IE "+e+"]> 0&&e[0].webkitGetAsEntry())for(t=0;t=0?atob(e.split(",")[1]):decodeURIComponent(e.split(",")[1]),a=new ArrayBuffer(i.length),r=new Uint8Array(a),n=0;n>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:s+=String.fromCharCode(i);break;case 12:case 13:a=n[o++],s+=String.fromCharCode((31&i)<<6|63&a);break;case 14:a=n[o++],r=n[o++],s+=String.fromCharCode((15&i)<<12|(63&a)<<6|(63&r)<<0)}return s},isHtml:function(e){var t=document.createElement("div");t.innerHTML=e;for(var i=t.childNodes,a=i.length;a--;)if(1===i[a].nodeType)return!0;return!1},isSvg:function(e){return e.match(/^\s*<\?xml/i)&&(e.match(//g,">").replace(/"/g,""").replace(/'/g,"'")},replaceTags:function(t,i){var a=t;return i?(e.each(i,function(e,t){"function"==typeof t&&(t=t()),a=a.split(e).join(t)}),a):a},cleanMemory:function(e){var i=e.is("img")?e.attr("src"):e.find("source").attr("src");t.objUrl.revokeObjectURL(i)},findFileName:function(e){var t=e.lastIndexOf("/");return-1===t&&(t=e.lastIndexOf("\\")),e.split(e.substring(t,t+1)).pop()},checkFullScreen:function(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement},toggleFullScreen:function(e){var i=document,a=i.documentElement;a&&e&&!t.checkFullScreen()?a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):i.exitFullscreen?i.exitFullscreen():i.msExitFullscreen?i.msExitFullscreen():i.mozCancelFullScreen?i.mozCancelFullScreen():i.webkitExitFullscreen&&i.webkitExitFullscreen()},moveArray:function(t,i,a,r){var n=e.extend(!0,[],t);if(r&&n.reverse(),a>=n.length)for(var s=a-n.length;1+s--;)n.push(void 0);return n.splice(a,0,n.splice(i,1)[0]),r&&n.reverse(),n},cleanZoomCache:function(e){var t=e.closest(".kv-zoom-cache-theme");t.length||(t=e.closest(".kv-zoom-cache")),t.remove()},closeButton:function(e){return''},getRotation:function(e){switch(e){case 2:return"rotateY(180deg)";case 3:return"rotate(180deg)";case 4:return"rotate(180deg) rotateY(180deg)";case 5:return"rotate(270deg) rotateY(180deg)";case 6:return"rotate(90deg)";case 7:return"rotate(90deg) rotateY(180deg)";case 8:return"rotate(270deg)";default:return""}},setTransform:function(e,t){e&&(e.style.transform=t,e.style.webkitTransform=t,e.style["-moz-transform"]=t,e.style["-ms-transform"]=t,e.style["-o-transform"]=t)},setImageOrientation:function(e,i,a){if(e&&e.length){var r="load.fileinputimageorient";e.off(r).on(r,function(){var r=e.get(0),n=i&&i.length?i.get(0):null,s=r.offsetHeight,o=r.offsetWidth,l=t.getRotation(a);if(e.data("orientation",a),n&&i.data("orientation",a),a<5)return t.setTransform(r,l),void t.setTransform(n,l);var d=Math.atan(o/s),c=Math.sqrt(Math.pow(s,2)+Math.pow(o,2)),h=c?s/Math.cos(Math.PI/2+d)/c:1,p=" scale("+Math.abs(h)+")";t.setTransform(r,l+p),t.setTransform(n,l+p)})}}},(i=function(i,a){this.$element=e(i),this.$parent=this.$element.parent(),this._validate()&&(this.isPreviewable=t.hasFileAPISupport(),this.isIE9=t.isIE(9),this.isIE10=t.isIE(10),(this.isPreviewable||this.isIE9)&&(this._init(a),this._listen()),this.$element.removeClass("file-loading"))}).prototype={constructor:i,_cleanup:function(){this.reader=null,this.formdata={},this.uploadCount=0,this.uploadStatus={},this.uploadLog=[],this.uploadAsyncCount=0,this.loadedImages=[],this.totalImagesCount=0,this.ajaxRequests=[],this.clearStack(),this.fileBatchCompleted=!0,this.isPreviewable||(this.showPreview=!1),this.isError=!1,this.ajaxAborted=!1,this.cancelling=!1},_init:function(i,a){var r,n,s,o,l=this,d=l.$element;l.options=i,e.each(i,function(e,i){switch(e){case"minFileCount":case"maxFileCount":case"minFileSize":case"maxFileSize":case"maxFilePreviewSize":case"resizeImageQuality":case"resizeIfSizeMoreThan":case"progressUploadThreshold":case"initialPreviewCount":case"zoomModalHeight":case"minImageHeight":case"maxImageHeight":case"minImageWidth":case"maxImageWidth":l[e]=t.getNum(i);break;default:l[e]=i}}),l.rtl&&(o=l.previewZoomButtonIcons.prev,l.previewZoomButtonIcons.prev=l.previewZoomButtonIcons.next,l.previewZoomButtonIcons.next=o),a||l._cleanup(),l.$form=d.closest("form"),l._initTemplateDefaults(),l.uploadFileAttr=t.isEmpty(d.attr("name"))?"file_data":d.attr("name"),s=l._getLayoutTemplate("progress"),l.progressTemplate=s.replace("{class}",l.progressClass),l.progressCompleteTemplate=s.replace("{class}",l.progressCompleteClass),l.progressErrorTemplate=s.replace("{class}",l.progressErrorClass),l.isDisabled=d.attr("disabled")||d.attr("readonly"),l.isDisabled&&d.attr("disabled",!0),l.isAjaxUpload=t.hasFileUploadSupport()&&!t.isEmpty(l.uploadUrl),l.dropZoneEnabled=t.hasDragDropSupport()&&l.dropZoneEnabled,l.isAjaxUpload||(l.dropZoneEnabled=l.dropZoneEnabled&&t.canAssignFilesToInput()),l.isClickable=l.browseOnZoneClick&&l.showPreview&&(l.dropZoneEnabled||!t.isEmpty(l.defaultPreviewContent)),l.slug="function"==typeof i.slugCallback?i.slugCallback:l._slugDefault,l.mainTemplate=l.showCaption?l._getLayoutTemplate("main1"):l._getLayoutTemplate("main2"),l.captionTemplate=l._getLayoutTemplate("caption"),l.previewGenericTemplate=l._getPreviewTemplate("generic"),!l.imageCanvas&&l.resizeImage&&(l.maxImageWidth||l.maxImageHeight)&&(l.imageCanvas=document.createElement("canvas"),l.imageCanvasContext=l.imageCanvas.getContext("2d")),t.isEmpty(d.attr("id"))&&d.attr("id",t.uniqId()),l.namespace=".fileinput_"+d.attr("id").replace(/-/g,"_"),void 0===l.$container?l.$container=l._createContainer():l._refreshContainer(),n=l.$container,l.$dropZone=n.find(".file-drop-zone"),l.$progress=n.find(".kv-upload-progress"),l.$btnUpload=n.find(".fileinput-upload"),l.$captionContainer=t.getElement(i,"elCaptionContainer",n.find(".file-caption")),l.$caption=t.getElement(i,"elCaptionText",n.find(".file-caption-name")),t.isEmpty(l.msgPlaceholder)||(r=d.attr("multiple")?l.filePlural:l.fileSingle,l.$caption.attr("placeholder",l.msgPlaceholder.replace("{files}",r))),l.$captionIcon=l.$captionContainer.find(".file-caption-icon"),l.$previewContainer=t.getElement(i,"elPreviewContainer",n.find(".file-preview")),l.$preview=t.getElement(i,"elPreviewImage",n.find(".file-preview-thumbnails")),l.$previewStatus=t.getElement(i,"elPreviewStatus",n.find(".file-preview-status")),l.$errorContainer=t.getElement(i,"elErrorContainer",l.$previewContainer.find(".kv-fileinput-error")),l._validateDisabled(),t.isEmpty(l.msgErrorClass)||t.addCss(l.$errorContainer,l.msgErrorClass),a?l._errorsExist()||l.$errorContainer.hide():(l.$errorContainer.hide(),l.previewInitId="preview-"+t.uniqId(),l._initPreviewCache(),l._initPreview(!0),l._initPreviewActions(),l.$parent.hasClass("file-loading")&&(l.$container.insertBefore(l.$parent),l.$parent.remove())),l._setFileDropZoneTitle(),d.attr("disabled")&&l.disable(),l._initZoom(),l.hideThumbnailContent&&t.addCss(l.$preview,"hide-content")},_initTemplateDefaults:function(){var i,a,r,n,s,o,l,d,c,h=this;i=t.closeButton("fileinput-remove"),a='',r='
    \n",s='\x3c!--suppress ALL --\x3e\n",l='\n',o='\n\n'+t.OBJECT_PARAMS+" "+t.DEFAULT_PREVIEW+"\n\n",d='
    \n'+t.DEFAULT_PREVIEW+"\n
    \n",c={width:"100%",height:"100%","min-height":"480px"},h._isPdfRendered()&&(l=h.pdfRendererTemplate.replace("{renderer}",h.pdfRendererUrl)),h.defaults={layoutTemplates:{main1:'{preview}\n
    \n
    \n {caption}\n
    \n {remove}\n {cancel}\n {upload}\n {browse}\n
    \n
    ',main2:'{preview}\n
    \n
    \n{remove}\n{cancel}\n{upload}\n{browse}\n',preview:'
    \n {close}
    \n
    \n
    \n
    \n
    \n
    \n
    ',close:i,fileIcon:'',caption:'
    \n \n \n
    ',modalMain:a,modal:'\n',progress:'
    \n
    \n {status}\n
    \n
    ',size:" ({sizeText})",footer:'',indicator:'
    {indicator}
    ',actions:'
    \n \n
    \n{drag}\n
    ',actionDelete:'\n',actionUpload:'',actionDownload:'
    {downloadIcon}',actionZoom:'',actionDrag:'{dragIcon}',btnDefault:'',btnLink:'{icon} {label}',btnBrowse:'
    {icon} {label}
    ',zoomCache:''},previewMarkupTags:{tagBefore1:'
    \n',tagBefore2:'
    \n',tagAfter:"
    {footer}\n
    \n"},previewContentTemplates:{generic:"{content}\n",html:'
    {data}
    \n',image:'{caption}\n',text:'\n',office:'',gdocs:'',video:n,audio:s,flash:'\n',object:o,pdf:l,other:d},allowedPreviewTypes:["image","html","text","video","audio","flash","pdf","object"],previewTemplates:{},previewSettings:{image:{width:"auto",height:"auto","max-width":"100%","max-height":"100%"},html:{width:"213px",height:"160px"},text:{width:"213px",height:"160px"},office:{width:"213px",height:"160px"},gdocs:{width:"213px",height:"160px"},video:{width:"213px",height:"160px"},audio:{width:"100%",height:"30px"},flash:{width:"213px",height:"160px"},object:{width:"213px",height:"160px"},pdf:{width:"100%",height:"160px"},other:{width:"213px",height:"160px"}},previewSettingsSmall:{image:{width:"auto",height:"auto","max-width":"100%","max-height":"100%"},html:{width:"100%",height:"160px"},text:{width:"100%",height:"160px"},office:{width:"100%",height:"160px"},gdocs:{width:"100%",height:"160px"},video:{width:"100%",height:"auto"},audio:{width:"100%",height:"30px"},flash:{width:"100%",height:"auto"},object:{width:"100%",height:"auto"},pdf:{width:"100%",height:"160px"},other:{width:"100%",height:"160px"}},previewZoomSettings:{image:{width:"auto",height:"auto","max-width":"100%","max-height":"100%"},html:c,text:c,office:{width:"100%",height:"100%","max-width":"100%","min-height":"480px"},gdocs:{width:"100%",height:"100%","max-width":"100%","min-height":"480px"},video:{width:"auto",height:"100%","max-width":"100%"},audio:{width:"100%",height:"30px"},flash:{width:"auto",height:"480px"},object:{width:"auto",height:"100%","max-width":"100%","min-height":"480px"},pdf:c,other:{width:"auto",height:"100%","min-height":"480px"}},fileTypeSettings:{image:function(e,i){return t.compare(e,"image.*")&&!t.compare(e,/(tiff?|wmf)$/i)||t.compare(i,/\.(gif|png|jpe?g)$/i)},html:function(e,i){return t.compare(e,"text/html")||t.compare(i,/\.(htm|html)$/i)},office:function(e,i){return t.compare(e,/(word|excel|powerpoint|office)$/i)||t.compare(i,/\.(docx?|xlsx?|pptx?|pps|potx?)$/i)},gdocs:function(e,i){return t.compare(e,/(word|excel|powerpoint|office|iwork-pages|tiff?)$/i)||t.compare(i,/\.(docx?|xlsx?|pptx?|pps|potx?|rtf|ods|odt|pages|ai|dxf|ttf|tiff?|wmf|e?ps)$/i)},text:function(e,i){return t.compare(e,"text.*")||t.compare(i,/\.(xml|javascript)$/i)||t.compare(i,/\.(txt|md|csv|nfo|ini|json|php|js|css)$/i)},video:function(e,i){return t.compare(e,"video.*")&&(t.compare(e,/(ogg|mp4|mp?g|mov|webm|3gp)$/i)||t.compare(i,/\.(og?|mp4|webm|mp?g|mov|3gp)$/i))},audio:function(e,i){return t.compare(e,"audio.*")&&(t.compare(i,/(ogg|mp3|mp?g|wav)$/i)||t.compare(i,/\.(og?|mp3|mp?g|wav)$/i))},flash:function(e,i){return t.compare(e,"application/x-shockwave-flash",!0)||t.compare(i,/\.(swf)$/i)},pdf:function(e,i){return t.compare(e,"application/pdf",!0)||t.compare(i,/\.(pdf)$/i)},object:function(){return!0},other:function(){return!0}},fileActionSettings:{showRemove:!0,showUpload:!0,showDownload:!0,showZoom:!0,showDrag:!0,removeIcon:'',removeClass:"btn btn-sm btn-kv btn-default btn-outline-secondary",removeErrorClass:"btn btn-sm btn-kv btn-danger",removeTitle:"Remove file",uploadIcon:'',uploadClass:"btn btn-sm btn-kv btn-default btn-outline-secondary",uploadTitle:"Upload file",uploadRetryIcon:'',uploadRetryTitle:"Retry upload",downloadIcon:'',downloadClass:"btn btn-sm btn-kv btn-default btn-outline-secondary",downloadTitle:"Download file",zoomIcon:'',zoomClass:"btn btn-sm btn-kv btn-default btn-outline-secondary",zoomTitle:"View Details",dragIcon:'',dragClass:"text-info",dragTitle:"Move / Rearrange",dragSettings:{},indicatorNew:'',indicatorSuccess:'',indicatorError:'',indicatorLoading:'',indicatorNewTitle:"Not uploaded yet",indicatorSuccessTitle:"Uploaded",indicatorErrorTitle:"Upload Error",indicatorLoadingTitle:"Uploading ..."}},e.each(h.defaults,function(t,i){"allowedPreviewTypes"!==t?h[t]=e.extend(!0,{},i,h[t]):void 0===h.allowedPreviewTypes&&(h.allowedPreviewTypes=i)}),h._initPreviewTemplates()},_initPreviewTemplates:function(){var i,a=this,r=a.previewMarkupTags,n=r.tagAfter;e.each(a.previewContentTemplates,function(e,s){t.isEmpty(a.previewTemplates[e])&&(i=r.tagBefore2,"generic"!==e&&"image"!==e&&"html"!==e&&"text"!==e||(i=r.tagBefore1),a._isPdfRendered()&&"pdf"===e&&(i=i.replace("kv-file-content","kv-file-content kv-pdf-rendered")),a.previewTemplates[e]=i+s+n)})},_initPreviewCache:function(){var i=this;i.previewCache={data:{},init:function(){var e=i.initialPreview;e.length>0&&!t.isArray(e)&&(e=e.split(i.initialPreviewDelimiter)),i.previewCache.data={content:e,config:i.initialPreviewConfig,tags:i.initialPreviewThumbTags}},count:function(){return i.previewCache.data&&i.previewCache.data.content?i.previewCache.data.content.length:0},get:function(a,r){var n,s,o,l,d,c,h,p="init_"+a,u=i.previewCache.data,f=u.config[a],m=u.content[a],g=i.previewInitId+"-"+p,v=t.ifSet("previewAsData",f,i.initialPreviewAsData),w=function(e,a,r,n,s,o,l,d,c){return d=" file-preview-initial "+t.SORT_CSS+(d?" "+d:""),i._generatePreviewTemplate(e,a,r,n,s,!1,null,d,o,l,c)};return m?(r=void 0===r||r,o=t.ifSet("type",f,i.initialPreviewFileType||"generic"),d=t.ifSet("filename",f,t.ifSet("caption",f)),c=t.ifSet("filetype",f,o),l=i.previewCache.footer(a,r,f&&f.size||null),h=t.ifSet("frameClass",f),n=v?w(o,m,d,c,g,l,p,h):w("generic",m,d,c,g,l,p,h,o).setTokens({content:u.content[a]}),u.tags.length&&u.tags[a]&&(n=t.replaceTags(n,u.tags[a])),t.isEmpty(f)||t.isEmpty(f.frameAttr)||((s=e(document.createElement("div")).html(n)).find(".file-preview-initial").attr(f.frameAttr),n=s.html(),s.remove()),n):""},add:function(e,a,r,n){var s,o=i.previewCache.data;return t.isArray(e)||(e=e.split(i.initialPreviewDelimiter)),n?(s=o.content.push(e)-1,o.config[s]=a,o.tags[s]=r):(s=e.length-1,o.content=e,o.config=a,o.tags=r),i.previewCache.data=o,s},set:function(e,a,r,n){var s,o=i.previewCache.data;if(e&&e.length&&(t.isArray(e)||(e=e.split(i.initialPreviewDelimiter)),e.filter(function(e){return null!==e}).length)){if(void 0===o.content&&(o.content=[]),void 0===o.config&&(o.config=[]),void 0===o.tags&&(o.tags=[]),n){for(s=0;s'+e+"":"
  • "+e+"
  • ";return 0===a.find("ul").length?this._addError("
      "+n+"
    "):a.find("ul").append(n),a.fadeIn(800),this._raise(r,[t,e]),this._setValidationError("file-input-new"),!0},_showError:function(e,t,i){var a=this.$errorContainer,r=i||"fileerror";return(t=t||{}).reader=this.reader,this._addError(e),a.fadeIn(800),this._raise(r,[t,e]),this.isAjaxUpload||this._clearFileInput(),this._setValidationError("file-input-new"),this.$btnUpload.attr("disabled",!0),!0},_noFilesError:function(e){var t=this.minFileCount>1?this.filePlural:this.fileSingle,i=this.msgFilesTooLess.replace("{n}",this.minFileCount).replace("{files}",t),a=this.$errorContainer;this._addError(i),this.isError=!0,this._updateFileDetails(0),a.fadeIn(800),this._raise("fileerror",[e,i]),this._clearFileInput(),this._setValidationError()},_parseError:function(t,i,a,r){var n,s=e.trim(a+""),o=void 0!==i.responseJSON&&void 0!==i.responseJSON.error?i.responseJSON.error:i.responseText;return this.cancelling&&this.msgUploadAborted&&(s=this.msgUploadAborted),this.showAjaxErrorDetails&&o&&(n=(o=e.trim(o.replace(/\n\s*\n/g,"\n"))).length?"
    "+o+"
    ":"",s+=s?n:o),s||(s=this.msgAjaxError.replace("{operation}",t)),this.cancelling=!1,r?""+r+": "+s:s},_parseFileType:function(e,i){var a,r,n,s=this.allowedPreviewTypes||[];if("application/text-plain"===e)return"text";for(n=0;n-1&&(i=t.split(".").pop(),a.previewFileIconSettings&&(r=a.previewFileIconSettings[i]||a.previewFileIconSettings[i.toLowerCase()]||null),a.previewFileExtSettings&&e.each(a.previewFileExtSettings,function(e,t){a.previewFileIconSettings[e]&&t(i)&&(r=a.previewFileIconSettings[e])})),r},_parseFilePreviewIcon:function(e,t){var i=this._getPreviewIcon(t)||this.previewFileIcon,a=e;return a.indexOf("{previewFileIcon}")>-1&&(a=a.setTokens({previewFileIconClass:this.previewFileIconClass,previewFileIcon:i})),a},_raise:function(t,i){var a=e.Event(t);if(void 0!==i?this.$element.trigger(a,i):this.$element.trigger(a),a.isDefaultPrevented()||!1===a.result)return!1;switch(t){case"filebatchuploadcomplete":case"filebatchuploadsuccess":case"fileuploaded":case"fileclear":case"filecleared":case"filereset":case"fileerror":case"filefoldererror":case"fileuploaderror":case"filebatchuploaderror":case"filedeleteerror":case"filecustomerror":case"filesuccessremove":break;default:this.ajaxAborted||(this.ajaxAborted=a.result)}return!0},_listenFullScreen:function(e){var t,i,a=this.$modal;a&&a.length&&(t=a&&a.find(".btn-fullscreen"),i=a&&a.find(".btn-borderless"),t.length&&i.length&&(t.removeClass("active").attr("aria-pressed","false"),i.removeClass("active").attr("aria-pressed","false"),e?t.addClass("active").attr("aria-pressed","true"):i.addClass("active").attr("aria-pressed","true"),a.hasClass("file-zoom-fullscreen")?this._maximizeZoomDialog():e?this._maximizeZoomDialog():i.removeClass("active").attr("aria-pressed","false")))},_listen:function(){var i=this,a=i.$element,r=i.$form,n=i.$container;i._handler(a,"click",function(e){a.hasClass("file-no-browse")&&(a.data("zoneClicked")?a.data("zoneClicked",!1):e.preventDefault())}),i._handler(a,"change",e.proxy(i._change,i)),i.showBrowse&&i._handler(i.$btnFile,"click",e.proxy(i._browse,i)),i._handler(n.find(".fileinput-remove:not([disabled])"),"click",e.proxy(i.clear,i)),i._handler(n.find(".fileinput-cancel"),"click",e.proxy(i.cancel,i)),i._initDragDrop(),i._handler(r,"reset",e.proxy(i.clear,i)),i.isAjaxUpload||i._handler(r,"submit",e.proxy(i._submitForm,i)),i._handler(i.$container.find(".fileinput-upload"),"click",e.proxy(i._uploadClick,i)),i._handler(e(window),"resize",function(){i._listenFullScreen(screen.width===window.innerWidth&&screen.height===window.innerHeight)}),i._handler(e(document),"webkitfullscreenchange mozfullscreenchange fullscreenchange MSFullscreenChange",function(){i._listenFullScreen(t.checkFullScreen())}),i._autoFitContent(),i._initClickable(),i._refreshPreview()},_autoFitContent:function(){var t,i=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,a=this,r=i<400?a.previewSettingsSmall||a.defaults.previewSettingsSmall:a.previewSettings||a.defaults.previewSettings;e.each(r,function(e,i){t=".file-preview-frame .file-preview-"+e,a.$preview.find(t+".kv-preview-data,"+t+" .kv-preview-data").css(i)})},_scanDroppedItems:function(e,t,i){i=i||"";var a,r,n,s=this,o=function(e){s._log("Error scanning dropped files!"),s._log(e)};e.isFile?e.file(function(e){t.push(e)},o):e.isDirectory&&(r=e.createReader(),(n=function(){r.readEntries(function(r){if(r&&r.length>0){for(a=0;a-1;if(this._zoneDragDropInit(i),this.isDisabled||!a)return i.originalEvent.dataTransfer.effectAllowed="none",void(i.originalEvent.dataTransfer.dropEffect="none");t.addCss(this.$dropZone,"file-highlighted")},_zoneDragLeave:function(e){this._zoneDragDropInit(e),this.isDisabled||this.$dropZone.removeClass("file-highlighted")},_zoneDrop:function(e){var i,a=this,r=a.$element,n=e.originalEvent.dataTransfer,s=n.files,o=n.items,l=t.getDragDropFolders(o),d=function(){a.isAjaxUpload?a._change(e,s):(a.changeTriggered=!0,r.get(0).files=s,setTimeout(function(){a.changeTriggered=!1,r.trigger("change"+a.namespace)},10)),a.$dropZone.removeClass("file-highlighted")};if(e.preventDefault(),!a.isDisabled&&!t.isEmpty(s))if(l>0){if(!a.isAjaxUpload)return void a._showFolderError(l);for(s=[],i=0;i
    ").html(o).text()).html(o),l=f.find(".kv-zoom-body"),f.removeClass("kv-single-content"),a?(h=l.addClass("file-thumb-loading").clone().insertAfter(l),l.html(s).hide(),h.fadeOut("fast",function(){l.fadeIn("fast",function(){l.removeClass("file-thumb-loading")}),h.remove()})):l.html(s),(c=p.previewZoomSettings[n])&&(d=l.find(".kv-preview-data"),t.addCss(d,"file-zoom-detail"),e.each(c,function(e,t){d.css(e,t),(d.attr("width")&&"width"===e||d.attr("height")&&"height"===e)&&d.removeAttr(e)})),f.data("previewId",u),p._handler(m,"click",function(){p._zoomSlideShow("prev",u)}),p._handler(g,"click",function(){p._zoomSlideShow("next",u)}),p._handler(v,"click",function(){p._resizeZoomDialog(!0)}),p._handler(w,"click",function(){p._resizeZoomDialog(!1)}),p._handler(_,"click",function(){var e,t=f.find(".modal-header"),i=f.find(".modal-body .floating-buttons"),a=t.find(".kv-zoom-actions"),r=function(e){var i=p.$modal.find(".kv-zoom-body"),a=p.zoomModalHeight;f.hasClass("file-zoom-fullscreen")&&(a=i.outerHeight(!0),e||(a-=t.outerHeight(!0))),i.css("height",e?a+e:a)};t.is(":visible")?(e=t.outerHeight(!0),t.slideUp("slow",function(){a.find(".btn").appendTo(i),r(e)})):(i.find(".btn").appendTo(a),t.slideDown("slow",function(){r()})),f.focus()}),p._handler(f,"keydown",function(e){var t=e.which||e.keyCode;37!==t||m.attr("disabled")||p._zoomSlideShow("prev",u),39!==t||g.attr("disabled")||p._zoomSlideShow("next",u)})},_zoomPreview:function(e){var i,a=this.$modal;if(!e.length)throw"Cannot zoom to detailed preview!";t.initModal(a),a.html(this._getModalContent()),i=e.closest(t.FRAMES),this._setZoomContent(i),a.modal("show"),this._initZoomButtons()},_zoomSlideShow:function(t,i){var a,r,n,s=this.$modal.find(".kv-zoom-actions .btn-"+t),o=this.getFrames().toArray(),l=o.length;if(!s.attr("disabled")){for(r=0;r=l||!o[n]||((a=e(o[n])).length&&this._setZoomContent(a,!0),this._initZoomButtons(),this._raise("filezoom"+t,{previewId:i,modal:this.$modal}))}},_initZoomButton:function(){var t=this;t.$preview.find(".kv-file-zoom").each(function(){var i=e(this);t._handler(i,"click",function(){t._zoomPreview(i)})})},_inputFileCount:function(){return this.$element.get(0).files.length},_refreshPreview:function(){var e;this._inputFileCount()&&this.showPreview&&this.isPreviewable&&(this.isAjaxUpload?(e=this.getFileStack(),this.filestack=[],e.length?this._clearFileInput():e=this.$element.get(0).files):e=this.$element.get(0).files,e&&e.length&&(this.readFiles(e),this._setFileDropZoneTitle()))},_clearObjects:function(t){t.find("video audio").each(function(){this.pause(),e(this).remove()}),t.find("img object div").each(function(){e(this).remove()})},_clearFileInput:function(){var t,i,a,r=this.$element;this._inputFileCount()&&(t=r.closest("form"),i=e(document.createElement("form")),a=e(document.createElement("div")),r.before(a),t.length?t.after(i):a.after(i),i.append(r).trigger("reset"),a.before(r).remove(),i.remove())},_resetUpload:function(){this.uploadCache={content:[],config:[],tags:[],append:!0},this.uploadCount=0,this.uploadStatus={},this.uploadLog=[],this.uploadAsyncCount=0,this.loadedImages=[],this.totalImagesCount=0,this.$btnUpload.removeAttr("disabled"),this._setProgress(0),this.$progress.hide(),this._resetErrors(!1),this.ajaxAborted=!1,this.ajaxRequests=[],this._resetCanvas(),this.cacheInitialPreview={},this.overwriteInitial&&(this.initialPreview=[],this.initialPreviewConfig=[],this.initialPreviewThumbTags=[],this.previewCache.data={content:[],config:[],tags:[]})},_resetCanvas:function(){this.canvas&&this.imageCanvasContext&&this.imageCanvasContext.clearRect(0,0,this.canvas.width,this.canvas.height)},_hasInitialPreview:function(){return!this.overwriteInitial&&this.previewCache.count()},_resetPreview:function(){var e,t;this.previewCache.count()?(e=this.previewCache.out(),this._setPreviewContent(e.content),this._setInitThumbAttr(),t=this.initialCaption?this.initialCaption:e.caption,this._setCaption(t)):(this._clearPreview(),this._initCaption()),this.showPreview&&(this._initZoom(),this._initSortable())},_clearDefaultPreview:function(){this.$preview.find(".file-default-preview").remove()},_validateDefaultPreview:function(){this.showPreview&&!t.isEmpty(this.defaultPreviewContent)&&(this._setPreviewContent('
    '+this.defaultPreviewContent+"
    "),this.$container.removeClass("file-input-new"),this._initClickable())},_resetPreviewThumbs:function(e){var t;if(e)return this._clearPreview(),void this.clearStack();this._hasInitialPreview()?(t=this.previewCache.out(),this._setPreviewContent(t.content),this._setInitThumbAttr(),this._setCaption(t.caption),this._initPreviewActions()):this._clearPreview()},_getLayoutTemplate:function(e){var i=this.layoutTemplates[e];return t.isEmpty(this.customLayoutTags)?i:t.replaceTags(i,this.customLayoutTags)},_getPreviewTemplate:function(e){var i=this.previewTemplates[e];return t.isEmpty(this.customPreviewTags)?i:t.replaceTags(i,this.customPreviewTags)},_getOutData:function(e,t,i){return e=e||{},t=t||{},i=i||this.filestack.slice(0)||{},{form:this.formdata,files:i,filenames:this.filenames,filescount:this.getFilesCount(),extra:this._getExtraData(),response:t,reader:this.reader,jqXHR:e}},_getMsgSelected:function(e){var t=1===e?this.fileSingle:this.filePlural;return e>0?this.msgSelected.replace("{n}",e).replace("{files}",t):this.msgNoFilesSelected},_getFrame:function(t){var i=e("#"+t);return i.length?i:(this._log('Invalid thumb frame with id: "'+t+'".'),null)},_getThumbs:function(e){return e=e||"",this.getFrames(":not(.file-preview-initial)"+e)},_getExtraData:function(e,t){var i=this.uploadExtraData;return"function"==typeof this.uploadExtraData&&(i=this.uploadExtraData(e,t)),i},_initXhr:function(e,t,i){var a=this;return e.upload&&e.upload.addEventListener("progress",function(e){var r=0,n=e.total,s=e.loaded||e.position;e.lengthComputable&&(r=Math.floor(s/n*100)),t?a._setAsyncUploadStatus(t,r,i):a._setProgress(r)},!1),e},_initAjaxSettings:function(){this._ajaxSettings=e.extend(!0,{},this.ajaxSettings),this._ajaxDeleteSettings=e.extend(!0,{},this.ajaxDeleteSettings)},_mergeAjaxCallback:function(e,t,i){var a,r=this._ajaxSettings,n=this.mergeAjaxCallbacks;"delete"===i&&(r=this._ajaxDeleteSettings,n=this.mergeAjaxDeleteCallbacks),a=r[e],r[e]=n&&"function"==typeof a?"before"===n?function(){a.apply(this,arguments),t.apply(this,arguments)}:function(){t.apply(this,arguments),a.apply(this,arguments)}:t},_ajaxSubmit:function(t,i,a,r,n,s){var o,l=this;l._raise("filepreajax",[n,s])&&(l._uploadExtra(n,s),l._initAjaxSettings(),l._mergeAjaxCallback("beforeSend",t),l._mergeAjaxCallback("success",i),l._mergeAjaxCallback("complete",a),l._mergeAjaxCallback("error",r),o=e.extend(!0,{},{xhr:function(){var t=e.ajaxSettings.xhr();return l._initXhr(t,n,l.getFileStack().length)},url:s&&l.uploadUrlThumb?l.uploadUrlThumb:l.uploadUrl,type:"POST",dataType:"json",data:l.formdata,cache:!1,processData:!1,contentType:!1},l._ajaxSettings),l.ajaxRequests.push(e.ajax(o)))},_mergeArray:function(e,i){var a=t.cleanArray(this[e]),r=t.cleanArray(i);this[e]=a.concat(r)},_initUploadSuccess:function(i,a,r){var n,s,o,l,d,c,h,p,u,f=this;f.showPreview&&"object"==typeof i&&!e.isEmptyObject(i)&&void 0!==i.initialPreview&&i.initialPreview.length>0&&(f.hasInitData=!0,c=i.initialPreview||[],h=i.initialPreviewConfig||[],p=i.initialPreviewThumbTags||[],n=void 0===i.append||i.append,c.length>0&&!t.isArray(c)&&(c=c.split(f.initialPreviewDelimiter)),f._mergeArray("initialPreview",c),f._mergeArray("initialPreviewConfig",h),f._mergeArray("initialPreviewThumbTags",p),void 0!==a?r?(u=a.attr("data-fileindex"),f.uploadCache.content[u]=c[0],f.uploadCache.config[u]=h[0]||[],f.uploadCache.tags[u]=p[0]||[],f.uploadCache.append=n):(o=f.previewCache.add(c,h[0],p[0],n),s=f.previewCache.get(o,!1),(d=(l=e(document.createElement("div")).html(s).hide().insertAfter(a)).find(".kv-zoom-cache"))&&d.length&&d.insertAfter(a),a.fadeOut("slow",function(){var e=l.find(".file-preview-frame");e&&e.length&&e.insertBefore(a).fadeIn("slow").css("display:inline-block"),f._initPreviewActions(),f._clearFileInput(),t.cleanZoomCache(f.$preview.find("#zoom-"+a.attr("id"))),a.remove(),l.remove(),f._initSortable()})):(f.previewCache.set(c,h,p,n),f._initPreview(),f._initPreviewActions()))},_initSuccessThumbs:function(){var i=this;i.showPreview&&i._getThumbs(t.FRAMES+".file-preview-success").each(function(){var a=e(this),r=i.$preview,n=a.find(".kv-file-remove");n.removeAttr("disabled"),i._handler(n,"click",function(){var e=a.attr("id"),n=i._raise("filesuccessremove",[e,a.attr("data-fileindex")]);t.cleanMemory(a),!1!==n&&a.fadeOut("slow",function(){t.cleanZoomCache(r.find("#zoom-"+e)),a.remove(),i.getFrames().length||i.reset()})})})},_checkAsyncComplete:function(){var t,i;for(i=0;i0||!e.isEmptyObject(m.uploadExtraData),b=e("#"+w).find(".file-thumb-progress"),C={id:w,index:i};m.formdata=v,m.showPreview&&(n=e("#"+w+":not(.file-preview-initial)"),o=n.find(".kv-file-upload"),l=n.find(".kv-file-remove"),b.show()),0===g||!_||o&&o.hasClass("disabled")||m._abort(C)||(f=function(e,t){d||m.updateStack(e,void 0),m.uploadLog.push(t),m._checkAsyncComplete()&&(m.fileBatchCompleted=!0)},s=function(){var e,i,a,r=m.uploadCache,n=0,s=m.cacheInitialPreview;m.fileBatchCompleted&&(s&&s.content&&(n=s.content.length),setTimeout(function(){var o=0===m.getFileStack(!0).length;if(m.showPreview){if(m.previewCache.set(r.content,r.config,r.tags,r.append),n){for(i=0;i0||!e.isEmptyObject(o.uploadExtraData);o.formdata=new FormData,0!==d&&c&&!o._abort({})&&(s=function(){e.each(l,function(e){o.updateStack(e,void 0)}),o._clearFileInput()},i=function(i){o.lock();var a=o._getOutData(i);o.ajaxAborted=!1,o.showPreview&&o._getThumbs().each(function(){var i=e(this),a=i.find(".kv-file-upload"),r=i.find(".kv-file-remove");i.hasClass("file-preview-success")||(o._setThumbStatus(i,"Loading"),t.addCss(i,"file-uploading")),a.attr("disabled",!0),r.attr("disabled",!0)}),o._raise("filebatchpreupload",[a]),o._abort(a)&&(i.abort(),o._getThumbs().each(function(){var t=e(this),i=t.find(".kv-file-upload"),a=t.find(".kv-file-remove");t.hasClass("file-preview-loading")&&(o._setThumbStatus(t,"New"),t.removeClass("file-uploading")),i.removeAttr("disabled"),a.removeAttr("disabled")}),o._setProgressCancelled())},a=function(i,a,r){var n=o._getOutData(r,i),l=0,d=o._getThumbs(":not(.file-preview-success)"),c=t.isEmpty(i)||t.isEmpty(i.errorkeys)?[]:i.errorkeys;t.isEmpty(i)||t.isEmpty(i.error)?(o._raise("filebatchuploadsuccess",[n]),s(),o.showPreview?(d.each(function(){var t=e(this);o._setThumbStatus(t,"Success"),t.removeClass("file-uploading"),t.find(".kv-file-upload").hide().removeAttr("disabled")}),o._initUploadSuccess(i)):o.reset(),o._setProgress(101)):(o.showPreview&&(d.each(function(){var t=e(this),i=t.attr("data-fileindex");t.removeClass("file-uploading"),t.find(".kv-file-upload").removeAttr("disabled"),t.find(".kv-file-remove").removeAttr("disabled"),0===c.length||-1!==e.inArray(l,c)?(o._setPreviewError(t,i,o.filestack[i],o.retryErrorUploads),o.retryErrorUploads||(t.find(".kv-file-upload").hide(),o.updateStack(i,void 0))):(t.find(".kv-file-upload").hide(),o._setThumbStatus(t,"Success"),o.updateStack(i,void 0)),t.hasClass("file-preview-error")&&!o.retryErrorUploads||l++}),o._initUploadSuccess(i)),o._showUploadError(i.error,n,"filebatchuploaderror"),o._setProgress(101,o.$progress,o.msgUploadError))},n=function(){o.unlock(),o._initSuccessThumbs(),o._clearFileInput(),o._raise("filebatchuploadcomplete",[o.filestack,o._getExtraData()])},r=function(t,i,a){var r=o._getOutData(t),n=o.ajaxOperations.uploadBatch,s=o._parseError(n,t,a);o._showUploadError(s,r,"filebatchuploaderror"),o.uploadFileCount=d-1,o.showPreview&&(o._getThumbs().each(function(){var t=e(this),i=t.attr("data-fileindex");t.removeClass("file-uploading"),void 0!==o.filestack[i]&&o._setPreviewError(t)}),o._getThumbs().removeClass("file-uploading"),o._getThumbs(" .kv-file-upload").removeAttr("disabled"),o._getThumbs(" .kv-file-delete").removeAttr("disabled"),o._setProgress(101,o.$progress,o.msgAjaxProgressError.replace("{operation}",n)))},e.each(l,function(e,i){t.isEmpty(l[e])||o.formdata.append(o.uploadFileAttr,i,o.filenames[e])}),o._ajaxSubmit(i,a,n,r))},_uploadExtraOnly:function(){var e,i,a,r,n=this,s={};n.formdata=new FormData,n._abort(s)||(e=function(e){n.lock();var t=n._getOutData(e);n._raise("filebatchpreupload",[t]),n._setProgress(50),s.data=t,s.xhr=e,n._abort(s)&&(e.abort(),n._setProgressCancelled())},i=function(e,i,a){var r=n._getOutData(a,e);t.isEmpty(e)||t.isEmpty(e.error)?(n._raise("filebatchuploadsuccess",[r]),n._clearFileInput(),n._initUploadSuccess(e),n._setProgress(101)):n._showUploadError(e.error,r,"filebatchuploaderror")},a=function(){n.unlock(),n._clearFileInput(),n._raise("filebatchuploadcomplete",[n.filestack,n._getExtraData()])},r=function(e,t,i){var a=n._getOutData(e),r=n.ajaxOperations.uploadExtra,o=n._parseError(r,e,i);s.data=a,n._showUploadError(o,a,"filebatchuploaderror"),n._setProgress(101,n.$progress,n.msgAjaxProgressError.replace("{operation}",r))},n._ajaxSubmit(e,i,a,r))},_deleteFileIndex:function(i){var a=i.attr("data-fileindex"),r=this.reversePreviewOrder;"init_"===a.substring(0,5)&&(a=parseInt(a.replace("init_","")),this.initialPreview=t.spliceArray(this.initialPreview,a,r),this.initialPreviewConfig=t.spliceArray(this.initialPreviewConfig,a,r),this.initialPreviewThumbTags=t.spliceArray(this.initialPreviewThumbTags,a,r),this.getFrames().each(function(){var t=e(this),i=t.attr("data-fileindex");"init_"===i.substring(0,5)&&(i=parseInt(i.replace("init_","")))>a&&(i--,t.attr("data-fileindex","init_"+i))}),this.uploadAsync&&(this.cacheInitialPreview=this.getPreview()))},_initFileActions:function(){var i=this,a=i.$preview;i.showPreview&&(i._initZoomButton(),i.getFrames(" .kv-file-remove").each(function(){var r,n,s,o=e(this),l=o.closest(t.FRAMES),d=l.attr("id"),c=l.attr("data-fileindex");i._handler(o,"click",function(){if(!1===i._raise("filepreremove",[d,c])||!i._validateMinCount())return!1;r=l.hasClass("file-preview-error"),t.cleanMemory(l),l.fadeOut("slow",function(){t.cleanZoomCache(a.find("#zoom-"+d)),i.updateStack(c,void 0),i._clearObjects(l),l.remove(),d&&r&&i.$errorContainer.find('li[data-file-id="'+d+'"]').fadeOut("fast",function(){e(this).remove(),i._errorsExist()||i._resetErrors()}),i._clearFileInput();var o=i.getFileStack(!0),h=i.previewCache.count(),p=o.length,u=i.showPreview&&i.getFrames().length;0!==p||0!==h||u?(s=(n=h+p)>1?i._getMsgSelected(n):o[0]?i._getFileNames()[0]:"",i._setCaption(s)):i.reset(),i._raise("fileremoved",[d,c])})})}),i.getFrames(" .kv-file-upload").each(function(){var a=e(this);i._handler(a,"click",function(){var e=a.closest(t.FRAMES),r=e.attr("data-fileindex");i.$progress.hide(),e.hasClass("file-preview-error")&&!i.retryErrorUploads||i._uploadSingle(r,!1)})}))},_initPreviewActions:function(){var i=this,a=i.$preview,r=i.deleteExtraData||{},n=t.FRAMES+" .kv-file-remove",s=i.fileActionSettings,o=s.removeClass,l=s.removeErrorClass,d=function(){var e=i.isAjaxUpload?i.previewCache.count():i._inputFileCount();a.find(t.FRAMES).length||e||(i._setCaption(""),i.reset(),i.initialCaption="")};i._initZoomButton(),a.find(n).each(function(){var n,s,c,h=e(this),p=h.data("url")||i.deleteUrl,u=h.data("key");if(!t.isEmpty(p)&&void 0!==u){var f,m,g,v,w=h.closest(t.FRAMES),_=i.previewCache.data,b=w.attr("data-fileindex");b=parseInt(b.replace("init_","")),g=t.isEmpty(_.config)&&t.isEmpty(_.config[b])?null:_.config[b],"function"==typeof(v=t.isEmpty(g)||t.isEmpty(g.extra)?r:g.extra)&&(v=v()),m={id:h.attr("id"),key:u,extra:v},n=function(e){i.ajaxAborted=!1,i._raise("filepredelete",[u,e,v]),i._abort()?e.abort():(h.removeClass(l),t.addCss(w,"file-uploading"),t.addCss(h,"disabled "+o))},s=function(e,r,n){var s,c;if(!t.isEmpty(e)&&!t.isEmpty(e.error))return m.jqXHR=n,m.response=e,i._showError(e.error,m,"filedeleteerror"),w.removeClass("file-uploading"),h.removeClass("disabled "+o).addClass(l),void d();w.removeClass("file-uploading").addClass("file-deleted"),w.fadeOut("slow",function(){b=parseInt(w.attr("data-fileindex").replace("init_","")),i.previewCache.unset(b),i._deleteFileIndex(w),s=i.previewCache.count(),c=s>0?i._getMsgSelected(s):"",i._setCaption(c),i._raise("filedeleted",[u,n,v]),t.cleanZoomCache(a.find("#zoom-"+w.attr("id"))),i._clearObjects(w),w.remove(),d()})},c=function(e,t,a){var r=i.ajaxOperations.deleteThumb,n=i._parseError(r,e,a);m.jqXHR=e,m.response={},i._showError(n,m,"filedeleteerror"),w.removeClass("file-uploading"),h.removeClass("disabled "+o).addClass(l),d()},i._initAjaxSettings(),i._mergeAjaxCallback("beforeSend",n,"delete"),i._mergeAjaxCallback("success",s,"delete"),i._mergeAjaxCallback("error",c,"delete"),f=e.extend(!0,{},{url:p,type:"POST",dataType:"json",data:e.extend(!0,{},{key:u},v)},i._ajaxDeleteSettings),i._handler(h,"click",function(){if(!i._validateMinCount())return!1;i.ajaxAborted=!1,i._raise("filebeforedelete",[u,v]),i.ajaxAborted instanceof Promise?i.ajaxAborted.then(function(t){t||e.ajax(f)}):i.ajaxAborted||e.ajax(f)})}})},_hideFileIcon:function(){this.overwriteInitial&&this.$captionContainer.removeClass("icon-visible")},_showFileIcon:function(){t.addCss(this.$captionContainer,"icon-visible")},_getSize:function(t){var i,a,r,n=parseFloat(t),s=this.fileSizeGetter;return e.isNumeric(t)&&e.isNumeric(n)?("function"==typeof s?r=s(n):0===n?r="0.00 B":(i=Math.floor(Math.log(n)/Math.log(1024)),a=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],r=1*(n/Math.pow(1024,i)).toFixed(2)+" "+a[i]),this._getLayoutTemplate("size").replace("{sizeText}",r)):""},_generatePreviewTemplate:function(i,a,r,n,s,o,l,d,c,h,p){var u,f=this,m=f.slug(r),g="",v="",w=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)<400?f.previewSettingsSmall[i]||f.defaults.previewSettingsSmall[i]:f.previewSettings[i]||f.defaults.previewSettings[i],_=c||f._renderFileFooter(m,l,"auto",o),b=f._getPreviewIcon(r),C="type-default",y=b&&f.preferIconicPreview,x=b&&f.preferIconicZoomPreview;return w&&e.each(w,function(e,t){v+=e+":"+t+";"}),u=function(a,o,l,c){var u=l?"zoom-"+s:s,g=f._getPreviewTemplate(a),w=(d||"")+" "+c;return f.frameClass&&(w=f.frameClass+" "+w),l&&(w=w.replace(" "+t.SORT_CSS,"")),g=f._parseFilePreviewIcon(g,r),"text"===a&&(o=t.htmlEncode(o)),"object"!==i||n||e.each(f.defaults.fileTypeSettings,function(e,t){"object"!==e&&"other"!==e&&t(r,n)&&(C="type-"+e)}),g.setTokens({previewId:u,caption:m,frameClass:w,type:n,fileindex:h,typeCss:C,footer:_,data:o,template:p||i,style:v?'style="'+v+'"':""})},h=h||s.slice(s.lastIndexOf("-")+1),f.fileActionSettings.showZoom&&(g=u(x?"other":i,a,!0,"kv-zoom-thumb")),g="\n"+f._getLayoutTemplate("zoomCache").replace("{zoomContent}",g),u(y?"other":i,a,!1,"kv-preview-thumb")+g},_addToPreview:function(e,t){return this.reversePreviewOrder?e.prepend(t):e.append(t)},_previewDefault:function(i,a,r){var n=this.$preview;if(this.showPreview){var s,o=i?i.name:"",l=i?i.type:"",d=i.size||0,c=this.slug(o),h=!0===r&&!this.isAjaxUpload,p=t.objUrl.createObjectURL(i);this._clearDefaultPreview(),s=this._generatePreviewTemplate("other",p,o,l,a,h,d),this._addToPreview(n,s),this._setThumbAttr(a,c,d),!0===r&&this.isAjaxUpload&&this._setThumbStatus(e("#"+a),"Error")}},_previewFile:function(e,t,i,a,r,n){if(this.showPreview){var s,o=t?t.name:"",l=n.type,d=n.name,c=this._parseFileType(l,o),h=this.allowedPreviewTypes,p=this.allowedPreviewMimeTypes,u=this.$preview,f=t.size||0,m=h&&h.indexOf(c)>=0,g=p&&-1!==p.indexOf(l),v="text"===c||"html"===c||"image"===c?i.target.result:r;if("html"===c&&this.purifyHtml&&window.DOMPurify&&(v=window.DOMPurify.sanitize(v)),m||g){s=this._generatePreviewTemplate(c,v,o,l,a,!1,f),this._clearDefaultPreview(),this._addToPreview(u,s);var w=u.find("#"+a+" img");this._validateImageOrientation(w,t,a,d,l,f,v)}else this._previewDefault(t,a);this._setThumbAttr(a,d,f),this._initSortable()}},_setThumbAttr:function(t,i,a){var r=e("#"+t);r.length&&(a=a&&a>0?this._getSize(a):"",r.data({caption:i,size:a}))},_setInitThumbAttr:function(){var e,i,a,r,n=this.previewCache.data,s=this.previewCache.count();if(0!==s)for(var o=0;o&"']/g,"_")},_updateFileDetails:function(e){var i=this.$element,a=this.getFileStack(),r=t.isIE(9)&&t.findFileName(i.val())||i[0].files[0]&&i[0].files[0].name||a.length&&a[0].name||"",n=this.slug(r),s=this.isAjaxUpload?a.length:e,o=this.previewCache.count()+s,l=1===s?n:this._getMsgSelected(o);this.isError?(this.$previewContainer.removeClass("file-thumb-loading"),this.$previewStatus.html(""),this.$captionContainer.removeClass("icon-visible")):this._showFileIcon(),this._setCaption(l,this.isError),this.$container.removeClass("file-input-new file-input-ajax-new"),1===arguments.length&&this._raise("fileselect",[e,n]),this.previewCache.count()&&this._initPreviewActions()},_setThumbStatus:function(e,t){if(this.showPreview){var i="indicator"+t,a=i+"Title",r="file-preview-"+t.toLowerCase(),n=e.find(".file-upload-indicator"),s=this.fileActionSettings;e.removeClass("file-preview-success file-preview-error file-preview-loading"),"Success"===t&&e.find(".file-drag-handle").remove(),n.html(s[i]),n.attr("title",s[a]),e.addClass(r),"Error"!==t||this.retryErrorUploads||e.find(".kv-file-upload").attr("disabled",!0)}},_setProgressCancelled:function(){this._setProgress(101,this.$progress,this.msgCancelled)},_setProgress:function(e,i,a){var r,n=Math.min(e,100),s=this.progressUploadThreshold,o=e<=100?this.progressTemplate:this.progressCompleteTemplate,l=n<100?this.progressTemplate:a?this.progressErrorTemplate:o;i=i||this.$progress,t.isEmpty(l)||(r=s&&n>s&&e<=100?l.setTokens({percent:s,status:this.msgUploadThreshold}):l.setTokens({percent:n,status:e>100?this.msgUploadEnd:n+"%"}),i.html(r),a&&i.find('[role="progressbar"]').html(a))},_setFileDropZoneTitle:function(){var e,i=this.$container.find(".file-drop-zone"),a=this.dropZoneTitle;this.isClickable&&(e=t.isEmpty(this.$element.attr("multiple"))?this.fileSingle:this.filePlural,a+=this.dropZoneClickTitle.replace("{files}",e)),i.find("."+this.dropZoneTitleClass).remove(),!this.showPreview||0===i.length||this.getFileStack().length>0||!this.dropZoneEnabled||!this.isAjaxUpload&&this.$element.files||(0===i.find(t.FRAMES).length&&t.isEmpty(this.defaultPreviewContent)&&i.prepend('
    '+a+"
    "),this.$container.removeClass("file-input-new"),t.addCss(this.$container,"file-input-ajax-new"))},_setAsyncUploadStatus:function(t,i,a){var r=0;this._setProgress(i,e("#"+t).find(".file-thumb-progress")),this.uploadStatus[t]=i,e.each(this.uploadStatus,function(e,t){r+=t}),this._setProgress(Math.floor(r/a))},_validateMinCount:function(){var e=this.isAjaxUpload?this.getFileStack().length:this._inputFileCount();return!(this.validateInitialCount&&this.minFileCount>0&&this._getFileCount(e-1)=h:d<=h)||(l=this["msgImage"+s+i].setTokens({name:n,size:h}),this._showUploadError(l,o),this._setPreviewError(r,e,null)))},_getExifObj:function(e){var t=null;try{t=window.piexif?window.piexif.load(e):null}catch(e){t=null}return t||this._log("Error loading the piexif.js library."),t},_validateImageOrientation:function(e,i,a,r,n,s,o){var l=this._getExifObj(o),d=null;e.length&&this.autoOrientImage&&l&&(d=l["0th"][piexif.ImageIFD.Orientation]),d?(t.setImageOrientation(e,this.$preview.find("#zoom-"+a+" img"),d),this._raise("fileimageoriented",{$img:e,file:i}),this._validateImage(a,r,n,s,o,l)):this._validateImage(a,r,n,s,o,l)},_validateImage:function(t,i,a,r,n,s){var o,l,d,c=this,h=c.$preview,p=h.find("#"+t),u=p.attr("data-fileindex"),f=p.find("img");i=i||"Untitled",f.one("load",function(){l=p.width(),d=h.width(),l>d&&f.css("width","100%"),o={ind:u,id:t},c._checkDimensions(u,"Small",f,p,i,"Width",o),c._checkDimensions(u,"Small",f,p,i,"Height",o),c.resizeImage||(c._checkDimensions(u,"Large",f,p,i,"Width",o),c._checkDimensions(u,"Large",f,p,i,"Height",o)),c._raise("fileimageloaded",[t]),c.loadedImages.push({ind:u,img:f,thumb:p,pid:t,typ:a,siz:r,validated:!1,imgData:n,exifObj:s}),p.data("exif",s),c._validateAllImages()}).one("error",function(){c._raise("fileimageloaderror",[t])}).each(function(){this.complete?e(this).trigger("load"):this.error&&e(this).trigger("error")})},_validateAllImages:function(){var e,t,i,a={val:0},r=this.loadedImages.length,n=this.resizeIfSizeMoreThan;if(r===this.totalImagesCount&&(this._raise("fileimagesloaded"),this.resizeImage))for(e=0;e1e3*n&&this._getResizedImage(t,a,r),this.loadedImages[e].validated=!0)},_getResizedImage:function(i,a,r){var n,s,o,l,d,c,h=this,p=e(i.img)[0],u=p.naturalWidth,f=p.naturalHeight,m=1,g=h.maxImageWidth||u,v=h.maxImageHeight||f,w=!(!u||!f),_=h.imageCanvas,b=h.imageCanvasContext,C=i.typ,y=i.pid,x=i.ind,T=i.thumb,E=i.exifObj;if(d=function(e,t,i){h.isAjaxUpload?h._showUploadError(e,t,i):h._showError(e,t,i),h._setPreviewError(T,x)},h.filestack[x]&&w&&!(u<=g&&f<=v)||(w&&h.filestack[x]&&h._raise("fileimageresized",[y,x]),a.val++,a.val===r&&h._raise("fileimagesresized"),w)){C=C||h.resizeDefaultImageType,s=u>g,o=f>v,m="width"===h.resizePreference?s?g/u:o?v/f:1:o?v/f:s?g/u:1,h._resetCanvas(),u*=m,f*=m,_.width=u,_.height=f;try{b.drawImage(p,0,0,u,f),l=_.toDataURL(C,h.resizeQuality),E&&(c=window.piexif.dump(E),l=window.piexif.insert(c,l)),n=t.dataURI2Blob(l),h.filestack[x]=n,h._raise("fileimageresized",[y,x]),a.val++,a.val===r&&h._raise("fileimagesresized",[void 0,void 0]),n instanceof Blob||d(h.msgImageResizeError,{id:y,index:x},"fileimageresizeerror")}catch(e){a.val++,a.val===r&&h._raise("fileimagesresized",[void 0,void 0]),d(h.msgImageResizeException.replace("{errors}",e.message),{id:y,index:x},"fileimageresizeexception")}}else d(h.msgImageResizeError,{id:y,index:x},"fileimageresizeerror")},_initBrowse:function(e){var i=this.$element;this.showBrowse?this.$btnFile=e.find(".btn-file").append(i):(i.appendTo(e).attr("tabindex",-1),t.addCss(i,"file-no-browse"))},_initClickable:function(){var i,a=this;a.isClickable&&(i=a.isAjaxUpload?a.$dropZone:a.$preview.find(".file-default-preview"),t.addCss(i,"clickable"),i.attr("tabindex",-1),a._handler(i,"click",function(t){var r=e(t.target);e(a.elErrorContainer+":visible").length||r.parents(".file-preview-thumbnails").length&&!r.parents(".file-default-preview").length||(a.$element.data("zoneClicked",!0).trigger("click"),i.blur())}))},_initCaption:function(){var e=this.initialCaption||"";return this.overwriteInitial||t.isEmpty(e)?(this.$caption.val(""),!1):(this._setCaption(e),!0)},_setCaption:function(i,a){var r,n,s,o,l,d=this.getFileStack();if(this.$caption.length){if(this.$captionContainer.removeClass("icon-visible"),a)r=e("
    "+this.msgValidationError+"
    ").text(),l=(o=d.length)?1===o&&d[0]?this._getFileNames()[0]:this._getMsgSelected(o):this._getMsgSelected(this.msgNo),n=t.isEmpty(i)?l:i,s=''+this.msgValidationErrorIcon+"";else{if(t.isEmpty(i))return;n=r=e("
    "+i+"
    ").text(),s=this._getLayoutTemplate("fileIcon")}this.$captionContainer.addClass("icon-visible"),this.$caption.attr("title",r).val(n),this.$captionIcon.html(s)}},_createContainer:function(){var t={class:"file-input file-input-new"+(this.rtl?" kv-rtl":"")},i=e(document.createElement("div")).attr(t).html(this._renderMain());return i.insertBefore(this.$element),this._initBrowse(i),this.theme&&i.addClass("theme-"+this.theme),i},_refreshContainer:function(){var e=this.$container;this.$element.insertAfter(e),e.html(this._renderMain()),this._initBrowse(e),this._validateDisabled()},_validateDisabled:function(){this.$caption.attr({readonly:this.isDisabled})},_renderMain:function(){var e=this.dropZoneEnabled?" file-drop-zone":"file-drop-disabled",t=this.showClose?this._getLayoutTemplate("close"):"",i=this.showPreview?this._getLayoutTemplate("preview").setTokens({class:this.previewClass,dropClass:e}):"",a=this.isDisabled?this.captionClass+" file-caption-disabled":this.captionClass,r=this.captionTemplate.setTokens({class:a+" kv-fileinput-caption"});return this.mainTemplate.setTokens({class:this.mainClass+(!this.showBrowse&&this.showCaption?" no-browse":""),preview:i,close:t,caption:r,upload:this._renderButton("upload"),remove:this._renderButton("remove"),cancel:this._renderButton("cancel"),browse:this._renderButton("browse")})},_renderButton:function(e){var i=this._getLayoutTemplate("btnDefault"),a=this[e+"Class"],r=this[e+"Title"],n=this[e+"Icon"],s=this[e+"Label"],o=this.isDisabled?" disabled":"",l="button";switch(e){case"remove":if(!this.showRemove)return"";break;case"cancel":if(!this.showCancel)return"";a+=" kv-hidden";break;case"upload":if(!this.showUpload)return"";this.isAjaxUpload&&!this.isDisabled?i=this._getLayoutTemplate("btnLink").replace("{href}",this.uploadUrl):l="submit";break;case"browse":if(!this.showBrowse)return"";i=this._getLayoutTemplate("btnBrowse");break;default:return""}return a+="browse"===e?" btn-file":" fileinput-"+e+" fileinput-"+e+"-button",t.isEmpty(s)||(s=' '+s+""),i.setTokens({type:l,css:a,title:r,status:o,icon:n,label:s})},_renderThumbProgress:function(){return'
    '+this.progressTemplate.setTokens({percent:"0",status:this.msgUploadBegin})+"
    "},_renderFileFooter:function(e,i,a,r){var n,s=this.fileActionSettings,o=s.showRemove,l=s.showDrag,d=s.showUpload,c=s.showZoom,h=this._getLayoutTemplate("footer"),p=this._getLayoutTemplate("indicator"),u=r?s.indicatorError:s.indicatorNew,f=r?s.indicatorErrorTitle:s.indicatorNewTitle,m=p.setTokens({indicator:u,indicatorTitle:f});return i=this._getSize(i),n=this.isAjaxUpload?h.setTokens({actions:this._renderFileActions(d,!1,o,c,l,!1,!1,!1),caption:e,size:i,width:a,progress:this._renderThumbProgress(),indicator:m}):h.setTokens({actions:this._renderFileActions(!1,!1,!1,c,l,!1,!1,!1),caption:e,size:i,width:a,progress:"",indicator:m}),n=t.replaceTags(n,this.previewThumbTags)},_renderFileActions:function(e,t,i,a,r,n,s,o,l,d,c){if(!(e||t||i||a||r))return"";var h,p=!1===s?"":' data-url="'+s+'"',u=!1===o?"":' data-key="'+o+'"',f="",m="",g="",v="",w="",_=this._getLayoutTemplate("actions"),b=this.fileActionSettings,C=this.otherActionButtons.setTokens({dataKey:u,key:o}),y=n?b.removeClass+" disabled":b.removeClass;return i&&(f=this._getLayoutTemplate("actionDelete").setTokens({removeClass:y,removeIcon:b.removeIcon,removeTitle:b.removeTitle,dataUrl:p,dataKey:u,key:o})),e&&(m=this._getLayoutTemplate("actionUpload").setTokens({uploadClass:b.uploadClass,uploadIcon:b.uploadIcon,uploadTitle:b.uploadTitle})),t&&(g=(g=this._getLayoutTemplate("actionDownload").setTokens({downloadClass:b.downloadClass,downloadIcon:b.downloadIcon,downloadTitle:b.downloadTitle,downloadUrl:d||this.initialPreviewDownloadUrl})).setTokens({filename:c,key:o})),a&&(v=this._getLayoutTemplate("actionZoom").setTokens({zoomClass:b.zoomClass,zoomIcon:b.zoomIcon,zoomTitle:b.zoomTitle})),r&&l&&(h="drag-handle-init "+b.dragClass,w=this._getLayoutTemplate("actionDrag").setTokens({dragClass:h,dragTitle:b.dragTitle,dragIcon:b.dragIcon})),_.setTokens({delete:f,upload:m,download:g,zoom:v,drag:w,other:C})},_browse:function(e){e&&e.isDefaultPrevented()||!this._raise("filebrowse")||(this.isError&&!this.isAjaxUpload&&this.clear(),this.$captionContainer.focus())},_filterDuplicate:function(e,t,i){var a=this._getFileId(e);a&&i&&i.indexOf(a)>-1||(i||(i=[]),t.push(e),i.push(a))},_change:function(i){var a=this;if(!a.changeTriggered){var r,n,s,o,l,d,c,h,p,u,f,m=a.$element,g=arguments.length>1,v=a.isAjaxUpload,w=[],_=g?arguments[1]:m.get(0).files,b=!v&&t.isEmpty(m.attr("multiple"))?1:a.maxFileCount,C=a.filestack.length,y=t.isEmpty(m.attr("multiple"))&&C>0,x=a._getFileIds();if(a.reader=null,a._resetUpload(),a._hideFileIcon(),a.dropZoneEnabled&&a.$container.find(".file-drop-zone ."+a.dropZoneTitleClass).remove(),v?e.each(_,function(e,t){a._filterDuplicate(t,w,x)}):(_=i.target&&void 0===i.target.files?i.target.value?[{name:i.target.value.replace(/^.+\\/,"")}]:[]:i.target.files||{},w=_),t.isEmpty(w)||0===w.length)return v||a.clear(),void a._raise("fileselectnone");if(a._resetErrors(),n=w.length,r=a._getFileCount(v?a.getFileStack().length+n:n),b>0&&r>b){if(!a.autoReplace||n>b)return s=a.autoReplace&&n>b?n:r,o=b,f=a.msgFilesTooMany.replace("{m}",o).replace("{n}",s),a.isError=(l=f,d=null,c=null,h=null,p=e.extend(!0,{},a._getOutData({},{},_),{id:c,index:h}),u={id:c,index:h,file:d,files:_},v?a._showUploadError(l,p):a._showError(l,u)),a.$captionContainer.removeClass("icon-visible"),a._setCaption("",!0),void a.$container.removeClass("file-input-new file-input-ajax-new");r>b&&a._resetPreviewThumbs(v)}else!v||y?(a._resetPreviewThumbs(!1),y&&a.clearStack()):!v||0!==C||a.previewCache.count()&&!a.overwriteInitial||a._resetPreviewThumbs(!0);a.isPreviewable?a.readFiles(w):a._updateFileDetails(1)}},_abort:function(t){var i;return this.ajaxAborted&&"object"==typeof this.ajaxAborted&&void 0!==this.ajaxAborted.message?((i=e.extend(!0,{},this._getOutData(),t)).abortData=this.ajaxAborted.data||{},i.abortMessage=this.ajaxAborted.message,this._setProgress(101,this.$progress,this.msgCancelled),this._showUploadError(this.ajaxAborted.message,i,"filecustomerror"),this.cancel(),!0):!!this.ajaxAborted},_resetFileStack:function(){var i=this,a=0,r=[],n=[],s=[];i._getThumbs().each(function(){var o=e(this),l=o.attr("data-fileindex"),d=i.filestack[l],c=o.attr("id");"-1"!==l&&-1!==l&&(void 0!==d?(r[a]=d,n[a]=i._getFileName(d),s[a]=i._getFileId(d),o.attr({id:i.previewInitId+"-"+a,"data-fileindex":a}),a++):o.attr({id:"uploaded-"+t.uniqId(),"data-fileindex":"-1"}),i.$preview.find("#zoom-"+c).attr({id:"zoom-"+o.attr("id"),"data-fileindex":o.attr("data-fileindex")}))}),i.filestack=r,i.filenames=n,i.fileids=s},_isFileSelectionValid:function(e){return e=e||0,this.required&&!this.getFilesCount()?(this.$errorContainer.html(""),this._showUploadError(this.msgFileRequired),!1):!(this.minFileCount>0&&this._getFileCount(e)=u)return r.isAjaxUpload&&r.filestack.length>0?r._raise("filebatchselected",[r.getFileStack()]):r._raise("filebatchselected",[i]),l.removeClass("file-thumb-loading"),void d.html("");var T,E,S,k,F,P,I,A,D,z,$,j,U=p+"-"+(m+x),B=i[x],R=f.text,O=f.image,L=f.html,M=B&&B.name?r.slug(B.name):"",Z=(B&&B.size||0)/1e3,N="",H=B?t.objUrl.createObjectURL(B):null,W=0,q="",V=0,K=function(){var e=h.setTokens({index:x+1,files:u,percent:50,name:M});setTimeout(function(){d.html(e),r._updateFileDetails(u),a(x+1)},100),r._raise("fileloaded",[B,U,x,o])};if(B){if(v>0)for(E=0;E0&&Z>r.maxFileSize)return S=r.msgSizeTooLarge.setTokens({name:M,size:T,maxSize:r.maxFileSize}),void y(S,B,U,x);if(null!==r.minFileSize&&Z<=t.getNum(r.minFileSize))return S=r.msgSizeTooSmall.setTokens({name:M,size:T,minSize:r.minFileSize}),void y(S,B,U,x);if(!t.isEmpty(g)&&t.isArray(g)){for(E=0;Eb)return r.addToStack(B),l.addClass("file-thumb-loading"),r._previewDefault(B,U),r._initFileActions(),r._updateFileDetails(u),void a(x+1);s.length&&void 0!==FileReader?(D=R(B.type,M),z=L(B.type,M),$=O(B.type,M),d.html(c.replace("{index}",x+1).replace("{files}",u)),l.addClass("file-thumb-loading"),o.onerror=function(e){r._errorHandler(e,M)},o.onload=function(i){var a,n,s,l,d,c,h,p,u=[];if(n={name:M,type:B.type},e.each(f,function(e,t){"object"!==e&&"other"!==e&&t(B.type,M)&&V++}),0===V){for(s=new Uint8Array(i.target.result),E=0;E0)for(t=0;t0?a.initialCaption:"",a.$caption.attr("title","").val(i),t.addCss(a.$container,"file-input-new"),a._validateDefaultPreview()),0===a.$container.find(t.FRAMES).length&&(a._initCaption()||a.$captionContainer.removeClass("icon-visible")),a._hideFileIcon(),a._raise("filecleared"),a.$captionContainer.focus(),a._setFileDropZoneTitle(),a.$element},reset:function(){if(this._raise("filereset"))return this._resetPreview(),this.$container.find(".fileinput-filename").text(""),t.addCss(this.$container,"file-input-new"),(this.getFrames().length||this.dropZoneEnabled)&&this.$container.removeClass("file-input-new"),this.clearStack(),this.formdata={},this._setFileDropZoneTitle(),this.$element},disable:function(){return this.isDisabled=!0,this._raise("filedisabled"),this.$element.attr("disabled","disabled"),this.$container.find(".kv-fileinput-caption").addClass("file-caption-disabled"),this.$container.find(".fileinput-remove, .fileinput-upload, .file-preview-frame button").attr("disabled",!0),t.addCss(this.$container.find(".btn-file"),"disabled"),this._initDragDrop(),this.$element},enable:function(){return this.isDisabled=!1,this._raise("fileenabled"),this.$element.removeAttr("disabled"),this.$container.find(".kv-fileinput-caption").removeClass("file-caption-disabled"),this.$container.find(".fileinput-remove, .fileinput-upload, .file-preview-frame button").removeAttr("disabled"),this.$container.find(".btn-file").removeClass("disabled"),this._initDragDrop(),this.$element},upload:function(){var i,a,r,n=this.getFileStack().length,s=!e.isEmptyObject(this._getExtraData());if(this.isAjaxUpload&&!this.isDisabled&&this._isFileSelectionValid(n))if(this._resetUpload(),0!==n||s)if(this.$progress.show(),this.uploadCount=0,this.uploadStatus={},this.uploadLog=[],this.lock(),this._setProgress(2),0===n&&s)this._uploadExtraOnly();else{if(r=this.filestack.length,this.hasInitData=!1,!this.uploadAsync)return this._uploadBatch(),this.$element;for(a=this._getOutData(),this._raise("filebatchpreupload",[a]),this.fileBatchCompleted=!1,this.uploadCache={content:[],config:[],tags:[],append:!0},this.uploadAsyncCount=this.getFileStack().length,i=0;i
    ',next:'',toggleheader:'',fullscreen:'',borderless:'',close:''},previewZoomButtonClasses:{prev:"btn btn-navigate",next:"btn btn-navigate",toggleheader:"btn btn-sm btn-kv btn-default btn-outline-secondary",fullscreen:"btn btn-sm btn-kv btn-default btn-outline-secondary",borderless:"btn btn-sm btn-kv btn-default btn-outline-secondary",close:"btn btn-sm btn-kv btn-default btn-outline-secondary"},previewTemplates:{},previewContentTemplates:{},preferIconicPreview:!1,preferIconicZoomPreview:!1,allowedPreviewTypes:void 0,allowedPreviewMimeTypes:null,allowedFileTypes:null,allowedFileExtensions:null,defaultPreviewContent:null,customLayoutTags:{},customPreviewTags:{},previewFileIcon:'',previewFileIconClass:"file-other-icon",previewFileIconSettings:{},previewFileExtSettings:{},buttonLabelClass:"hidden-xs",browseIcon:' ',browseClass:"btn btn-primary",removeIcon:'',removeClass:"btn btn-default btn-secondary",cancelIcon:'',cancelClass:"btn btn-default btn-secondary",uploadIcon:'',uploadClass:"btn btn-default btn-secondary",uploadUrl:null,uploadUrlThumb:null,uploadAsync:!0,uploadExtraData:{},zoomModalHeight:480,minImageWidth:null,minImageHeight:null,maxImageWidth:null,maxImageHeight:null,resizeImage:!1,resizePreference:"width",resizeQuality:.92,resizeDefaultImageType:"image/jpeg",resizeIfSizeMoreThan:0,minFileSize:0,maxFileSize:0,maxFilePreviewSize:25600,minFileCount:0,maxFileCount:0,validateInitialCount:!1,msgValidationErrorClass:"text-danger",msgValidationErrorIcon:' ',msgErrorClass:"file-error-message",progressThumbClass:"progress-bar bg-success progress-bar-success progress-bar-striped active",progressClass:"progress-bar bg-success progress-bar-success progress-bar-striped active",progressCompleteClass:"progress-bar bg-success progress-bar-success",progressErrorClass:"progress-bar bg-danger progress-bar-danger",progressUploadThreshold:99,previewFileType:"image",elCaptionContainer:null,elCaptionText:null,elPreviewContainer:null,elPreviewImage:null,elPreviewStatus:null,elErrorContainer:null,errorCloseButton:t.closeButton("kv-error-close"),slugCallback:null,dropZoneEnabled:!0,dropZoneTitleClass:"file-drop-zone-title",fileActionSettings:{},otherActionButtons:"",textEncoding:"UTF-8",ajaxSettings:{},ajaxDeleteSettings:{},showAjaxErrorDetails:!0,mergeAjaxCallbacks:!1,mergeAjaxDeleteCallbacks:!1,retryErrorUploads:!0,reversePreviewOrder:!1},e.fn.fileinputLocales.en={fileSingle:"file",filePlural:"files",browseLabel:"Browse …",removeLabel:"Remove",removeTitle:"Clear selected files",cancelLabel:"Cancel",cancelTitle:"Abort ongoing upload",uploadLabel:"Upload",uploadTitle:"Upload selected files",msgNo:"No",msgNoFilesSelected:"No files selected",msgCancelled:"Cancelled",msgPlaceholder:"Select {files}...",msgZoomModalHeading:"Detailed Preview",msgFileRequired:"You must select a file to upload.",msgSizeTooSmall:'File "{name}" ({size} KB) is too small and must be larger than {minSize} KB.',msgSizeTooLarge:'File "{name}" ({size} KB) exceeds maximum allowed upload size of {maxSize} KB.',msgFilesTooLess:"You must select at least {n} {files} to upload.",msgFilesTooMany:"Number of files selected for upload ({n}) exceeds maximum allowed limit of {m}.",msgFileNotFound:'File "{name}" not found!',msgFileSecured:'Security restrictions prevent reading the file "{name}".',msgFileNotReadable:'File "{name}" is not readable.',msgFilePreviewAborted:'File preview aborted for "{name}".',msgFilePreviewError:'An error occurred while reading the file "{name}".',msgInvalidFileName:'Invalid or unsupported characters in file name "{name}".',msgInvalidFileType:'Invalid type for file "{name}". Only "{types}" files are supported.',msgInvalidFileExtension:'Invalid extension for file "{name}". Only "{extensions}" files are supported.',msgFileTypes:{image:"image",html:"HTML",text:"text",video:"video",audio:"audio",flash:"flash",pdf:"PDF",object:"object"},msgUploadAborted:"The file upload was aborted",msgUploadThreshold:"Processing...",msgUploadBegin:"Initializing...",msgUploadEnd:"Done",msgUploadEmpty:"No valid data available for upload.",msgUploadError:"Error",msgValidationError:"Validation Error",msgLoading:"Loading file {index} of {files} …",msgProgress:"Loading file {index} of {files} - {name} - {percent}% completed.",msgSelected:"{n} {files} selected",msgFoldersNotAllowed:"Drag & drop files only! {n} folder(s) dropped were skipped.",msgImageWidthSmall:'Width of image file "{name}" must be at least {size} px.',msgImageHeightSmall:'Height of image file "{name}" must be at least {size} px.',msgImageWidthLarge:'Width of image file "{name}" cannot exceed {size} px.',msgImageHeightLarge:'Height of image file "{name}" cannot exceed {size} px.',msgImageResizeError:"Could not get the image dimensions to resize.",msgImageResizeException:"Error while resizing the image.
    {errors}
    ",msgAjaxError:"Something went wrong with the {operation} operation. Please try again later!",msgAjaxProgressError:"{operation} failed",ajaxOperations:{deleteThumb:"file delete",uploadThumb:"file upload",uploadBatch:"batch file upload",uploadExtra:"form data upload"},dropZoneTitle:"Drag & drop files here …",dropZoneClickTitle:"
    (or click to select {files})",previewZoomButtonTitles:{prev:"View previous file",next:"View next file",toggleheader:"Toggle header",fullscreen:"Toggle full screen",borderless:"Toggle borderless mode",close:"Close detailed preview"},usePdfRenderer:function(){return!!navigator.userAgent.match(/(iPod|iPhone|iPad|Android)/i)},pdfRendererUrl:"",pdfRendererTemplate:''},e.fn.fileinput.Constructor=i,e(document).ready(function(){var t=e("input.file[type=file]");t.length&&t.fileinput()})}); \ No newline at end of file +!function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&module.exports?module.exports=e(require("jquery")):e(window.jQuery)}(function(e){"use strict";var t,i;e.fn.fileinputLocales={},e.fn.fileinputThemes={},String.prototype.setTokens=function(e){var t,i,a=this.toString();for(t in e)e.hasOwnProperty(t)&&(i=new RegExp("{"+t+"}","g"),a=a.replace(i,e[t]));return a},t={FRAMES:".kv-preview-thumb",SORT_CSS:"file-sortable",OBJECT_PARAMS:'\n\n\n\n\n\n',DEFAULT_PREVIEW:'
    \n{previewFileIcon}\n
    ',MODAL_ID:"kvFileinputModal",MODAL_EVENTS:["show","shown","hide","hidden","loaded"],objUrl:window.URL||window.webkitURL,compare:function(e,t,i){return void 0!==e&&(i?e===t:e.match(t))},isIE:function(e){if("Microsoft Internet Explorer"!==navigator.appName)return!1;if(10===e)return new RegExp("msie\\s"+e,"i").test(navigator.userAgent);var t,i=document.createElement("div");return i.innerHTML="\x3c!--[if IE "+e+"]> 0&&e[0].webkitGetAsEntry())for(t=0;t=0?atob(e.split(",")[1]):decodeURIComponent(e.split(",")[1]),a=new ArrayBuffer(i.length),r=new Uint8Array(a),n=0;n>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:s+=String.fromCharCode(i);break;case 12:case 13:a=n[o++],s+=String.fromCharCode((31&i)<<6|63&a);break;case 14:a=n[o++],r=n[o++],s+=String.fromCharCode((15&i)<<12|(63&a)<<6|(63&r)<<0)}return s},isHtml:function(e){var t=document.createElement("div");t.innerHTML=e;for(var i=t.childNodes,a=i.length;a--;)if(1===i[a].nodeType)return!0;return!1},isSvg:function(e){return e.match(/^\s*<\?xml/i)&&(e.match(//g,">").replace(/"/g,""").replace(/'/g,"'")},replaceTags:function(t,i){var a=t;return i?(e.each(i,function(e,t){"function"==typeof t&&(t=t()),a=a.split(e).join(t)}),a):a},cleanMemory:function(e){var i=e.is("img")?e.attr("src"):e.find("source").attr("src");t.objUrl.revokeObjectURL(i)},findFileName:function(e){var t=e.lastIndexOf("/");return-1===t&&(t=e.lastIndexOf("\\")),e.split(e.substring(t,t+1)).pop()},checkFullScreen:function(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement},toggleFullScreen:function(e){var i=document,a=i.documentElement;a&&e&&!t.checkFullScreen()?a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):i.exitFullscreen?i.exitFullscreen():i.msExitFullscreen?i.msExitFullscreen():i.mozCancelFullScreen?i.mozCancelFullScreen():i.webkitExitFullscreen&&i.webkitExitFullscreen()},moveArray:function(t,i,a,r){var n=e.extend(!0,[],t);if(r&&n.reverse(),a>=n.length)for(var s=a-n.length;1+s--;)n.push(void 0);return n.splice(a,0,n.splice(i,1)[0]),r&&n.reverse(),n},cleanZoomCache:function(e){var t=e.closest(".kv-zoom-cache-theme");t.length||(t=e.closest(".kv-zoom-cache")),t.remove()},closeButton:function(e){return''},getRotation:function(e){switch(e){case 2:return"rotateY(180deg)";case 3:return"rotate(180deg)";case 4:return"rotate(180deg) rotateY(180deg)";case 5:return"rotate(270deg) rotateY(180deg)";case 6:return"rotate(90deg)";case 7:return"rotate(90deg) rotateY(180deg)";case 8:return"rotate(270deg)";default:return""}},setTransform:function(e,t){e&&(e.style.transform=t,e.style.webkitTransform=t,e.style["-moz-transform"]=t,e.style["-ms-transform"]=t,e.style["-o-transform"]=t)},setImageOrientation:function(e,i,a){if(e&&e.length){var r="load.fileinputimageorient";e.off(r).on(r,function(){var r=e.get(0),n=i&&i.length?i.get(0):null,s=r.offsetHeight,o=r.offsetWidth,l=t.getRotation(a);if(e.data("orientation",a),n&&i.data("orientation",a),a<5)return t.setTransform(r,l),void t.setTransform(n,l);var d=Math.atan(o/s),c=Math.sqrt(Math.pow(s,2)+Math.pow(o,2)),h=c?s/Math.cos(Math.PI/2+d)/c:1,p=" scale("+Math.abs(h)+")";t.setTransform(r,l+p),t.setTransform(n,l+p)})}}},(i=function(i,a){this.$element=e(i),this.$parent=this.$element.parent(),this._validate()&&(this.isPreviewable=t.hasFileAPISupport(),this.isIE9=t.isIE(9),this.isIE10=t.isIE(10),(this.isPreviewable||this.isIE9)&&(this._init(a),this._listen()),this.$element.removeClass("file-loading"))}).prototype={constructor:i,_cleanup:function(){this.reader=null,this.formdata={},this.uploadCount=0,this.uploadStatus={},this.uploadLog=[],this.uploadAsyncCount=0,this.loadedImages=[],this.totalImagesCount=0,this.ajaxRequests=[],this.clearStack(),this.fileBatchCompleted=!0,this.isPreviewable||(this.showPreview=!1),this.isError=!1,this.ajaxAborted=!1,this.cancelling=!1},_init:function(i,a){var r,n,s,o,l=this,d=l.$element;l.options=i,e.each(i,function(e,i){switch(e){case"minFileCount":case"maxFileCount":case"minFileSize":case"maxFileSize":case"maxFilePreviewSize":case"resizeImageQuality":case"resizeIfSizeMoreThan":case"progressUploadThreshold":case"initialPreviewCount":case"zoomModalHeight":case"minImageHeight":case"maxImageHeight":case"minImageWidth":case"maxImageWidth":l[e]=t.getNum(i);break;default:l[e]=i}}),l.rtl&&(o=l.previewZoomButtonIcons.prev,l.previewZoomButtonIcons.prev=l.previewZoomButtonIcons.next,l.previewZoomButtonIcons.next=o),a||l._cleanup(),l.$form=d.closest("form"),l._initTemplateDefaults(),l.uploadFileAttr=t.isEmpty(d.attr("name"))?"file_data":d.attr("name"),s=l._getLayoutTemplate("progress"),l.progressTemplate=s.replace("{class}",l.progressClass),l.progressCompleteTemplate=s.replace("{class}",l.progressCompleteClass),l.progressErrorTemplate=s.replace("{class}",l.progressErrorClass),l.isDisabled=d.attr("disabled")||d.attr("readonly"),l.isDisabled&&d.attr("disabled",!0),l.isClickable=l.browseOnZoneClick&&l.showPreview&&(l.dropZoneEnabled||!t.isEmpty(l.defaultPreviewContent)),l.isAjaxUpload=t.hasFileUploadSupport()&&!t.isEmpty(l.uploadUrl),l.dropZoneEnabled=t.hasDragDropSupport()&&l.dropZoneEnabled,l.isAjaxUpload||(l.dropZoneEnabled=l.dropZoneEnabled&&t.canAssignFilesToInput()),l.slug="function"==typeof i.slugCallback?i.slugCallback:l._slugDefault,l.mainTemplate=l.showCaption?l._getLayoutTemplate("main1"):l._getLayoutTemplate("main2"),l.captionTemplate=l._getLayoutTemplate("caption"),l.previewGenericTemplate=l._getPreviewTemplate("generic"),!l.imageCanvas&&l.resizeImage&&(l.maxImageWidth||l.maxImageHeight)&&(l.imageCanvas=document.createElement("canvas"),l.imageCanvasContext=l.imageCanvas.getContext("2d")),t.isEmpty(d.attr("id"))&&d.attr("id",t.uniqId()),l.namespace=".fileinput_"+d.attr("id").replace(/-/g,"_"),void 0===l.$container?l.$container=l._createContainer():l._refreshContainer(),n=l.$container,l.$dropZone=n.find(".file-drop-zone"),l.$progress=n.find(".kv-upload-progress"),l.$btnUpload=n.find(".fileinput-upload"),l.$captionContainer=t.getElement(i,"elCaptionContainer",n.find(".file-caption")),l.$caption=t.getElement(i,"elCaptionText",n.find(".file-caption-name")),t.isEmpty(l.msgPlaceholder)||(r=d.attr("multiple")?l.filePlural:l.fileSingle,l.$caption.attr("placeholder",l.msgPlaceholder.replace("{files}",r))),l.$captionIcon=l.$captionContainer.find(".file-caption-icon"),l.$previewContainer=t.getElement(i,"elPreviewContainer",n.find(".file-preview")),l.$preview=t.getElement(i,"elPreviewImage",n.find(".file-preview-thumbnails")),l.$previewStatus=t.getElement(i,"elPreviewStatus",n.find(".file-preview-status")),l.$errorContainer=t.getElement(i,"elErrorContainer",l.$previewContainer.find(".kv-fileinput-error")),l._validateDisabled(),t.isEmpty(l.msgErrorClass)||t.addCss(l.$errorContainer,l.msgErrorClass),a?l._errorsExist()||l.$errorContainer.hide():(l.$errorContainer.hide(),l.previewInitId="preview-"+t.uniqId(),l._initPreviewCache(),l._initPreview(!0),l._initPreviewActions(),l.$parent.hasClass("file-loading")&&(l.$container.insertBefore(l.$parent),l.$parent.remove())),l._setFileDropZoneTitle(),d.attr("disabled")&&l.disable(),l._initZoom(),l.hideThumbnailContent&&t.addCss(l.$preview,"hide-content")},_initTemplateDefaults:function(){var i,a,r,n,s,o,l,d,c,h=this;i=t.closeButton("fileinput-remove"),a='',r='
    \n",s='\x3c!--suppress ALL --\x3e\n",l='\n',o='\n\n'+t.OBJECT_PARAMS+" "+t.DEFAULT_PREVIEW+"\n\n",d='
    \n'+t.DEFAULT_PREVIEW+"\n
    \n",c={width:"100%",height:"100%","min-height":"480px"},h._isPdfRendered()&&(l=h.pdfRendererTemplate.replace("{renderer}",h.pdfRendererUrl)),h.defaults={layoutTemplates:{main1:'{preview}\n
    \n
    \n {caption}\n
    \n {remove}\n {cancel}\n {upload}\n {browse}\n
    \n
    ',main2:'{preview}\n
    \n
    \n{remove}\n{cancel}\n{upload}\n{browse}\n',preview:'
    \n {close}
    \n
    \n
    \n
    \n
    \n
    \n
    ',close:i,fileIcon:'',caption:'
    \n \n \n
    ',modalMain:a,modal:'\n',progress:'
    \n
    \n {status}\n
    \n
    ',size:" ({sizeText})",footer:'',indicator:'
    {indicator}
    ',actions:'
    \n \n
    \n{drag}\n
    ',actionDelete:'\n',actionUpload:'',actionDownload:'{downloadIcon}',actionZoom:'',actionDrag:'{dragIcon}',btnDefault:'',btnLink:'{icon} {label}',btnBrowse:'
    {icon} {label}
    ',zoomCache:''},previewMarkupTags:{tagBefore1:'
    \n',tagBefore2:'
    \n',tagAfter:"
    {footer}\n
    \n"},previewContentTemplates:{generic:"{content}\n",html:'
    {data}
    \n',image:'{caption}\n',text:'\n',office:'',gdocs:'',video:n,audio:s,flash:'\n',object:o,pdf:l,other:d},allowedPreviewTypes:["image","html","text","video","audio","flash","pdf","object"],previewTemplates:{},previewSettings:{image:{width:"auto",height:"auto","max-width":"100%","max-height":"100%"},html:{width:"213px",height:"160px"},text:{width:"213px",height:"160px"},office:{width:"213px",height:"160px"},gdocs:{width:"213px",height:"160px"},video:{width:"213px",height:"160px"},audio:{width:"100%",height:"30px"},flash:{width:"213px",height:"160px"},object:{width:"213px",height:"160px"},pdf:{width:"100%",height:"160px"},other:{width:"213px",height:"160px"}},previewSettingsSmall:{image:{width:"auto",height:"auto","max-width":"100%","max-height":"100%"},html:{width:"100%",height:"160px"},text:{width:"100%",height:"160px"},office:{width:"100%",height:"160px"},gdocs:{width:"100%",height:"160px"},video:{width:"100%",height:"auto"},audio:{width:"100%",height:"30px"},flash:{width:"100%",height:"auto"},object:{width:"100%",height:"auto"},pdf:{width:"100%",height:"160px"},other:{width:"100%",height:"160px"}},previewZoomSettings:{image:{width:"auto",height:"auto","max-width":"100%","max-height":"100%"},html:c,text:c,office:{width:"100%",height:"100%","max-width":"100%","min-height":"480px"},gdocs:{width:"100%",height:"100%","max-width":"100%","min-height":"480px"},video:{width:"auto",height:"100%","max-width":"100%"},audio:{width:"100%",height:"30px"},flash:{width:"auto",height:"480px"},object:{width:"auto",height:"100%","max-width":"100%","min-height":"480px"},pdf:c,other:{width:"auto",height:"100%","min-height":"480px"}},fileTypeSettings:{image:function(e,i){return t.compare(e,"image.*")&&!t.compare(e,/(tiff?|wmf)$/i)||t.compare(i,/\.(gif|png|jpe?g)$/i)},html:function(e,i){return t.compare(e,"text/html")||t.compare(i,/\.(htm|html)$/i)},office:function(e,i){return t.compare(e,/(word|excel|powerpoint|office)$/i)||t.compare(i,/\.(docx?|xlsx?|pptx?|pps|potx?)$/i)},gdocs:function(e,i){return t.compare(e,/(word|excel|powerpoint|office|iwork-pages|tiff?)$/i)||t.compare(i,/\.(docx?|xlsx?|pptx?|pps|potx?|rtf|ods|odt|pages|ai|dxf|ttf|tiff?|wmf|e?ps)$/i)},text:function(e,i){return t.compare(e,"text.*")||t.compare(i,/\.(xml|javascript)$/i)||t.compare(i,/\.(txt|md|csv|nfo|ini|json|php|js|css)$/i)},video:function(e,i){return t.compare(e,"video.*")&&(t.compare(e,/(ogg|mp4|mp?g|mov|webm|3gp)$/i)||t.compare(i,/\.(og?|mp4|webm|mp?g|mov|3gp)$/i))},audio:function(e,i){return t.compare(e,"audio.*")&&(t.compare(i,/(ogg|mp3|mp?g|wav)$/i)||t.compare(i,/\.(og?|mp3|mp?g|wav)$/i))},flash:function(e,i){return t.compare(e,"application/x-shockwave-flash",!0)||t.compare(i,/\.(swf)$/i)},pdf:function(e,i){return t.compare(e,"application/pdf",!0)||t.compare(i,/\.(pdf)$/i)},object:function(){return!0},other:function(){return!0}},fileActionSettings:{showRemove:!0,showUpload:!0,showDownload:!0,showZoom:!0,showDrag:!0,removeIcon:'',removeClass:"btn btn-sm btn-kv btn-default btn-outline-secondary",removeErrorClass:"btn btn-sm btn-kv btn-danger",removeTitle:"Remove file",uploadIcon:'',uploadClass:"btn btn-sm btn-kv btn-default btn-outline-secondary",uploadTitle:"Upload file",uploadRetryIcon:'',uploadRetryTitle:"Retry upload",downloadIcon:'',downloadClass:"btn btn-sm btn-kv btn-default btn-outline-secondary",downloadTitle:"Download file",zoomIcon:'',zoomClass:"btn btn-sm btn-kv btn-default btn-outline-secondary",zoomTitle:"View Details",dragIcon:'',dragClass:"text-info",dragTitle:"Move / Rearrange",dragSettings:{},indicatorNew:'',indicatorSuccess:'',indicatorError:'',indicatorLoading:'',indicatorNewTitle:"Not uploaded yet",indicatorSuccessTitle:"Uploaded",indicatorErrorTitle:"Upload Error",indicatorLoadingTitle:"Uploading ..."}},e.each(h.defaults,function(t,i){"allowedPreviewTypes"!==t?h[t]=e.extend(!0,{},i,h[t]):void 0===h.allowedPreviewTypes&&(h.allowedPreviewTypes=i)}),h._initPreviewTemplates()},_initPreviewTemplates:function(){var i,a=this,r=a.previewMarkupTags,n=r.tagAfter;e.each(a.previewContentTemplates,function(e,s){t.isEmpty(a.previewTemplates[e])&&(i=r.tagBefore2,"generic"!==e&&"image"!==e&&"html"!==e&&"text"!==e||(i=r.tagBefore1),a._isPdfRendered()&&"pdf"===e&&(i=i.replace("kv-file-content","kv-file-content kv-pdf-rendered")),a.previewTemplates[e]=i+s+n)})},_initPreviewCache:function(){var i=this;i.previewCache={data:{},init:function(){var e=i.initialPreview;e.length>0&&!t.isArray(e)&&(e=e.split(i.initialPreviewDelimiter)),i.previewCache.data={content:e,config:i.initialPreviewConfig,tags:i.initialPreviewThumbTags}},count:function(){return i.previewCache.data&&i.previewCache.data.content?i.previewCache.data.content.length:0},get:function(a,r){var n,s,o,l,d,c,h,p="init_"+a,u=i.previewCache.data,f=u.config[a],m=u.content[a],g=i.previewInitId+"-"+p,v=t.ifSet("previewAsData",f,i.initialPreviewAsData),w=function(e,a,r,n,s,o,l,d,c){return d=" file-preview-initial "+t.SORT_CSS+(d?" "+d:""),i._generatePreviewTemplate(e,a,r,n,s,!1,null,d,o,l,c)};return m?(r=void 0===r||r,o=t.ifSet("type",f,i.initialPreviewFileType||"generic"),d=t.ifSet("filename",f,t.ifSet("caption",f)),c=t.ifSet("filetype",f,o),l=i.previewCache.footer(a,r,f&&f.size||null),h=t.ifSet("frameClass",f),n=v?w(o,m,d,c,g,l,p,h):w("generic",m,d,c,g,l,p,h,o).setTokens({content:u.content[a]}),u.tags.length&&u.tags[a]&&(n=t.replaceTags(n,u.tags[a])),t.isEmpty(f)||t.isEmpty(f.frameAttr)||((s=e(document.createElement("div")).html(n)).find(".file-preview-initial").attr(f.frameAttr),n=s.html(),s.remove()),n):""},add:function(e,a,r,n){var s,o=i.previewCache.data;return t.isArray(e)||(e=e.split(i.initialPreviewDelimiter)),n?(s=o.content.push(e)-1,o.config[s]=a,o.tags[s]=r):(s=e.length-1,o.content=e,o.config=a,o.tags=r),i.previewCache.data=o,s},set:function(e,a,r,n){var s,o=i.previewCache.data;if(e&&e.length&&(t.isArray(e)||(e=e.split(i.initialPreviewDelimiter)),e.filter(function(e){return null!==e}).length)){if(void 0===o.content&&(o.content=[]),void 0===o.config&&(o.config=[]),void 0===o.tags&&(o.tags=[]),n){for(s=0;s'+e+"":"
  • "+e+"
  • ";return 0===a.find("ul").length?this._addError("
      "+n+"
    "):a.find("ul").append(n),a.fadeIn(800),this._raise(r,[t,e]),this._setValidationError("file-input-new"),!0},_showError:function(e,t,i){var a=this.$errorContainer,r=i||"fileerror";return(t=t||{}).reader=this.reader,this._addError(e),a.fadeIn(800),this._raise(r,[t,e]),this.isAjaxUpload||this._clearFileInput(),this._setValidationError("file-input-new"),this.$btnUpload.attr("disabled",!0),!0},_noFilesError:function(e){var t=this.minFileCount>1?this.filePlural:this.fileSingle,i=this.msgFilesTooLess.replace("{n}",this.minFileCount).replace("{files}",t),a=this.$errorContainer;this._addError(i),this.isError=!0,this._updateFileDetails(0),a.fadeIn(800),this._raise("fileerror",[e,i]),this._clearFileInput(),this._setValidationError()},_parseError:function(t,i,a,r){var n,s=e.trim(a+""),o=void 0!==i.responseJSON&&void 0!==i.responseJSON.error?i.responseJSON.error:i.responseText;return this.cancelling&&this.msgUploadAborted&&(s=this.msgUploadAborted),this.showAjaxErrorDetails&&o&&(n=(o=e.trim(o.replace(/\n\s*\n/g,"\n"))).length?"
    "+o+"
    ":"",s+=s?n:o),s||(s=this.msgAjaxError.replace("{operation}",t)),this.cancelling=!1,r?""+r+": "+s:s},_parseFileType:function(e,i){var a,r,n,s=this.allowedPreviewTypes||[];if("application/text-plain"===e)return"text";for(n=0;n-1&&(i=t.split(".").pop(),a.previewFileIconSettings&&(r=a.previewFileIconSettings[i]||a.previewFileIconSettings[i.toLowerCase()]||null),a.previewFileExtSettings&&e.each(a.previewFileExtSettings,function(e,t){a.previewFileIconSettings[e]&&t(i)&&(r=a.previewFileIconSettings[e])})),r},_parseFilePreviewIcon:function(e,t){var i=this._getPreviewIcon(t)||this.previewFileIcon,a=e;return a.indexOf("{previewFileIcon}")>-1&&(a=a.setTokens({previewFileIconClass:this.previewFileIconClass,previewFileIcon:i})),a},_raise:function(t,i){var a=e.Event(t);if(void 0!==i?this.$element.trigger(a,i):this.$element.trigger(a),a.isDefaultPrevented()||!1===a.result)return!1;switch(t){case"filebatchuploadcomplete":case"filebatchuploadsuccess":case"fileuploaded":case"fileclear":case"filecleared":case"filereset":case"fileerror":case"filefoldererror":case"fileuploaderror":case"filebatchuploaderror":case"filedeleteerror":case"filecustomerror":case"filesuccessremove":break;default:this.ajaxAborted||(this.ajaxAborted=a.result)}return!0},_listenFullScreen:function(e){var t,i,a=this.$modal;a&&a.length&&(t=a&&a.find(".btn-fullscreen"),i=a&&a.find(".btn-borderless"),t.length&&i.length&&(t.removeClass("active").attr("aria-pressed","false"),i.removeClass("active").attr("aria-pressed","false"),e?t.addClass("active").attr("aria-pressed","true"):i.addClass("active").attr("aria-pressed","true"),a.hasClass("file-zoom-fullscreen")?this._maximizeZoomDialog():e?this._maximizeZoomDialog():i.removeClass("active").attr("aria-pressed","false")))},_listen:function(){var i=this,a=i.$element,r=i.$form,n=i.$container;i._handler(a,"click",function(e){a.hasClass("file-no-browse")&&(a.data("zoneClicked")?a.data("zoneClicked",!1):e.preventDefault())}),i._handler(a,"change",e.proxy(i._change,i)),i.showBrowse&&i._handler(i.$btnFile,"click",e.proxy(i._browse,i)),i._handler(n.find(".fileinput-remove:not([disabled])"),"click",e.proxy(i.clear,i)),i._handler(n.find(".fileinput-cancel"),"click",e.proxy(i.cancel,i)),i._initDragDrop(),i._handler(r,"reset",e.proxy(i.clear,i)),i.isAjaxUpload||i._handler(r,"submit",e.proxy(i._submitForm,i)),i._handler(i.$container.find(".fileinput-upload"),"click",e.proxy(i._uploadClick,i)),i._handler(e(window),"resize",function(){i._listenFullScreen(screen.width===window.innerWidth&&screen.height===window.innerHeight)}),i._handler(e(document),"webkitfullscreenchange mozfullscreenchange fullscreenchange MSFullscreenChange",function(){i._listenFullScreen(t.checkFullScreen())}),i._autoFitContent(),i._initClickable(),i._refreshPreview()},_autoFitContent:function(){var t,i=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,a=this,r=i<400?a.previewSettingsSmall||a.defaults.previewSettingsSmall:a.previewSettings||a.defaults.previewSettings;e.each(r,function(e,i){t=".file-preview-frame .file-preview-"+e,a.$preview.find(t+".kv-preview-data,"+t+" .kv-preview-data").css(i)})},_scanDroppedItems:function(e,t,i){i=i||"";var a,r,n,s=this,o=function(e){s._log("Error scanning dropped files!"),s._log(e)};e.isFile?e.file(function(e){t.push(e)},o):e.isDirectory&&(r=e.createReader(),(n=function(){r.readEntries(function(r){if(r&&r.length>0){for(a=0;a-1;if(this._zoneDragDropInit(i),this.isDisabled||!a)return i.originalEvent.dataTransfer.effectAllowed="none",void(i.originalEvent.dataTransfer.dropEffect="none");t.addCss(this.$dropZone,"file-highlighted")},_zoneDragLeave:function(e){this._zoneDragDropInit(e),this.isDisabled||this.$dropZone.removeClass("file-highlighted")},_zoneDrop:function(e){var i,a=this,r=a.$element,n=e.originalEvent.dataTransfer,s=n.files,o=n.items,l=t.getDragDropFolders(o),d=function(){a.isAjaxUpload?a._change(e,s):(a.changeTriggered=!0,r.get(0).files=s,setTimeout(function(){a.changeTriggered=!1,r.trigger("change"+a.namespace)},10)),a.$dropZone.removeClass("file-highlighted")};if(e.preventDefault(),!a.isDisabled&&!t.isEmpty(s))if(l>0){if(!a.isAjaxUpload)return void a._showFolderError(l);for(s=[],i=0;i
    ").html(o).text()).html(o),l=f.find(".kv-zoom-body"),f.removeClass("kv-single-content"),a?(h=l.addClass("file-thumb-loading").clone().insertAfter(l),l.html(s).hide(),h.fadeOut("fast",function(){l.fadeIn("fast",function(){l.removeClass("file-thumb-loading")}),h.remove()})):l.html(s),(c=p.previewZoomSettings[n])&&(d=l.find(".kv-preview-data"),t.addCss(d,"file-zoom-detail"),e.each(c,function(e,t){d.css(e,t),(d.attr("width")&&"width"===e||d.attr("height")&&"height"===e)&&d.removeAttr(e)})),f.data("previewId",u),p._handler(m,"click",function(){p._zoomSlideShow("prev",u)}),p._handler(g,"click",function(){p._zoomSlideShow("next",u)}),p._handler(v,"click",function(){p._resizeZoomDialog(!0)}),p._handler(w,"click",function(){p._resizeZoomDialog(!1)}),p._handler(_,"click",function(){var e,t=f.find(".modal-header"),i=f.find(".modal-body .floating-buttons"),a=t.find(".kv-zoom-actions"),r=function(e){var i=p.$modal.find(".kv-zoom-body"),a=p.zoomModalHeight;f.hasClass("file-zoom-fullscreen")&&(a=i.outerHeight(!0),e||(a-=t.outerHeight(!0))),i.css("height",e?a+e:a)};t.is(":visible")?(e=t.outerHeight(!0),t.slideUp("slow",function(){a.find(".btn").appendTo(i),r(e)})):(i.find(".btn").appendTo(a),t.slideDown("slow",function(){r()})),f.focus()}),p._handler(f,"keydown",function(e){var t=e.which||e.keyCode;37!==t||m.attr("disabled")||p._zoomSlideShow("prev",u),39!==t||g.attr("disabled")||p._zoomSlideShow("next",u)})},_zoomPreview:function(e){var i,a=this.$modal;if(!e.length)throw"Cannot zoom to detailed preview!";t.initModal(a),a.html(this._getModalContent()),i=e.closest(t.FRAMES),this._setZoomContent(i),a.modal("show"),this._initZoomButtons()},_zoomSlideShow:function(t,i){var a,r,n,s=this.$modal.find(".kv-zoom-actions .btn-"+t),o=this.getFrames().toArray(),l=o.length;if(!s.attr("disabled")){for(r=0;r=l||!o[n]||((a=e(o[n])).length&&this._setZoomContent(a,!0),this._initZoomButtons(),this._raise("filezoom"+t,{previewId:i,modal:this.$modal}))}},_initZoomButton:function(){var t=this;t.$preview.find(".kv-file-zoom").each(function(){var i=e(this);t._handler(i,"click",function(){t._zoomPreview(i)})})},_inputFileCount:function(){return this.$element.get(0).files.length},_refreshPreview:function(){var e;this._inputFileCount()&&this.showPreview&&this.isPreviewable&&(this.isAjaxUpload?(e=this.getFileStack(),this.filestack=[],e.length?this._clearFileInput():e=this.$element.get(0).files):e=this.$element.get(0).files,e&&e.length&&(this.readFiles(e),this._setFileDropZoneTitle()))},_clearObjects:function(t){t.find("video audio").each(function(){this.pause(),e(this).remove()}),t.find("img object div").each(function(){e(this).remove()})},_clearFileInput:function(){var t,i,a,r=this.$element;this._inputFileCount()&&(t=r.closest("form"),i=e(document.createElement("form")),a=e(document.createElement("div")),r.before(a),t.length?t.after(i):a.after(i),i.append(r).trigger("reset"),a.before(r).remove(),i.remove())},_resetUpload:function(){this.uploadCache={content:[],config:[],tags:[],append:!0},this.uploadCount=0,this.uploadStatus={},this.uploadLog=[],this.uploadAsyncCount=0,this.loadedImages=[],this.totalImagesCount=0,this.$btnUpload.removeAttr("disabled"),this._setProgress(0),this.$progress.hide(),this._resetErrors(!1),this.ajaxAborted=!1,this.ajaxRequests=[],this._resetCanvas(),this.cacheInitialPreview={},this.overwriteInitial&&(this.initialPreview=[],this.initialPreviewConfig=[],this.initialPreviewThumbTags=[],this.previewCache.data={content:[],config:[],tags:[]})},_resetCanvas:function(){this.canvas&&this.imageCanvasContext&&this.imageCanvasContext.clearRect(0,0,this.canvas.width,this.canvas.height)},_hasInitialPreview:function(){return!this.overwriteInitial&&this.previewCache.count()},_resetPreview:function(){var e,t;this.previewCache.count()?(e=this.previewCache.out(),this._setPreviewContent(e.content),this._setInitThumbAttr(),t=this.initialCaption?this.initialCaption:e.caption,this._setCaption(t)):(this._clearPreview(),this._initCaption()),this.showPreview&&(this._initZoom(),this._initSortable())},_clearDefaultPreview:function(){this.$preview.find(".file-default-preview").remove()},_validateDefaultPreview:function(){this.showPreview&&!t.isEmpty(this.defaultPreviewContent)&&(this._setPreviewContent('
    '+this.defaultPreviewContent+"
    "),this.$container.removeClass("file-input-new"),this._initClickable())},_resetPreviewThumbs:function(e){var t;if(e)return this._clearPreview(),void this.clearStack();this._hasInitialPreview()?(t=this.previewCache.out(),this._setPreviewContent(t.content),this._setInitThumbAttr(),this._setCaption(t.caption),this._initPreviewActions()):this._clearPreview()},_getLayoutTemplate:function(e){var i=this.layoutTemplates[e];return t.isEmpty(this.customLayoutTags)?i:t.replaceTags(i,this.customLayoutTags)},_getPreviewTemplate:function(e){var i=this.previewTemplates[e];return t.isEmpty(this.customPreviewTags)?i:t.replaceTags(i,this.customPreviewTags)},_getOutData:function(e,t,i){return e=e||{},t=t||{},i=i||this.filestack.slice(0)||{},{form:this.formdata,files:i,filenames:this.filenames,filescount:this.getFilesCount(),extra:this._getExtraData(),response:t,reader:this.reader,jqXHR:e}},_getMsgSelected:function(e){var t=1===e?this.fileSingle:this.filePlural;return e>0?this.msgSelected.replace("{n}",e).replace("{files}",t):this.msgNoFilesSelected},_getFrame:function(t){var i=e("#"+t);return i.length?i:(this._log('Invalid thumb frame with id: "'+t+'".'),null)},_getThumbs:function(e){return e=e||"",this.getFrames(":not(.file-preview-initial)"+e)},_getExtraData:function(e,t){var i=this.uploadExtraData;return"function"==typeof this.uploadExtraData&&(i=this.uploadExtraData(e,t)),i},_initXhr:function(e,t,i){var a=this;return e.upload&&e.upload.addEventListener("progress",function(e){var r=0,n=e.total,s=e.loaded||e.position;e.lengthComputable&&(r=Math.floor(s/n*100)),t?a._setAsyncUploadStatus(t,r,i):a._setProgress(r)},!1),e},_initAjaxSettings:function(){this._ajaxSettings=e.extend(!0,{},this.ajaxSettings),this._ajaxDeleteSettings=e.extend(!0,{},this.ajaxDeleteSettings)},_mergeAjaxCallback:function(e,t,i){var a,r=this._ajaxSettings,n=this.mergeAjaxCallbacks;"delete"===i&&(r=this._ajaxDeleteSettings,n=this.mergeAjaxDeleteCallbacks),a=r[e],r[e]=n&&"function"==typeof a?"before"===n?function(){a.apply(this,arguments),t.apply(this,arguments)}:function(){t.apply(this,arguments),a.apply(this,arguments)}:t},_ajaxSubmit:function(t,i,a,r,n,s){var o,l=this;l._raise("filepreajax",[n,s])&&(l._uploadExtra(n,s),l._initAjaxSettings(),l._mergeAjaxCallback("beforeSend",t),l._mergeAjaxCallback("success",i),l._mergeAjaxCallback("complete",a),l._mergeAjaxCallback("error",r),o=e.extend(!0,{},{xhr:function(){var t=e.ajaxSettings.xhr();return l._initXhr(t,n,l.getFileStack().length)},url:s&&l.uploadUrlThumb?l.uploadUrlThumb:l.uploadUrl,type:"POST",dataType:"json",data:l.formdata,cache:!1,processData:!1,contentType:!1},l._ajaxSettings),l.ajaxRequests.push(e.ajax(o)))},_mergeArray:function(e,i){var a=t.cleanArray(this[e]),r=t.cleanArray(i);this[e]=a.concat(r)},_initUploadSuccess:function(i,a,r){var n,s,o,l,d,c,h,p,u,f=this;f.showPreview&&"object"==typeof i&&!e.isEmptyObject(i)&&void 0!==i.initialPreview&&i.initialPreview.length>0&&(f.hasInitData=!0,c=i.initialPreview||[],h=i.initialPreviewConfig||[],p=i.initialPreviewThumbTags||[],n=void 0===i.append||i.append,c.length>0&&!t.isArray(c)&&(c=c.split(f.initialPreviewDelimiter)),f._mergeArray("initialPreview",c),f._mergeArray("initialPreviewConfig",h),f._mergeArray("initialPreviewThumbTags",p),void 0!==a?r?(u=a.attr("data-fileindex"),f.uploadCache.content[u]=c[0],f.uploadCache.config[u]=h[0]||[],f.uploadCache.tags[u]=p[0]||[],f.uploadCache.append=n):(o=f.previewCache.add(c,h[0],p[0],n),s=f.previewCache.get(o,!1),(d=(l=e(document.createElement("div")).html(s).hide().insertAfter(a)).find(".kv-zoom-cache"))&&d.length&&d.insertAfter(a),a.fadeOut("slow",function(){var e=l.find(".file-preview-frame");e&&e.length&&e.insertBefore(a).fadeIn("slow").css("display:inline-block"),f._initPreviewActions(),f._clearFileInput(),t.cleanZoomCache(f.$preview.find("#zoom-"+a.attr("id"))),a.remove(),l.remove(),f._initSortable()})):(f.previewCache.set(c,h,p,n),f._initPreview(),f._initPreviewActions()))},_initSuccessThumbs:function(){var i=this;i.showPreview&&i._getThumbs(t.FRAMES+".file-preview-success").each(function(){var a=e(this),r=i.$preview,n=a.find(".kv-file-remove");n.removeAttr("disabled"),i._handler(n,"click",function(){var e=a.attr("id"),n=i._raise("filesuccessremove",[e,a.attr("data-fileindex")]);t.cleanMemory(a),!1!==n&&a.fadeOut("slow",function(){t.cleanZoomCache(r.find("#zoom-"+e)),a.remove(),i.getFrames().length||i.reset()})})})},_checkAsyncComplete:function(){var t,i;for(i=0;i0||!e.isEmptyObject(m.uploadExtraData),b=e("#"+w).find(".file-thumb-progress"),C={id:w,index:i};m.formdata=v,m.showPreview&&(n=e("#"+w+":not(.file-preview-initial)"),o=n.find(".kv-file-upload"),l=n.find(".kv-file-remove"),b.show()),0===g||!_||o&&o.hasClass("disabled")||m._abort(C)||(f=function(e,t){d||m.updateStack(e,void 0),m.uploadLog.push(t),m._checkAsyncComplete()&&(m.fileBatchCompleted=!0)},s=function(){var e,i,a,r=m.uploadCache,n=0,s=m.cacheInitialPreview;m.fileBatchCompleted&&(s&&s.content&&(n=s.content.length),setTimeout(function(){var o=0===m.getFileStack(!0).length;if(m.showPreview){if(m.previewCache.set(r.content,r.config,r.tags,r.append),n){for(i=0;i0||!e.isEmptyObject(o.uploadExtraData);o.formdata=new FormData,0!==d&&c&&!o._abort({})&&(s=function(){e.each(l,function(e){o.updateStack(e,void 0)}),o._clearFileInput()},i=function(i){o.lock();var a=o._getOutData(i);o.ajaxAborted=!1,o.showPreview&&o._getThumbs().each(function(){var i=e(this),a=i.find(".kv-file-upload"),r=i.find(".kv-file-remove");i.hasClass("file-preview-success")||(o._setThumbStatus(i,"Loading"),t.addCss(i,"file-uploading")),a.attr("disabled",!0),r.attr("disabled",!0)}),o._raise("filebatchpreupload",[a]),o._abort(a)&&(i.abort(),o._getThumbs().each(function(){var t=e(this),i=t.find(".kv-file-upload"),a=t.find(".kv-file-remove");t.hasClass("file-preview-loading")&&(o._setThumbStatus(t,"New"),t.removeClass("file-uploading")),i.removeAttr("disabled"),a.removeAttr("disabled")}),o._setProgressCancelled())},a=function(i,a,r){var n=o._getOutData(r,i),l=0,d=o._getThumbs(":not(.file-preview-success)"),c=t.isEmpty(i)||t.isEmpty(i.errorkeys)?[]:i.errorkeys;t.isEmpty(i)||t.isEmpty(i.error)?(o._raise("filebatchuploadsuccess",[n]),s(),o.showPreview?(d.each(function(){var t=e(this);o._setThumbStatus(t,"Success"),t.removeClass("file-uploading"),t.find(".kv-file-upload").hide().removeAttr("disabled")}),o._initUploadSuccess(i)):o.reset(),o._setProgress(101)):(o.showPreview&&(d.each(function(){var t=e(this),i=t.attr("data-fileindex");t.removeClass("file-uploading"),t.find(".kv-file-upload").removeAttr("disabled"),t.find(".kv-file-remove").removeAttr("disabled"),0===c.length||-1!==e.inArray(l,c)?(o._setPreviewError(t,i,o.filestack[i],o.retryErrorUploads),o.retryErrorUploads||(t.find(".kv-file-upload").hide(),o.updateStack(i,void 0))):(t.find(".kv-file-upload").hide(),o._setThumbStatus(t,"Success"),o.updateStack(i,void 0)),t.hasClass("file-preview-error")&&!o.retryErrorUploads||l++}),o._initUploadSuccess(i)),o._showUploadError(i.error,n,"filebatchuploaderror"),o._setProgress(101,o.$progress,o.msgUploadError))},n=function(){o.unlock(),o._initSuccessThumbs(),o._clearFileInput(),o._raise("filebatchuploadcomplete",[o.filestack,o._getExtraData()])},r=function(t,i,a){var r=o._getOutData(t),n=o.ajaxOperations.uploadBatch,s=o._parseError(n,t,a);o._showUploadError(s,r,"filebatchuploaderror"),o.uploadFileCount=d-1,o.showPreview&&(o._getThumbs().each(function(){var t=e(this),i=t.attr("data-fileindex");t.removeClass("file-uploading"),void 0!==o.filestack[i]&&o._setPreviewError(t)}),o._getThumbs().removeClass("file-uploading"),o._getThumbs(" .kv-file-upload").removeAttr("disabled"),o._getThumbs(" .kv-file-delete").removeAttr("disabled"),o._setProgress(101,o.$progress,o.msgAjaxProgressError.replace("{operation}",n)))},e.each(l,function(e,i){t.isEmpty(l[e])||o.formdata.append(o.uploadFileAttr,i,o.filenames[e])}),o._ajaxSubmit(i,a,n,r))},_uploadExtraOnly:function(){var e,i,a,r,n=this,s={};n.formdata=new FormData,n._abort(s)||(e=function(e){n.lock();var t=n._getOutData(e);n._raise("filebatchpreupload",[t]),n._setProgress(50),s.data=t,s.xhr=e,n._abort(s)&&(e.abort(),n._setProgressCancelled())},i=function(e,i,a){var r=n._getOutData(a,e);t.isEmpty(e)||t.isEmpty(e.error)?(n._raise("filebatchuploadsuccess",[r]),n._clearFileInput(),n._initUploadSuccess(e),n._setProgress(101)):n._showUploadError(e.error,r,"filebatchuploaderror")},a=function(){n.unlock(),n._clearFileInput(),n._raise("filebatchuploadcomplete",[n.filestack,n._getExtraData()])},r=function(e,t,i){var a=n._getOutData(e),r=n.ajaxOperations.uploadExtra,o=n._parseError(r,e,i);s.data=a,n._showUploadError(o,a,"filebatchuploaderror"),n._setProgress(101,n.$progress,n.msgAjaxProgressError.replace("{operation}",r))},n._ajaxSubmit(e,i,a,r))},_deleteFileIndex:function(i){var a=i.attr("data-fileindex"),r=this.reversePreviewOrder;"init_"===a.substring(0,5)&&(a=parseInt(a.replace("init_","")),this.initialPreview=t.spliceArray(this.initialPreview,a,r),this.initialPreviewConfig=t.spliceArray(this.initialPreviewConfig,a,r),this.initialPreviewThumbTags=t.spliceArray(this.initialPreviewThumbTags,a,r),this.getFrames().each(function(){var t=e(this),i=t.attr("data-fileindex");"init_"===i.substring(0,5)&&(i=parseInt(i.replace("init_","")))>a&&(i--,t.attr("data-fileindex","init_"+i))}),this.uploadAsync&&(this.cacheInitialPreview=this.getPreview()))},_initFileActions:function(){var i=this,a=i.$preview;i.showPreview&&(i._initZoomButton(),i.getFrames(" .kv-file-remove").each(function(){var r,n,s,o=e(this),l=o.closest(t.FRAMES),d=l.attr("id"),c=l.attr("data-fileindex");i._handler(o,"click",function(){if(!1===i._raise("filepreremove",[d,c])||!i._validateMinCount())return!1;r=l.hasClass("file-preview-error"),t.cleanMemory(l),l.fadeOut("slow",function(){t.cleanZoomCache(a.find("#zoom-"+d)),i.updateStack(c,void 0),i._clearObjects(l),l.remove(),d&&r&&i.$errorContainer.find('li[data-file-id="'+d+'"]').fadeOut("fast",function(){e(this).remove(),i._errorsExist()||i._resetErrors()}),i._clearFileInput();var o=i.getFileStack(!0),h=i.previewCache.count(),p=o.length,u=i.showPreview&&i.getFrames().length;0!==p||0!==h||u?(s=(n=h+p)>1?i._getMsgSelected(n):o[0]?i._getFileNames()[0]:"",i._setCaption(s)):i.reset(),i._raise("fileremoved",[d,c])})})}),i.getFrames(" .kv-file-upload").each(function(){var a=e(this);i._handler(a,"click",function(){var e=a.closest(t.FRAMES),r=e.attr("data-fileindex");i.$progress.hide(),e.hasClass("file-preview-error")&&!i.retryErrorUploads||i._uploadSingle(r,!1)})}))},_initPreviewActions:function(){var i=this,a=i.$preview,r=i.deleteExtraData||{},n=t.FRAMES+" .kv-file-remove",s=i.fileActionSettings,o=s.removeClass,l=s.removeErrorClass,d=function(){var e=i.isAjaxUpload?i.previewCache.count():i._inputFileCount();a.find(t.FRAMES).length||e||(i._setCaption(""),i.reset(),i.initialCaption="")};i._initZoomButton(),a.find(n).each(function(){var n,s,c,h=e(this),p=h.data("url")||i.deleteUrl,u=h.data("key");if(!t.isEmpty(p)&&void 0!==u){var f,m,g,v,w=h.closest(t.FRAMES),_=i.previewCache.data,b=w.attr("data-fileindex");b=parseInt(b.replace("init_","")),g=t.isEmpty(_.config)&&t.isEmpty(_.config[b])?null:_.config[b],"function"==typeof(v=t.isEmpty(g)||t.isEmpty(g.extra)?r:g.extra)&&(v=v()),m={id:h.attr("id"),key:u,extra:v},n=function(e){i.ajaxAborted=!1,i._raise("filepredelete",[u,e,v]),i._abort()?e.abort():(h.removeClass(l),t.addCss(w,"file-uploading"),t.addCss(h,"disabled "+o))},s=function(e,r,n){var s,c;if(!t.isEmpty(e)&&!t.isEmpty(e.error))return m.jqXHR=n,m.response=e,i._showError(e.error,m,"filedeleteerror"),w.removeClass("file-uploading"),h.removeClass("disabled "+o).addClass(l),void d();w.removeClass("file-uploading").addClass("file-deleted"),w.fadeOut("slow",function(){b=parseInt(w.attr("data-fileindex").replace("init_","")),i.previewCache.unset(b),i._deleteFileIndex(w),s=i.previewCache.count(),c=s>0?i._getMsgSelected(s):"",i._setCaption(c),i._raise("filedeleted",[u,n,v]),t.cleanZoomCache(a.find("#zoom-"+w.attr("id"))),i._clearObjects(w),w.remove(),d()})},c=function(e,t,a){var r=i.ajaxOperations.deleteThumb,n=i._parseError(r,e,a);m.jqXHR=e,m.response={},i._showError(n,m,"filedeleteerror"),w.removeClass("file-uploading"),h.removeClass("disabled "+o).addClass(l),d()},i._initAjaxSettings(),i._mergeAjaxCallback("beforeSend",n,"delete"),i._mergeAjaxCallback("success",s,"delete"),i._mergeAjaxCallback("error",c,"delete"),f=e.extend(!0,{},{url:p,type:"POST",dataType:"json",data:e.extend(!0,{},{key:u},v)},i._ajaxDeleteSettings),i._handler(h,"click",function(){if(!i._validateMinCount())return!1;i.ajaxAborted=!1,i._raise("filebeforedelete",[u,v]),i.ajaxAborted instanceof Promise?i.ajaxAborted.then(function(t){t||e.ajax(f)}):i.ajaxAborted||e.ajax(f)})}})},_hideFileIcon:function(){this.overwriteInitial&&this.$captionContainer.removeClass("icon-visible")},_showFileIcon:function(){t.addCss(this.$captionContainer,"icon-visible")},_getSize:function(t){var i,a,r,n=parseFloat(t),s=this.fileSizeGetter;return e.isNumeric(t)&&e.isNumeric(n)?("function"==typeof s?r=s(n):0===n?r="0.00 B":(i=Math.floor(Math.log(n)/Math.log(1024)),a=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],r=1*(n/Math.pow(1024,i)).toFixed(2)+" "+a[i]),this._getLayoutTemplate("size").replace("{sizeText}",r)):""},_generatePreviewTemplate:function(i,a,r,n,s,o,l,d,c,h,p){var u,f=this,m=f.slug(r),g="",v="",w=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)<400?f.previewSettingsSmall[i]||f.defaults.previewSettingsSmall[i]:f.previewSettings[i]||f.defaults.previewSettings[i],_=c||f._renderFileFooter(m,l,"auto",o),b=f._getPreviewIcon(r),C="type-default",y=b&&f.preferIconicPreview,x=b&&f.preferIconicZoomPreview;return w&&e.each(w,function(e,t){v+=e+":"+t+";"}),u=function(a,o,l,c){var u=l?"zoom-"+s:s,g=f._getPreviewTemplate(a),w=(d||"")+" "+c;return f.frameClass&&(w=f.frameClass+" "+w),l&&(w=w.replace(" "+t.SORT_CSS,"")),g=f._parseFilePreviewIcon(g,r),"text"===a&&(o=t.htmlEncode(o)),"object"!==i||n||e.each(f.defaults.fileTypeSettings,function(e,t){"object"!==e&&"other"!==e&&t(r,n)&&(C="type-"+e)}),g.setTokens({previewId:u,caption:m,frameClass:w,type:n,fileindex:h,typeCss:C,footer:_,data:o,template:p||i,style:v?'style="'+v+'"':""})},h=h||s.slice(s.lastIndexOf("-")+1),f.fileActionSettings.showZoom&&(g=u(x?"other":i,a,!0,"kv-zoom-thumb")),g="\n"+f._getLayoutTemplate("zoomCache").replace("{zoomContent}",g),u(y?"other":i,a,!1,"kv-preview-thumb")+g},_addToPreview:function(e,t){return this.reversePreviewOrder?e.prepend(t):e.append(t)},_previewDefault:function(i,a,r){var n=this.$preview;if(this.showPreview){var s,o=i?i.name:"",l=i?i.type:"",d=i.size||0,c=this.slug(o),h=!0===r&&!this.isAjaxUpload,p=t.objUrl.createObjectURL(i);this._clearDefaultPreview(),s=this._generatePreviewTemplate("other",p,o,l,a,h,d),this._addToPreview(n,s),this._setThumbAttr(a,c,d),!0===r&&this.isAjaxUpload&&this._setThumbStatus(e("#"+a),"Error")}},_previewFile:function(e,t,i,a,r,n){if(this.showPreview){var s,o=t?t.name:"",l=n.type,d=n.name,c=this._parseFileType(l,o),h=this.allowedPreviewTypes,p=this.allowedPreviewMimeTypes,u=this.$preview,f=t.size||0,m=h&&h.indexOf(c)>=0,g=p&&-1!==p.indexOf(l),v="text"===c||"html"===c||"image"===c?i.target.result:r;if("html"===c&&this.purifyHtml&&window.DOMPurify&&(v=window.DOMPurify.sanitize(v)),m||g){s=this._generatePreviewTemplate(c,v,o,l,a,!1,f),this._clearDefaultPreview(),this._addToPreview(u,s);var w=u.find("#"+a+" img");this._validateImageOrientation(w,t,a,d,l,f,v)}else this._previewDefault(t,a);this._setThumbAttr(a,d,f),this._initSortable()}},_setThumbAttr:function(t,i,a){var r=e("#"+t);r.length&&(a=a&&a>0?this._getSize(a):"",r.data({caption:i,size:a}))},_setInitThumbAttr:function(){var e,i,a,r,n=this.previewCache.data,s=this.previewCache.count();if(0!==s)for(var o=0;o&"']/g,"_")},_updateFileDetails:function(e){var i=this.$element,a=this.getFileStack(),r=t.isIE(9)&&t.findFileName(i.val())||i[0].files[0]&&i[0].files[0].name||a.length&&a[0].name||"",n=this.slug(r),s=this.isAjaxUpload?a.length:e,o=this.previewCache.count()+s,l=1===s?n:this._getMsgSelected(o);this.isError?(this.$previewContainer.removeClass("file-thumb-loading"),this.$previewStatus.html(""),this.$captionContainer.removeClass("icon-visible")):this._showFileIcon(),this._setCaption(l,this.isError),this.$container.removeClass("file-input-new file-input-ajax-new"),1===arguments.length&&this._raise("fileselect",[e,n]),this.previewCache.count()&&this._initPreviewActions()},_setThumbStatus:function(e,t){if(this.showPreview){var i="indicator"+t,a=i+"Title",r="file-preview-"+t.toLowerCase(),n=e.find(".file-upload-indicator"),s=this.fileActionSettings;e.removeClass("file-preview-success file-preview-error file-preview-loading"),"Success"===t&&e.find(".file-drag-handle").remove(),n.html(s[i]),n.attr("title",s[a]),e.addClass(r),"Error"!==t||this.retryErrorUploads||e.find(".kv-file-upload").attr("disabled",!0)}},_setProgressCancelled:function(){this._setProgress(101,this.$progress,this.msgCancelled)},_setProgress:function(e,i,a){var r,n=Math.min(e,100),s=this.progressUploadThreshold,o=e<=100?this.progressTemplate:this.progressCompleteTemplate,l=n<100?this.progressTemplate:a?this.progressErrorTemplate:o;i=i||this.$progress,t.isEmpty(l)||(r=s&&n>s&&e<=100?l.setTokens({percent:s,status:this.msgUploadThreshold}):l.setTokens({percent:n,status:e>100?this.msgUploadEnd:n+"%"}),i.html(r),a&&i.find('[role="progressbar"]').html(a))},_setFileDropZoneTitle:function(){var e,i=this.$container.find(".file-drop-zone"),a=this.dropZoneTitle;this.isClickable&&(e=t.isEmpty(this.$element.attr("multiple"))?this.fileSingle:this.filePlural,a+=this.dropZoneClickTitle.replace("{files}",e)),i.find("."+this.dropZoneTitleClass).remove(),!this.showPreview||0===i.length||this.getFileStack().length>0||!this.dropZoneEnabled||!this.isAjaxUpload&&this.$element.files||(0===i.find(t.FRAMES).length&&t.isEmpty(this.defaultPreviewContent)&&i.prepend('
    '+a+"
    "),this.$container.removeClass("file-input-new"),t.addCss(this.$container,"file-input-ajax-new"))},_setAsyncUploadStatus:function(t,i,a){var r=0;this._setProgress(i,e("#"+t).find(".file-thumb-progress")),this.uploadStatus[t]=i,e.each(this.uploadStatus,function(e,t){r+=t}),this._setProgress(Math.floor(r/a))},_validateMinCount:function(){var e=this.isAjaxUpload?this.getFileStack().length:this._inputFileCount();return!(this.validateInitialCount&&this.minFileCount>0&&this._getFileCount(e-1)=h:d<=h)||(l=this["msgImage"+s+i].setTokens({name:n,size:h}),this._showUploadError(l,o),this._setPreviewError(r,e,null)))},_getExifObj:function(e){var t=null;try{t=window.piexif?window.piexif.load(e):null}catch(e){t=null}return t||this._log("Error loading the piexif.js library."),t},_validateImageOrientation:function(e,i,a,r,n,s,o){var l,d;(d=(l=e.length&&this.autoOrientImage?this._getExifObj(o):null)?l["0th"][piexif.ImageIFD.Orientation]:null)?(t.setImageOrientation(e,this.$preview.find("#zoom-"+a+" img"),d),this._raise("fileimageoriented",{$img:e,file:i}),this._validateImage(a,r,n,s,o,l)):this._validateImage(a,r,n,s,o,l)},_validateImage:function(t,i,a,r,n,s){var o,l,d,c=this,h=c.$preview,p=h.find("#"+t),u=p.attr("data-fileindex"),f=p.find("img");i=i||"Untitled",f.one("load",function(){l=p.width(),d=h.width(),l>d&&f.css("width","100%"),o={ind:u,id:t},c._checkDimensions(u,"Small",f,p,i,"Width",o),c._checkDimensions(u,"Small",f,p,i,"Height",o),c.resizeImage||(c._checkDimensions(u,"Large",f,p,i,"Width",o),c._checkDimensions(u,"Large",f,p,i,"Height",o)),c._raise("fileimageloaded",[t]),c.loadedImages.push({ind:u,img:f,thumb:p,pid:t,typ:a,siz:r,validated:!1,imgData:n,exifObj:s}),p.data("exif",s),c._validateAllImages()}).one("error",function(){c._raise("fileimageloaderror",[t])}).each(function(){this.complete?e(this).trigger("load"):this.error&&e(this).trigger("error")})},_validateAllImages:function(){var e,t,i,a={val:0},r=this.loadedImages.length,n=this.resizeIfSizeMoreThan;if(r===this.totalImagesCount&&(this._raise("fileimagesloaded"),this.resizeImage))for(e=0;e1e3*n&&this._getResizedImage(t,a,r),this.loadedImages[e].validated=!0)},_getResizedImage:function(i,a,r){var n,s,o,l,d,c,h=this,p=e(i.img)[0],u=p.naturalWidth,f=p.naturalHeight,m=1,g=h.maxImageWidth||u,v=h.maxImageHeight||f,w=!(!u||!f),_=h.imageCanvas,b=h.imageCanvasContext,C=i.typ,y=i.pid,x=i.ind,T=i.thumb,E=i.exifObj;if(d=function(e,t,i){h.isAjaxUpload?h._showUploadError(e,t,i):h._showError(e,t,i),h._setPreviewError(T,x)},h.filestack[x]&&w&&!(u<=g&&f<=v)||(w&&h.filestack[x]&&h._raise("fileimageresized",[y,x]),a.val++,a.val===r&&h._raise("fileimagesresized"),w)){C=C||h.resizeDefaultImageType,s=u>g,o=f>v,m="width"===h.resizePreference?s?g/u:o?v/f:1:o?v/f:s?g/u:1,h._resetCanvas(),u*=m,f*=m,_.width=u,_.height=f;try{b.drawImage(p,0,0,u,f),l=_.toDataURL(C,h.resizeQuality),E&&(c=window.piexif.dump(E),l=window.piexif.insert(c,l)),n=t.dataURI2Blob(l),h.filestack[x]=n,h._raise("fileimageresized",[y,x]),a.val++,a.val===r&&h._raise("fileimagesresized",[void 0,void 0]),n instanceof Blob||d(h.msgImageResizeError,{id:y,index:x},"fileimageresizeerror")}catch(e){a.val++,a.val===r&&h._raise("fileimagesresized",[void 0,void 0]),d(h.msgImageResizeException.replace("{errors}",e.message),{id:y,index:x},"fileimageresizeexception")}}else d(h.msgImageResizeError,{id:y,index:x},"fileimageresizeerror")},_initBrowse:function(e){var i=this.$element;this.showBrowse?this.$btnFile=e.find(".btn-file").append(i):(i.appendTo(e).attr("tabindex",-1),t.addCss(i,"file-no-browse"))},_initClickable:function(){var i,a,r=this;r.isClickable&&(i=r.$dropZone,r.isAjaxUpload||(a=r.$preview.find(".file-default-preview")).length&&(i=a),t.addCss(i,"clickable"),i.attr("tabindex",-1),r._handler(i,"click",function(t){var a=e(t.target);e(r.elErrorContainer+":visible").length||a.parents(".file-preview-thumbnails").length&&!a.parents(".file-default-preview").length||(r.$element.data("zoneClicked",!0).trigger("click"),i.blur())}))},_initCaption:function(){var e=this.initialCaption||"";return this.overwriteInitial||t.isEmpty(e)?(this.$caption.val(""),!1):(this._setCaption(e),!0)},_setCaption:function(i,a){var r,n,s,o,l,d=this.getFileStack();if(this.$caption.length){if(this.$captionContainer.removeClass("icon-visible"),a)r=e("
    "+this.msgValidationError+"
    ").text(),l=(o=d.length)?1===o&&d[0]?this._getFileNames()[0]:this._getMsgSelected(o):this._getMsgSelected(this.msgNo),n=t.isEmpty(i)?l:i,s=''+this.msgValidationErrorIcon+"";else{if(t.isEmpty(i))return;n=r=e("
    "+i+"
    ").text(),s=this._getLayoutTemplate("fileIcon")}this.$captionContainer.addClass("icon-visible"),this.$caption.attr("title",r).val(n),this.$captionIcon.html(s)}},_createContainer:function(){var t={class:"file-input file-input-new"+(this.rtl?" kv-rtl":"")},i=e(document.createElement("div")).attr(t).html(this._renderMain());return i.insertBefore(this.$element),this._initBrowse(i),this.theme&&i.addClass("theme-"+this.theme),i},_refreshContainer:function(){var e=this.$container;this.$element.insertAfter(e),e.html(this._renderMain()),this._initBrowse(e),this._validateDisabled()},_validateDisabled:function(){this.$caption.attr({readonly:this.isDisabled})},_renderMain:function(){var e=this.dropZoneEnabled?" file-drop-zone":"file-drop-disabled",t=this.showClose?this._getLayoutTemplate("close"):"",i=this.showPreview?this._getLayoutTemplate("preview").setTokens({class:this.previewClass,dropClass:e}):"",a=this.isDisabled?this.captionClass+" file-caption-disabled":this.captionClass,r=this.captionTemplate.setTokens({class:a+" kv-fileinput-caption"});return this.mainTemplate.setTokens({class:this.mainClass+(!this.showBrowse&&this.showCaption?" no-browse":""),preview:i,close:t,caption:r,upload:this._renderButton("upload"),remove:this._renderButton("remove"),cancel:this._renderButton("cancel"),browse:this._renderButton("browse")})},_renderButton:function(e){var i=this._getLayoutTemplate("btnDefault"),a=this[e+"Class"],r=this[e+"Title"],n=this[e+"Icon"],s=this[e+"Label"],o=this.isDisabled?" disabled":"",l="button";switch(e){case"remove":if(!this.showRemove)return"";break;case"cancel":if(!this.showCancel)return"";a+=" kv-hidden";break;case"upload":if(!this.showUpload)return"";this.isAjaxUpload&&!this.isDisabled?i=this._getLayoutTemplate("btnLink").replace("{href}",this.uploadUrl):l="submit";break;case"browse":if(!this.showBrowse)return"";i=this._getLayoutTemplate("btnBrowse");break;default:return""}return a+="browse"===e?" btn-file":" fileinput-"+e+" fileinput-"+e+"-button",t.isEmpty(s)||(s=' '+s+""),i.setTokens({type:l,css:a,title:r,status:o,icon:n,label:s})},_renderThumbProgress:function(){return'
    '+this.progressTemplate.setTokens({percent:"0",status:this.msgUploadBegin})+"
    "},_renderFileFooter:function(e,i,a,r){var n,s=this.fileActionSettings,o=s.showRemove,l=s.showDrag,d=s.showUpload,c=s.showZoom,h=this._getLayoutTemplate("footer"),p=this._getLayoutTemplate("indicator"),u=r?s.indicatorError:s.indicatorNew,f=r?s.indicatorErrorTitle:s.indicatorNewTitle,m=p.setTokens({indicator:u,indicatorTitle:f});return i=this._getSize(i),n=this.isAjaxUpload?h.setTokens({actions:this._renderFileActions(d,!1,o,c,l,!1,!1,!1),caption:e,size:i,width:a,progress:this._renderThumbProgress(),indicator:m}):h.setTokens({actions:this._renderFileActions(!1,!1,!1,c,l,!1,!1,!1),caption:e,size:i,width:a,progress:"",indicator:m}),n=t.replaceTags(n,this.previewThumbTags)},_renderFileActions:function(e,t,i,a,r,n,s,o,l,d,c){if(!(e||t||i||a||r))return"";var h,p=!1===s?"":' data-url="'+s+'"',u=!1===o?"":' data-key="'+o+'"',f="",m="",g="",v="",w="",_=this._getLayoutTemplate("actions"),b=this.fileActionSettings,C=this.otherActionButtons.setTokens({dataKey:u,key:o}),y=n?b.removeClass+" disabled":b.removeClass;return i&&(f=this._getLayoutTemplate("actionDelete").setTokens({removeClass:y,removeIcon:b.removeIcon,removeTitle:b.removeTitle,dataUrl:p,dataKey:u,key:o})),e&&(m=this._getLayoutTemplate("actionUpload").setTokens({uploadClass:b.uploadClass,uploadIcon:b.uploadIcon,uploadTitle:b.uploadTitle})),t&&(g=(g=this._getLayoutTemplate("actionDownload").setTokens({downloadClass:b.downloadClass,downloadIcon:b.downloadIcon,downloadTitle:b.downloadTitle,downloadUrl:d||this.initialPreviewDownloadUrl})).setTokens({filename:c,key:o})),a&&(v=this._getLayoutTemplate("actionZoom").setTokens({zoomClass:b.zoomClass,zoomIcon:b.zoomIcon,zoomTitle:b.zoomTitle})),r&&l&&(h="drag-handle-init "+b.dragClass,w=this._getLayoutTemplate("actionDrag").setTokens({dragClass:h,dragTitle:b.dragTitle,dragIcon:b.dragIcon})),_.setTokens({delete:f,upload:m,download:g,zoom:v,drag:w,other:C})},_browse:function(e){e&&e.isDefaultPrevented()||!this._raise("filebrowse")||(this.isError&&!this.isAjaxUpload&&this.clear(),this.$captionContainer.focus())},_filterDuplicate:function(e,t,i){var a=this._getFileId(e);a&&i&&i.indexOf(a)>-1||(i||(i=[]),t.push(e),i.push(a))},_change:function(i){var a=this;if(!a.changeTriggered){var r,n,s,o,l,d,c,h,p,u,f,m=a.$element,g=arguments.length>1,v=a.isAjaxUpload,w=[],_=g?arguments[1]:m.get(0).files,b=!v&&t.isEmpty(m.attr("multiple"))?1:a.maxFileCount,C=a.filestack.length,y=t.isEmpty(m.attr("multiple"))&&C>0,x=a._getFileIds();if(a.reader=null,a._resetUpload(),a._hideFileIcon(),a.dropZoneEnabled&&a.$container.find(".file-drop-zone ."+a.dropZoneTitleClass).remove(),v?e.each(_,function(e,t){a._filterDuplicate(t,w,x)}):(_=i.target&&void 0===i.target.files?i.target.value?[{name:i.target.value.replace(/^.+\\/,"")}]:[]:i.target.files||{},w=_),t.isEmpty(w)||0===w.length)return v||a.clear(),void a._raise("fileselectnone");if(a._resetErrors(),n=w.length,r=a._getFileCount(v?a.getFileStack().length+n:n),b>0&&r>b){if(!a.autoReplace||n>b)return s=a.autoReplace&&n>b?n:r,o=b,f=a.msgFilesTooMany.replace("{m}",o).replace("{n}",s),a.isError=(l=f,d=null,c=null,h=null,p=e.extend(!0,{},a._getOutData({},{},_),{id:c,index:h}),u={id:c,index:h,file:d,files:_},v?a._showUploadError(l,p):a._showError(l,u)),a.$captionContainer.removeClass("icon-visible"),a._setCaption("",!0),void a.$container.removeClass("file-input-new file-input-ajax-new");r>b&&a._resetPreviewThumbs(v)}else!v||y?(a._resetPreviewThumbs(!1),y&&a.clearStack()):!v||0!==C||a.previewCache.count()&&!a.overwriteInitial||a._resetPreviewThumbs(!0);a.isPreviewable?a.readFiles(w):a._updateFileDetails(1)}},_abort:function(t){var i;return this.ajaxAborted&&"object"==typeof this.ajaxAborted&&void 0!==this.ajaxAborted.message?((i=e.extend(!0,{},this._getOutData(),t)).abortData=this.ajaxAborted.data||{},i.abortMessage=this.ajaxAborted.message,this._setProgress(101,this.$progress,this.msgCancelled),this._showUploadError(this.ajaxAborted.message,i,"filecustomerror"),this.cancel(),!0):!!this.ajaxAborted},_resetFileStack:function(){var i=this,a=0,r=[],n=[],s=[];i._getThumbs().each(function(){var o=e(this),l=o.attr("data-fileindex"),d=i.filestack[l],c=o.attr("id");"-1"!==l&&-1!==l&&(void 0!==d?(r[a]=d,n[a]=i._getFileName(d),s[a]=i._getFileId(d),o.attr({id:i.previewInitId+"-"+a,"data-fileindex":a}),a++):o.attr({id:"uploaded-"+t.uniqId(),"data-fileindex":"-1"}),i.$preview.find("#zoom-"+c).attr({id:"zoom-"+o.attr("id"),"data-fileindex":o.attr("data-fileindex")}))}),i.filestack=r,i.filenames=n,i.fileids=s},_isFileSelectionValid:function(e){return e=e||0,this.required&&!this.getFilesCount()?(this.$errorContainer.html(""),this._showUploadError(this.msgFileRequired),!1):!(this.minFileCount>0&&this._getFileCount(e)=u)return r.isAjaxUpload&&r.filestack.length>0?r._raise("filebatchselected",[r.getFileStack()]):r._raise("filebatchselected",[i]),l.removeClass("file-thumb-loading"),void d.html("");var T,E,S,k,F,P,I,A,D,z,$,j,U=p+"-"+(m+x),B=i[x],R=f.text,O=f.image,L=f.html,M=B&&B.name?r.slug(B.name):"",Z=(B&&B.size||0)/1e3,N="",H=B?t.objUrl.createObjectURL(B):null,W=0,q="",V=0,K=function(){var e=h.setTokens({index:x+1,files:u,percent:50,name:M});setTimeout(function(){d.html(e),r._updateFileDetails(u),a(x+1)},100),r._raise("fileloaded",[B,U,x,o])};if(B){if(v>0)for(E=0;E0&&Z>r.maxFileSize)return S=r.msgSizeTooLarge.setTokens({name:M,size:T,maxSize:r.maxFileSize}),void y(S,B,U,x);if(null!==r.minFileSize&&Z<=t.getNum(r.minFileSize))return S=r.msgSizeTooSmall.setTokens({name:M,size:T,minSize:r.minFileSize}),void y(S,B,U,x);if(!t.isEmpty(g)&&t.isArray(g)){for(E=0;Eb)return r.addToStack(B),l.addClass("file-thumb-loading"),r._previewDefault(B,U),r._initFileActions(),r._updateFileDetails(u),void a(x+1);s.length&&void 0!==FileReader?(D=R(B.type,M),z=L(B.type,M),$=O(B.type,M),d.html(c.replace("{index}",x+1).replace("{files}",u)),l.addClass("file-thumb-loading"),o.onerror=function(e){r._errorHandler(e,M)},o.onload=function(i){var a,n,s,l,d,c,h,p,u=[];if(n={name:M,type:B.type},e.each(f,function(e,t){"object"!==e&&"other"!==e&&t(B.type,M)&&V++}),0===V){for(s=new Uint8Array(i.target.result),E=0;E0)for(t=0;t0?a.initialCaption:"",a.$caption.attr("title","").val(i),t.addCss(a.$container,"file-input-new"),a._validateDefaultPreview()),0===a.$container.find(t.FRAMES).length&&(a._initCaption()||a.$captionContainer.removeClass("icon-visible")),a._hideFileIcon(),a._raise("filecleared"),a.$captionContainer.focus(),a._setFileDropZoneTitle(),a.$element},reset:function(){if(this._raise("filereset"))return this._resetPreview(),this.$container.find(".fileinput-filename").text(""),t.addCss(this.$container,"file-input-new"),(this.getFrames().length||this.dropZoneEnabled)&&this.$container.removeClass("file-input-new"),this.clearStack(),this.formdata={},this._setFileDropZoneTitle(),this.$element},disable:function(){return this.isDisabled=!0,this._raise("filedisabled"),this.$element.attr("disabled","disabled"),this.$container.find(".kv-fileinput-caption").addClass("file-caption-disabled"),this.$container.find(".fileinput-remove, .fileinput-upload, .file-preview-frame button").attr("disabled",!0),t.addCss(this.$container.find(".btn-file"),"disabled"),this._initDragDrop(),this.$element},enable:function(){return this.isDisabled=!1,this._raise("fileenabled"),this.$element.removeAttr("disabled"),this.$container.find(".kv-fileinput-caption").removeClass("file-caption-disabled"),this.$container.find(".fileinput-remove, .fileinput-upload, .file-preview-frame button").removeAttr("disabled"),this.$container.find(".btn-file").removeClass("disabled"),this._initDragDrop(),this.$element},upload:function(){var i,a,r,n=this.getFileStack().length,s=!e.isEmptyObject(this._getExtraData());if(this.isAjaxUpload&&!this.isDisabled&&this._isFileSelectionValid(n))if(this._resetUpload(),0!==n||s)if(this.$progress.show(),this.uploadCount=0,this.uploadStatus={},this.uploadLog=[],this.lock(),this._setProgress(2),0===n&&s)this._uploadExtraOnly();else{if(r=this.filestack.length,this.hasInitData=!1,!this.uploadAsync)return this._uploadBatch(),this.$element;for(a=this._getOutData(),this._raise("filebatchpreupload",[a]),this.fileBatchCompleted=!1,this.uploadCache={content:[],config:[],tags:[],append:!0},this.uploadAsyncCount=this.getFileStack().length,i=0;i',next:'',toggleheader:'',fullscreen:'',borderless:'',close:''},previewZoomButtonClasses:{prev:"btn btn-navigate",next:"btn btn-navigate",toggleheader:"btn btn-sm btn-kv btn-default btn-outline-secondary",fullscreen:"btn btn-sm btn-kv btn-default btn-outline-secondary",borderless:"btn btn-sm btn-kv btn-default btn-outline-secondary",close:"btn btn-sm btn-kv btn-default btn-outline-secondary"},previewTemplates:{},previewContentTemplates:{},preferIconicPreview:!1,preferIconicZoomPreview:!1,allowedPreviewTypes:void 0,allowedPreviewMimeTypes:null,allowedFileTypes:null,allowedFileExtensions:null,defaultPreviewContent:null,customLayoutTags:{},customPreviewTags:{},previewFileIcon:'',previewFileIconClass:"file-other-icon",previewFileIconSettings:{},previewFileExtSettings:{},buttonLabelClass:"hidden-xs",browseIcon:' ',browseClass:"btn btn-primary",removeIcon:'',removeClass:"btn btn-default btn-secondary",cancelIcon:'',cancelClass:"btn btn-default btn-secondary",uploadIcon:'',uploadClass:"btn btn-default btn-secondary",uploadUrl:null,uploadUrlThumb:null,uploadAsync:!0,uploadExtraData:{},zoomModalHeight:480,minImageWidth:null,minImageHeight:null,maxImageWidth:null,maxImageHeight:null,resizeImage:!1,resizePreference:"width",resizeQuality:.92,resizeDefaultImageType:"image/jpeg",resizeIfSizeMoreThan:0,minFileSize:0,maxFileSize:0,maxFilePreviewSize:25600,minFileCount:0,maxFileCount:0,validateInitialCount:!1,msgValidationErrorClass:"text-danger",msgValidationErrorIcon:' ',msgErrorClass:"file-error-message",progressThumbClass:"progress-bar bg-success progress-bar-success progress-bar-striped active",progressClass:"progress-bar bg-success progress-bar-success progress-bar-striped active",progressCompleteClass:"progress-bar bg-success progress-bar-success",progressErrorClass:"progress-bar bg-danger progress-bar-danger",progressUploadThreshold:99,previewFileType:"image",elCaptionContainer:null,elCaptionText:null,elPreviewContainer:null,elPreviewImage:null,elPreviewStatus:null,elErrorContainer:null,errorCloseButton:t.closeButton("kv-error-close"),slugCallback:null,dropZoneEnabled:!0,dropZoneTitleClass:"file-drop-zone-title",fileActionSettings:{},otherActionButtons:"",textEncoding:"UTF-8",ajaxSettings:{},ajaxDeleteSettings:{},showAjaxErrorDetails:!0,mergeAjaxCallbacks:!1,mergeAjaxDeleteCallbacks:!1,retryErrorUploads:!0,reversePreviewOrder:!1},e.fn.fileinputLocales.en={fileSingle:"file",filePlural:"files",browseLabel:"Browse …",removeLabel:"Remove",removeTitle:"Clear selected files",cancelLabel:"Cancel",cancelTitle:"Abort ongoing upload",uploadLabel:"Upload",uploadTitle:"Upload selected files",msgNo:"No",msgNoFilesSelected:"No files selected",msgCancelled:"Cancelled",msgPlaceholder:"Select {files}...",msgZoomModalHeading:"Detailed Preview",msgFileRequired:"You must select a file to upload.",msgSizeTooSmall:'File "{name}" ({size} KB) is too small and must be larger than {minSize} KB.',msgSizeTooLarge:'File "{name}" ({size} KB) exceeds maximum allowed upload size of {maxSize} KB.',msgFilesTooLess:"You must select at least {n} {files} to upload.",msgFilesTooMany:"Number of files selected for upload ({n}) exceeds maximum allowed limit of {m}.",msgFileNotFound:'File "{name}" not found!',msgFileSecured:'Security restrictions prevent reading the file "{name}".',msgFileNotReadable:'File "{name}" is not readable.',msgFilePreviewAborted:'File preview aborted for "{name}".',msgFilePreviewError:'An error occurred while reading the file "{name}".',msgInvalidFileName:'Invalid or unsupported characters in file name "{name}".',msgInvalidFileType:'Invalid type for file "{name}". Only "{types}" files are supported.',msgInvalidFileExtension:'Invalid extension for file "{name}". Only "{extensions}" files are supported.',msgFileTypes:{image:"image",html:"HTML",text:"text",video:"video",audio:"audio",flash:"flash",pdf:"PDF",object:"object"},msgUploadAborted:"The file upload was aborted",msgUploadThreshold:"Processing...",msgUploadBegin:"Initializing...",msgUploadEnd:"Done",msgUploadEmpty:"No valid data available for upload.",msgUploadError:"Error",msgValidationError:"Validation Error",msgLoading:"Loading file {index} of {files} …",msgProgress:"Loading file {index} of {files} - {name} - {percent}% completed.",msgSelected:"{n} {files} selected",msgFoldersNotAllowed:"Drag & drop files only! {n} folder(s) dropped were skipped.",msgImageWidthSmall:'Width of image file "{name}" must be at least {size} px.',msgImageHeightSmall:'Height of image file "{name}" must be at least {size} px.',msgImageWidthLarge:'Width of image file "{name}" cannot exceed {size} px.',msgImageHeightLarge:'Height of image file "{name}" cannot exceed {size} px.',msgImageResizeError:"Could not get the image dimensions to resize.",msgImageResizeException:"Error while resizing the image.
    {errors}
    ",msgAjaxError:"Something went wrong with the {operation} operation. Please try again later!",msgAjaxProgressError:"{operation} failed",ajaxOperations:{deleteThumb:"file delete",uploadThumb:"file upload",uploadBatch:"batch file upload",uploadExtra:"form data upload"},dropZoneTitle:"Drag & drop files here …",dropZoneClickTitle:"
    (or click to select {files})",previewZoomButtonTitles:{prev:"View previous file",next:"View next file",toggleheader:"Toggle header",fullscreen:"Toggle full screen",borderless:"Toggle borderless mode",close:"Close detailed preview"},usePdfRenderer:function(){return!!navigator.userAgent.match(/(iPod|iPhone|iPad|Android)/i)},pdfRendererUrl:"",pdfRendererTemplate:''},e.fn.fileinput.Constructor=i,e(document).ready(function(){var t=e("input.file[type=file]");t.length&&t.fileinput()})}); \ No newline at end of file diff --git a/src/main/resources/static/plugins/fileinput/loading-sm.gif b/src/main/resources/static/halo-backend/plugins/fileinput/loading-sm.gif old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/fileinput/loading-sm.gif rename to src/main/resources/static/halo-backend/plugins/fileinput/loading-sm.gif diff --git a/src/main/resources/static/plugins/fileinput/loading.gif b/src/main/resources/static/halo-backend/plugins/fileinput/loading.gif old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/fileinput/loading.gif rename to src/main/resources/static/halo-backend/plugins/fileinput/loading.gif diff --git a/src/main/resources/static/plugins/fileinput/zh.min.js b/src/main/resources/static/halo-backend/plugins/fileinput/zh.min.js old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/fileinput/zh.min.js rename to src/main/resources/static/halo-backend/plugins/fileinput/zh.min.js diff --git a/src/main/resources/static/plugins/font-awesome/css/font-awesome.css b/src/main/resources/static/halo-backend/plugins/font-awesome/css/font-awesome.css old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/font-awesome/css/font-awesome.css rename to src/main/resources/static/halo-backend/plugins/font-awesome/css/font-awesome.css diff --git a/src/main/resources/static/plugins/font-awesome/css/font-awesome.css.map b/src/main/resources/static/halo-backend/plugins/font-awesome/css/font-awesome.css.map old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/font-awesome/css/font-awesome.css.map rename to src/main/resources/static/halo-backend/plugins/font-awesome/css/font-awesome.css.map diff --git a/src/main/resources/static/plugins/font-awesome/css/font-awesome.min.css b/src/main/resources/static/halo-backend/plugins/font-awesome/css/font-awesome.min.css old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/font-awesome/css/font-awesome.min.css rename to src/main/resources/static/halo-backend/plugins/font-awesome/css/font-awesome.min.css diff --git a/src/main/resources/static/plugins/font-awesome/fonts/FontAwesome.otf b/src/main/resources/static/halo-backend/plugins/font-awesome/fonts/FontAwesome.otf old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/font-awesome/fonts/FontAwesome.otf rename to src/main/resources/static/halo-backend/plugins/font-awesome/fonts/FontAwesome.otf diff --git a/src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.eot b/src/main/resources/static/halo-backend/plugins/font-awesome/fonts/fontawesome-webfont.eot old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.eot rename to src/main/resources/static/halo-backend/plugins/font-awesome/fonts/fontawesome-webfont.eot diff --git a/src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.svg b/src/main/resources/static/halo-backend/plugins/font-awesome/fonts/fontawesome-webfont.svg old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.svg rename to src/main/resources/static/halo-backend/plugins/font-awesome/fonts/fontawesome-webfont.svg diff --git a/src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.ttf b/src/main/resources/static/halo-backend/plugins/font-awesome/fonts/fontawesome-webfont.ttf old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.ttf rename to src/main/resources/static/halo-backend/plugins/font-awesome/fonts/fontawesome-webfont.ttf diff --git a/src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.woff b/src/main/resources/static/halo-backend/plugins/font-awesome/fonts/fontawesome-webfont.woff old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.woff rename to src/main/resources/static/halo-backend/plugins/font-awesome/fonts/fontawesome-webfont.woff diff --git a/src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.woff2 b/src/main/resources/static/halo-backend/plugins/font-awesome/fonts/fontawesome-webfont.woff2 old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.woff2 rename to src/main/resources/static/halo-backend/plugins/font-awesome/fonts/fontawesome-webfont.woff2 diff --git a/src/main/resources/static/plugins/inline-attachment/codemirror-4.inline-attachment.min.js b/src/main/resources/static/halo-backend/plugins/inline-attachment/codemirror-4.inline-attachment.min.js old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/inline-attachment/codemirror-4.inline-attachment.min.js rename to src/main/resources/static/halo-backend/plugins/inline-attachment/codemirror-4.inline-attachment.min.js diff --git a/src/main/resources/static/plugins/jquery-tageditor/jquery.tag-editor.css b/src/main/resources/static/halo-backend/plugins/jquery-tageditor/jquery.tag-editor.css similarity index 100% rename from src/main/resources/static/plugins/jquery-tageditor/jquery.tag-editor.css rename to src/main/resources/static/halo-backend/plugins/jquery-tageditor/jquery.tag-editor.css diff --git a/src/main/resources/static/plugins/jquery-tageditor/jquery.tag-editor.js b/src/main/resources/static/halo-backend/plugins/jquery-tageditor/jquery.tag-editor.js similarity index 100% rename from src/main/resources/static/plugins/jquery-tageditor/jquery.tag-editor.js rename to src/main/resources/static/halo-backend/plugins/jquery-tageditor/jquery.tag-editor.js diff --git a/src/main/resources/static/plugins/jquery-tageditor/jquery.tag-editor.min.js b/src/main/resources/static/halo-backend/plugins/jquery-tageditor/jquery.tag-editor.min.js similarity index 88% rename from src/main/resources/static/plugins/jquery-tageditor/jquery.tag-editor.min.js rename to src/main/resources/static/halo-backend/plugins/jquery-tageditor/jquery.tag-editor.min.js index 94293448f..b396ccfc9 100644 --- a/src/main/resources/static/plugins/jquery-tageditor/jquery.tag-editor.min.js +++ b/src/main/resources/static/halo-backend/plugins/jquery-tageditor/jquery.tag-editor.min.js @@ -1,3 +1,7 @@ // jQuery tagEditor v1.0.21 // https://github.com/Pixabay/jQuery-tagEditor -!function(t){t.fn.tagEditorInput=function(){var e=" ",i=t(this),a=parseInt(i.css("fontSize")),r=t("").css({position:"absolute",top:-9999,left:-9999,width:"auto",fontSize:i.css("fontSize"),fontFamily:i.css("fontFamily"),fontWeight:i.css("fontWeight"),letterSpacing:i.css("letterSpacing"),whiteSpace:"nowrap"}),l=function(){if(e!==(e=i.val())){r.text(e);var t=r.width()+a;20>t&&(t=20),t!=i.width()&&i.width(t)}};return r.insertAfter(i),i.bind("keyup keydown focus",l)},t.fn.tagEditor=function(e,a,r){function l(t){return t.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}var n,o=t.extend({},t.fn.tagEditor.defaults,e),c=this;if(o.dregex=new RegExp("["+o.delimiter.replace("-","-")+"]","g"),"string"==typeof e){var s=[];return c.each(function(){var i=t(this),l=i.data("options"),n=i.next(".tag-editor");if("getTags"==e)s.push({field:i[0],editor:n,tags:n.data("tags")});else if("addTag"==e){if(l.maxTags&&n.data("tags").length>=l.maxTags)return!1;t('
  •  '+l.delimiter[0]+'
  • ').appendTo(n).find(".tag-editor-tag").html('').addClass("active").find("input").val(a).blur(),r?t(".placeholder",n).remove():n.click()}else"removeTag"==e?(t(".tag-editor-tag",n).filter(function(){return t(this).text()==a}).closest("li").find(".tag-editor-delete").click(),r||n.click()):"destroy"==e&&i.removeClass("tag-editor-hidden-src").removeData("options").off("focus.tag-editor").next(".tag-editor").remove()}),"getTags"==e?s:this}return window.getSelection&&t(document).off("keydown.tag-editor").on("keydown.tag-editor",function(e){if(8==e.which||46==e.which||e.ctrlKey&&88==e.which){try{var a=getSelection(),r="INPUT"!=document.activeElement.tagName?t(a.getRangeAt(0).startContainer.parentNode).closest(".tag-editor"):0}catch(e){r=0}if(a.rangeCount>0&&r&&r.length){var l=[],n=a.toString().split(r.prev().data("options").dregex);for(i=0;i
    '+o.placeholder+"
    ")}function i(i){var a=c.toString();c=t(".tag-editor-tag:not(.deleted)",s).map(function(e,i){var a=t.trim(t(this).hasClass("active")?t(this).find("input").val():t(i).text());return a?a:void 0}).get(),s.data("tags",c),r.val(c.join(o.delimiter[0])),i||a!=c.toString()&&o.onChange(r,s,c),e()}function a(e){for(var a,n=e.closest("li"),d=e.val().replace(/ +/," ").split(o.dregex),g=e.data("old_tag"),f=c.slice(0),h=!1,u=0;u
     '+o.delimiter[0]+'
    '+l(v)+'
    '),o.maxTags&&f.length>=o.maxTags)){h=!0;break}e.attr("maxlength",o.maxLength).removeData("old_tag").val(""),h?e.blur():e.focus(),i()}var r=t(this),c=[],s=t("
      ').insertAfter(r);r.addClass("tag-editor-hidden-src").data("options",o).on("focus.tag-editor",function(){s.click()}),s.append('
    •  
    • ');var d='
    •  '+o.delimiter[0]+'
    • ';s.click(function(e,i){var a,r,l=99999;if(!window.getSelection||""==getSelection())return o.maxTags&&s.data("tags").length>=o.maxTags?(s.find("input").blur(),!1):(n=!0,t("input:focus",s).blur(),n?(n=!0,t(".placeholder",s).remove(),i&&i.length?r="before":t(".tag-editor-tag",s).each(function(){var n=t(this),o=n.offset(),c=o.left,s=o.top;e.pageY>=s&&e.pageY<=s+n.height()&&(e.pageXa&&(l=a,i=n))}),"before"==r?t(d).insertBefore(i.closest("li")).find(".tag-editor-tag").click():"after"==r?t(d).insertAfter(i.closest("li")).find(".tag-editor-tag").click():t(d).appendTo(s).find(".tag-editor-tag").click(),!1):!1)}),s.on("click",".tag-editor-delete",function(){if(t(this).prev().hasClass("active"))return t(this).closest("li").find("input").caret(-1),!1;var a=t(this).closest("li"),l=a.find(".tag-editor-tag");return o.beforeTagDelete(r,s,c,l.text())===!1?!1:(l.addClass("deleted").animate({width:0},o.animateDelete,function(){a.remove(),e()}),i(),!1)}),o.clickDelete&&s.on("mousedown",".tag-editor-tag",function(a){if(a.ctrlKey||a.which>1){var l=t(this).closest("li"),n=l.find(".tag-editor-tag");return o.beforeTagDelete(r,s,c,n.text())===!1?!1:(n.addClass("deleted").animate({width:0},o.animateDelete,function(){l.remove(),e()}),i(),!1)}}),s.on("click",".tag-editor-tag",function(e){if(o.clickDelete&&(e.ctrlKey||e.which>1))return!1;if(!t(this).hasClass("active")){var i=t(this).text(),a=Math.abs((t(this).offset().left-e.pageX)/t(this).width()),r=parseInt(i.length*a),n=t(this).html('').addClass("active").find("input");if(n.data("old_tag",i).tagEditorInput().focus().caret(r),o.autocomplete){var c=t.extend({},o.autocomplete),d="select"in c?o.autocomplete.select:"";c.select=function(e,i){d&&d(e,i),setTimeout(function(){s.trigger("click",[t(".active",s).find("input").closest("li").next("li").find(".tag-editor-tag")])},20)},n.autocomplete(c)}}return!1}),s.on("blur","input",function(d){d.stopPropagation();var g=t(this),f=g.data("old_tag"),h=t.trim(g.val().replace(/ +/," ").replace(o.dregex,o.delimiter[0]));if(h){if(h.indexOf(o.delimiter[0])>=0)return void a(g);if(h!=f)if(o.forceLowercase&&(h=h.toLowerCase()),cb_val=o.beforeTagSave(r,s,c,f,h),h=cb_val||h,cb_val===!1){if(f)return g.val(f).focus(),n=!1,void i();try{g.closest("li").remove()}catch(d){}f&&i()}else o.removeDuplicates&&t(".tag-editor-tag:not(.active)",s).each(function(){t(this).text()==h&&t(this).closest("li").remove()})}else{if(f&&o.beforeTagDelete(r,s,c,f)===!1)return g.val(f).focus(),n=!1,void i();try{g.closest("li").remove()}catch(d){}f&&i()}g.parent().html(l(h)).removeClass("active"),h!=f&&i(),e()});var g;s.on("paste","input",function(){t(this).removeAttr("maxlength"),g=t(this),setTimeout(function(){a(g)},30)});var f;s.on("keypress","input",function(e){o.delimiter.indexOf(String.fromCharCode(e.which))>=0&&(f=t(this),setTimeout(function(){a(f)},20))}),s.on("keydown","input",function(e){var i=t(this);if((37==e.which||!o.autocomplete&&38==e.which)&&!i.caret()||8==e.which&&!i.val()){var a=i.closest("li").prev("li").find(".tag-editor-tag");return a.length?a.click().find("input").caret(-1):!i.val()||o.maxTags&&s.data("tags").length>=o.maxTags||t(d).insertBefore(i.closest("li")).find(".tag-editor-tag").click(),!1}if((39==e.which||!o.autocomplete&&40==e.which)&&i.caret()==i.val().length){var l=i.closest("li").next("li").find(".tag-editor-tag");return l.length?l.click().find("input").caret(0):i.val()&&s.click(),!1}if(9==e.which){if(e.shiftKey){var a=i.closest("li").prev("li").find(".tag-editor-tag");if(a.length)a.click().find("input").caret(0);else{if(!i.val()||o.maxTags&&s.data("tags").length>=o.maxTags)return r.attr("disabled","disabled"),void setTimeout(function(){r.removeAttr("disabled")},30);t(d).insertBefore(i.closest("li")).find(".tag-editor-tag").click()}return!1}var l=i.closest("li").next("li").find(".tag-editor-tag");if(l.length)l.click().find("input").caret(0);else{if(!i.val())return;s.click()}return!1}if(!(46!=e.which||t.trim(i.val())&&i.caret()!=i.val().length)){var l=i.closest("li").next("li").find(".tag-editor-tag");return l.length?l.click().find("input").caret(0):i.val()&&s.click(),!1}if(13==e.which)return s.trigger("click",[i.closest("li").next("li").find(".tag-editor-tag")]),o.maxTags&&s.data("tags").length>=o.maxTags&&s.find("input").blur(),!1;if(36!=e.which||i.caret()){if(35==e.which&&i.caret()==i.val().length)s.find(".tag-editor-tag").last().click();else if(27==e.which)return i.val(i.data("old_tag")?i.data("old_tag"):"").blur(),!1}else s.find(".tag-editor-tag").first().click()});for(var h=o.initialTags.length?o.initialTags:r.val().split(o.dregex),u=0;u=o.maxTags);u++){var v=t.trim(h[u].replace(/ +/," "));v&&(o.forceLowercase&&(v=v.toLowerCase()),c.push(v),s.append('
    •  '+o.delimiter[0]+'
      '+l(v)+'
    • '))}i(!0),o.sortable&&t.fn.sortable&&s.sortable({distance:5,cancel:".tag-editor-spacer, input",helper:"clone",update:function(){i()}})})},t.fn.tagEditor.defaults={initialTags:[],maxTags:0,maxLength:50,delimiter:",;",placeholder:"",forceLowercase:!0,removeDuplicates:!0,clickDelete:!1,animateDelete:175,sortable:!0,autocomplete:null,onChange:function(){},beforeTagSave:function(){},beforeTagDelete:function(){}}}(jQuery); \ No newline at end of file +!function(t){t.fn.tagEditorInput=function(){var e=" ",i=t(this),a=parseInt(i.css("fontSize")),r=t("").css({position:"absolute",top:-9999,left:-9999,width:"auto",fontSize:i.css("fontSize"),fontFamily:i.css("fontFamily"),fontWeight:i.css("fontWeight"),letterSpacing:i.css("letterSpacing"),whiteSpace:"nowrap"}),l=function(){if(e!==(e=i.val())){r.text(e);var t=r.width()+a;20>t&&(t=20),t!=i.width()&&i.width(t)}};return r.insertAfter(i),i.bind("keyup keydown focus",l)},t.fn.tagEditor=function(e,a,r){function l(t){return t.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}var n,o=t.extend({},t.fn.tagEditor.defaults,e),c=this;if(o.dregex=new RegExp("["+o.delimiter.replace("-","-")+"]","g"),"string"==typeof e){var s=[];return c.each(function(){var i=t(this),l=i.data("options"),n=i.next(".tag-editor");if("getTags"==e)s.push({field:i[0],editor:n,tags:n.data("tags")});else if("addTag"==e){if(l.maxTags&&n.data("tags").length>=l.maxTags)return!1;t('
    •  '+l.delimiter[0]+'
    • ').appendTo(n).find(".tag-editor-tag").html('').addClass("active").find("input").val(a).blur(),r?t(".placeholder",n).remove():n.click()}else"removeTag"==e?(t(".tag-editor-tag",n).filter(function(){return t(this).text()==a}).closest("li").find(".tag-editor-delete").click(),r||n.click()):"destroy"==e&&i.removeClass("tag-editor-hidden-src").removeData("options").off("focus.tag-editor").next(".tag-editor").remove()}),"getTags"==e?s:this}return window.getSelection&&t(document).off("keydown.tag-editor").on("keydown.tag-editor",function(e){if(8==e.which||46==e.which||e.ctrlKey&&88==e.which){try{var a=getSelection(),r="INPUT"!=document.activeElement.tagName?t(a.getRangeAt(0).startContainer.parentNode).closest(".tag-editor"):0}catch(e){r=0}if(a.rangeCount>0&&r&&r.length){var l=[],n=a.toString().split(r.prev().data("options").dregex);for(i=0;i
      '+o.placeholder+"
      ")}function i(i){var a=c.toString();c=t(".tag-editor-tag:not(.deleted)",s).map(function(e,i){var a=t.trim(t(this).hasClass("active")?t(this).find("input").val():t(i).text());return a?a:void 0}).get(),s.data("tags",c),r.val(c.join(o.delimiter[0])),i||a!=c.toString()&&o.onChange(r,s,c),e()}function a(e){for(var a,n=e.closest("li"),d=e.val().replace(/ +/," ").split(o.dregex),g=e.data("old_tag"),f=c.slice(0),h=!1,u=0;u
       '+o.delimiter[0]+'
      '+l(v)+'
      '),o.maxTags&&f.length>=o.maxTags)){h=!0;break}e.attr("maxlength",o.maxLength).removeData("old_tag").val(""),h?e.blur():e.focus(),i()}var r=t(this),c=[],s=t("
        ').insertAfter(r);r.addClass("tag-editor-hidden-src").data("options",o).on("focus.tag-editor",function(){s.click()}),s.append('
      •  
      • ');var d='
      •  '+o.delimiter[0]+'
      • ';s.click(function(e,i){var a,r,l=99999;if(!window.getSelection||""==getSelection())return o.maxTags&&s.data("tags").length>=o.maxTags?(s.find("input").blur(),!1):(n=!0,t("input:focus",s).blur(),n?(n=!0,t(".placeholder",s).remove(),i&&i.length?r="before":t(".tag-editor-tag",s).each(function(){var n=t(this),o=n.offset(),c=o.left,s=o.top;e.pageY>=s&&e.pageY<=s+n.height()&&(e.pageXa&&(l=a,i=n))}),"before"==r?t(d).insertBefore(i.closest("li")).find(".tag-editor-tag").click():"after"==r?t(d).insertAfter(i.closest("li")).find(".tag-editor-tag").click():t(d).appendTo(s).find(".tag-editor-tag").click(),!1):!1)}),s.on("click",".tag-editor-delete",function(){if(t(this).prev().hasClass("active"))return t(this).closest("li").find("input").caret(-1),!1;var a=t(this).closest("li"),l=a.find(".tag-editor-tag");return o.beforeTagDelete(r,s,c,l.text())===!1?!1:(l.addClass("deleted").animate({width:0},o.animateDelete,function(){a.remove(),e()}),i(),!1)}),o.clickDelete&&s.on("mousedown",".tag-editor-tag",function(a){if(a.ctrlKey||a.which>1){var l=t(this).closest("li"),n=l.find(".tag-editor-tag");return o.beforeTagDelete(r,s,c,n.text())===!1?!1:(n.addClass("deleted").animate({width:0},o.animateDelete,function(){l.remove(),e()}),i(),!1)}}),s.on("click",".tag-editor-tag",function(e){if(o.clickDelete&&(e.ctrlKey||e.which>1))return!1;if(!t(this).hasClass("active")){var i=t(this).text(),a=Math.abs((t(this).offset().left-e.pageX)/t(this).width()),r=parseInt(i.length*a),n=t(this).html('').addClass("active").find("input");if(n.data("old_tag",i).tagEditorInput().focus().caret(r),o.autocomplete){var c=t.extend({},o.autocomplete),d="select"in c?o.autocomplete.select:"";c.select=function(e,i){d&&d(e,i),setTimeout(function(){s.trigger("click",[t(".active",s).find("input").closest("li").next("li").find(".tag-editor-tag")])},20)},n.autocomplete(c)}}return!1}),s.on("blur","input",function(d){d.stopPropagation();var g=t(this),f=g.data("old_tag"),h=t.trim(g.val().replace(/ +/," ").replace(o.dregex,o.delimiter[0]));if(h){if(h.indexOf(o.delimiter[0])>=0)return void a(g);if(h!=f)if(o.forceLowercase&&(h=h.toLowerCase()),cb_val=o.beforeTagSave(r,s,c,f,h),h=cb_val||h,cb_val===!1){if(f)return g.val(f).focus(),n=!1,void i();try{g.closest("li").remove()}catch(d){}f&&i()}else o.removeDuplicates&&t(".tag-editor-tag:not(.active)",s).each(function(){t(this).text()==h&&t(this).closest("li").remove()})}else{if(f&&o.beforeTagDelete(r,s,c,f)===!1)return g.val(f).focus(),n=!1,void i();try{g.closest("li").remove()}catch(d){}f&&i()}g.parent().html(l(h)).removeClass("active"),h!=f&&i(),e()});var g;s.on("paste","input",function(){t(this).removeAttr("maxlength"),g=t(this),setTimeout(function(){a(g)},30)});var f;s.on("keypress","input",function(e){o.delimiter.indexOf(String.fromCharCode(e.which))>=0&&(f=t(this),setTimeout(function(){a(f)},20))}),s.on("keydown","input",function(e){var i=t(this);if((37==e.which||!o.autocomplete&&38==e.which)&&!i.caret()||8==e.which&&!i.val()){var a=i.closest("li").prev("li").find(".tag-editor-tag");return a.length?a.click().find("input").caret(-1):!i.val()||o.maxTags&&s.data("tags").length>=o.maxTags||t(d).insertBefore(i.closest("li")).find(".tag-editor-tag").click(),!1}if((39==e.which||!o.autocomplete&&40==e.which)&&i.caret()==i.val().length){var l=i.closest("li").next("li").find(".tag-editor-tag");return l.length?l.click().find("input").caret(0):i.val()&&s.click(),!1}if(9==e.which){if(e.shiftKey){var a=i.closest("li").prev("li").find(".tag-editor-tag");if(a.length)a.click().find("input").caret(0);else{if(!i.val()||o.maxTags&&s.data("tags").length>=o.maxTags)return r.attr("disabled","disabled"),void setTimeout(function(){r.removeAttr("disabled")},30);t(d).insertBefore(i.closest("li")).find(".tag-editor-tag").click()}return!1}var l=i.closest("li").next("li").find(".tag-editor-tag");if(l.length)l.click().find("input").caret(0);else{if(!i.val())return;s.click()}return!1}if(!(46!=e.which||t.trim(i.val())&&i.caret()!=i.val().length)){var l=i.closest("li").next("li").find(".tag-editor-tag");return l.length?l.click().find("input").caret(0):i.val()&&s.click(),!1}if(13==e.which)return s.trigger("click",[i.closest("li").next("li").find(".tag-editor-tag")]),o.maxTags&&s.data("tags").length>=o.maxTags&&s.find("input").blur(),!1;if(36!=e.which||i.caret()){if(35==e.which&&i.caret()==i.val().length)s.find(".tag-editor-tag").last().click();else if(27==e.which)return i.val(i.data("old_tag")?i.data("old_tag"):"").blur(),!1}else s.find(".tag-editor-tag").first().click()});for(var h=o.initialTags.length?o.initialTags:r.val().split(o.dregex),u=0;u=o.maxTags);u++){var v=t.trim(h[u].replace(/ +/," "));v&&(o.forceLowercase&&(v=v.toLowerCase()),c.push(v),s.append('
      •  '+o.delimiter[0]+'
        '+l(v)+'
      • '))}i(!0),o.sortable&&t.fn.sortable&&s.sortable({distance:5,cancel:".tag-editor-spacer, input",helper:"clone",update:function(){i()}})})},t.fn.tagEditor.defaults={initialTags:[],maxTags:0,maxLength:50,delimiter:",;",placeholder:"",forceLowercase:!0,removeDuplicates:!0,clickDelete:!1,animateDelete:175,sortable:!0,autocomplete:null,onChange:function(){},beforeTagSave:function(){},beforeTagDelete:function(){}}}(jQuery); + +// jquery.caret.min.js +// http://code.accursoft.com/caret - 1.3.3 +!function(e){e.fn.caret=function(e){var t=this[0],n="true"===t.contentEditable;if(0==arguments.length){if(window.getSelection){if(n){t.focus();var o=window.getSelection().getRangeAt(0),r=o.cloneRange();return r.selectNodeContents(t),r.setEnd(o.endContainer,o.endOffset),r.toString().length}return t.selectionStart}if(document.selection){if(t.focus(),n){var o=document.selection.createRange(),r=document.body.createTextRange();return r.moveToElementText(t),r.setEndPoint("EndToEnd",o),r.text.length}var e=0,c=t.createTextRange(),r=document.selection.createRange().duplicate(),a=r.getBookmark();for(c.moveToBookmark(a);0!==c.moveStart("character",-1);)e++;return e}return t.selectionStart?t.selectionStart:0}if(-1==e&&(e=this[n?"text":"val"]().length),window.getSelection)n?(t.focus(),window.getSelection().collapse(t.firstChild,e)):t.setSelectionRange(e,e);else if(document.body.createTextRange)if(n){var c=document.body.createTextRange();c.moveToElementText(t),c.moveStart("character",e),c.collapse(!0),c.select()}else{var c=t.createTextRange();c.move("character",e),c.select()}return n||t.focus(),e}}(jQuery); diff --git a/src/main/resources/static/plugins/layer/layer.js b/src/main/resources/static/halo-backend/plugins/layer/layer.js old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/layer/layer.js rename to src/main/resources/static/halo-backend/plugins/layer/layer.js diff --git a/src/main/resources/static/plugins/layer/theme/default/icon-ext.png b/src/main/resources/static/halo-backend/plugins/layer/theme/default/icon-ext.png old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/layer/theme/default/icon-ext.png rename to src/main/resources/static/halo-backend/plugins/layer/theme/default/icon-ext.png diff --git a/src/main/resources/static/plugins/layer/theme/default/icon.png b/src/main/resources/static/halo-backend/plugins/layer/theme/default/icon.png old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/layer/theme/default/icon.png rename to src/main/resources/static/halo-backend/plugins/layer/theme/default/icon.png diff --git a/src/main/resources/static/plugins/layer/theme/default/layer.css b/src/main/resources/static/halo-backend/plugins/layer/theme/default/layer.css old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/layer/theme/default/layer.css rename to src/main/resources/static/halo-backend/plugins/layer/theme/default/layer.css diff --git a/src/main/resources/static/plugins/layer/theme/default/loading-0.gif b/src/main/resources/static/halo-backend/plugins/layer/theme/default/loading-0.gif old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/layer/theme/default/loading-0.gif rename to src/main/resources/static/halo-backend/plugins/layer/theme/default/loading-0.gif diff --git a/src/main/resources/static/plugins/layer/theme/default/loading-1.gif b/src/main/resources/static/halo-backend/plugins/layer/theme/default/loading-1.gif old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/layer/theme/default/loading-1.gif rename to src/main/resources/static/halo-backend/plugins/layer/theme/default/loading-1.gif diff --git a/src/main/resources/static/plugins/layer/theme/default/loading-2.gif b/src/main/resources/static/halo-backend/plugins/layer/theme/default/loading-2.gif old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/layer/theme/default/loading-2.gif rename to src/main/resources/static/halo-backend/plugins/layer/theme/default/loading-2.gif diff --git a/src/main/resources/static/plugins/pace/pace.css b/src/main/resources/static/halo-backend/plugins/pace/pace.css old mode 100755 new mode 100644 similarity index 96% rename from src/main/resources/static/plugins/pace/pace.css rename to src/main/resources/static/halo-backend/plugins/pace/pace.css index 2270aafdd..36a299899 --- a/src/main/resources/static/plugins/pace/pace.css +++ b/src/main/resources/static/halo-backend/plugins/pace/pace.css @@ -1,85 +1,85 @@ -.pace { - -webkit-pointer-events: none; - pointer-events: none; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} - -.pace-inactive { - display: none; -} - -.pace .pace-progress { - background: #fff; - position: fixed; - z-index: 2000; - top: 0; - right: 100%; - width: 100%; - height: 2px; -} - -.pace .pace-progress-inner { - display: block; - position: absolute; - right: 0px; - width: 100px; - height: 100%; - box-shadow: 0 0 10px #fff, 0 0 5px #fff; - opacity: 1.0; - -webkit-transform: rotate(3deg) translate(0px, -4px); - -moz-transform: rotate(3deg) translate(0px, -4px); - -ms-transform: rotate(3deg) translate(0px, -4px); - -o-transform: rotate(3deg) translate(0px, -4px); - transform: rotate(3deg) translate(0px, -4px); -} - -.pace .pace-activity { - display: block; - position: fixed; - z-index: 2000; - top: 15px; - right: 50%; - width: 14px; - height: 14px; - border: solid 2px transparent; - border-top-color: #fff; - border-left-color: #fff; - border-radius: 10px; - -webkit-animation: pace-spinner 400ms linear infinite; - -moz-animation: pace-spinner 400ms linear infinite; - -ms-animation: pace-spinner 400ms linear infinite; - -o-animation: pace-spinner 400ms linear infinite; - animation: pace-spinner 400ms linear infinite; -} - -@media (max-width: 767px) { - .pace .pace-activity { - top: 15px; - right: 15px; - width: 14px; - height: 14px; - } -} - -@-webkit-keyframes pace-spinner { - 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } - 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } -} -@-moz-keyframes pace-spinner { - 0% { -moz-transform: rotate(0deg); transform: rotate(0deg); } - 100% { -moz-transform: rotate(360deg); transform: rotate(360deg); } -} -@-o-keyframes pace-spinner { - 0% { -o-transform: rotate(0deg); transform: rotate(0deg); } - 100% { -o-transform: rotate(360deg); transform: rotate(360deg); } -} -@-ms-keyframes pace-spinner { - 0% { -ms-transform: rotate(0deg); transform: rotate(0deg); } - 100% { -ms-transform: rotate(360deg); transform: rotate(360deg); } -} -@keyframes pace-spinner { - 0% { transform: rotate(0deg); transform: rotate(0deg); } - 100% { transform: rotate(360deg); transform: rotate(360deg); } +.pace { + -webkit-pointer-events: none; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.pace-inactive { + display: none; +} + +.pace .pace-progress { + background: #fff; + position: fixed; + z-index: 2000; + top: 0; + right: 100%; + width: 100%; + height: 2px; +} + +.pace .pace-progress-inner { + display: block; + position: absolute; + right: 0px; + width: 100px; + height: 100%; + box-shadow: 0 0 10px #fff, 0 0 5px #fff; + opacity: 1.0; + -webkit-transform: rotate(3deg) translate(0px, -4px); + -moz-transform: rotate(3deg) translate(0px, -4px); + -ms-transform: rotate(3deg) translate(0px, -4px); + -o-transform: rotate(3deg) translate(0px, -4px); + transform: rotate(3deg) translate(0px, -4px); +} + +.pace .pace-activity { + display: block; + position: fixed; + z-index: 2000; + top: 15px; + right: 50%; + width: 14px; + height: 14px; + border: solid 2px transparent; + border-top-color: #fff; + border-left-color: #fff; + border-radius: 10px; + -webkit-animation: pace-spinner 400ms linear infinite; + -moz-animation: pace-spinner 400ms linear infinite; + -ms-animation: pace-spinner 400ms linear infinite; + -o-animation: pace-spinner 400ms linear infinite; + animation: pace-spinner 400ms linear infinite; +} + +@media (max-width: 767px) { + .pace .pace-activity { + top: 15px; + right: 15px; + width: 14px; + height: 14px; + } +} + +@-webkit-keyframes pace-spinner { + 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } + 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } +} +@-moz-keyframes pace-spinner { + 0% { -moz-transform: rotate(0deg); transform: rotate(0deg); } + 100% { -moz-transform: rotate(360deg); transform: rotate(360deg); } +} +@-o-keyframes pace-spinner { + 0% { -o-transform: rotate(0deg); transform: rotate(0deg); } + 100% { -o-transform: rotate(360deg); transform: rotate(360deg); } +} +@-ms-keyframes pace-spinner { + 0% { -ms-transform: rotate(0deg); transform: rotate(0deg); } + 100% { -ms-transform: rotate(360deg); transform: rotate(360deg); } +} +@keyframes pace-spinner { + 0% { transform: rotate(0deg); transform: rotate(0deg); } + 100% { transform: rotate(360deg); transform: rotate(360deg); } } \ No newline at end of file diff --git a/src/main/resources/static/plugins/pace/pace.js b/src/main/resources/static/halo-backend/plugins/pace/pace.js old mode 100755 new mode 100644 similarity index 97% rename from src/main/resources/static/plugins/pace/pace.js rename to src/main/resources/static/halo-backend/plugins/pace/pace.js index 28c521464..0fecd3241 --- a/src/main/resources/static/plugins/pace/pace.js +++ b/src/main/resources/static/halo-backend/plugins/pace/pace.js @@ -1,935 +1,935 @@ -(function() { - var AjaxMonitor, Bar, DocumentMonitor, ElementMonitor, ElementTracker, EventLagMonitor, Evented, Events, NoTargetError, Pace, RequestIntercept, SOURCE_KEYS, Scaler, SocketRequestTracker, XHRRequestTracker, animation, avgAmplitude, bar, cancelAnimation, cancelAnimationFrame, defaultOptions, extend, extendNative, getFromDOM, getIntercept, handlePushState, ignoreStack, init, now, options, requestAnimationFrame, result, runAnimation, scalers, shouldIgnoreURL, shouldTrack, source, sources, uniScaler, _WebSocket, _XDomainRequest, _XMLHttpRequest, _i, _intercept, _len, _pushState, _ref, _ref1, _replaceState, - __slice = [].slice, - __hasProp = {}.hasOwnProperty, - __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, - __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; - - defaultOptions = { - catchupTime: 100, - initialRate: .03, - minTime: 250, - ghostTime: 100, - maxProgressPerFrame: 20, - easeFactor: 1.25, - startOnPageLoad: true, - restartOnPushState: true, - restartOnRequestAfter: 500, - target: 'body', - elements: { - checkInterval: 100, - selectors: ['body'] - }, - eventLag: { - minSamples: 10, - sampleCount: 3, - lagThreshold: 3 - }, - ajax: { - trackMethods: ['GET'], - trackWebSockets: true, - ignoreURLs: [] - } - }; - - now = function() { - var _ref; - return (_ref = typeof performance !== "undefined" && performance !== null ? typeof performance.now === "function" ? performance.now() : void 0 : void 0) != null ? _ref : +(new Date); - }; - - requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; - - cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame; - - if (requestAnimationFrame == null) { - requestAnimationFrame = function(fn) { - return setTimeout(fn, 50); - }; - cancelAnimationFrame = function(id) { - return clearTimeout(id); - }; - } - - runAnimation = function(fn) { - var last, tick; - last = now(); - tick = function() { - var diff; - diff = now() - last; - if (diff >= 33) { - last = now(); - return fn(diff, function() { - return requestAnimationFrame(tick); - }); - } else { - return setTimeout(tick, 33 - diff); - } - }; - return tick(); - }; - - result = function() { - var args, key, obj; - obj = arguments[0], key = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : []; - if (typeof obj[key] === 'function') { - return obj[key].apply(obj, args); - } else { - return obj[key]; - } - }; - - extend = function() { - var key, out, source, sources, val, _i, _len; - out = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : []; - for (_i = 0, _len = sources.length; _i < _len; _i++) { - source = sources[_i]; - if (source) { - for (key in source) { - if (!__hasProp.call(source, key)) continue; - val = source[key]; - if ((out[key] != null) && typeof out[key] === 'object' && (val != null) && typeof val === 'object') { - extend(out[key], val); - } else { - out[key] = val; - } - } - } - } - return out; - }; - - avgAmplitude = function(arr) { - var count, sum, v, _i, _len; - sum = count = 0; - for (_i = 0, _len = arr.length; _i < _len; _i++) { - v = arr[_i]; - sum += Math.abs(v); - count++; - } - return sum / count; - }; - - getFromDOM = function(key, json) { - var data, e, el; - if (key == null) { - key = 'options'; - } - if (json == null) { - json = true; - } - el = document.querySelector("[data-pace-" + key + "]"); - if (!el) { - return; - } - data = el.getAttribute("data-pace-" + key); - if (!json) { - return data; - } - try { - return JSON.parse(data); - } catch (_error) { - e = _error; - return typeof console !== "undefined" && console !== null ? console.error("Error parsing inline pace options", e) : void 0; - } - }; - - Evented = (function() { - function Evented() {} - - Evented.prototype.on = function(event, handler, ctx, once) { - var _base; - if (once == null) { - once = false; - } - if (this.bindings == null) { - this.bindings = {}; - } - if ((_base = this.bindings)[event] == null) { - _base[event] = []; - } - return this.bindings[event].push({ - handler: handler, - ctx: ctx, - once: once - }); - }; - - Evented.prototype.once = function(event, handler, ctx) { - return this.on(event, handler, ctx, true); - }; - - Evented.prototype.off = function(event, handler) { - var i, _ref, _results; - if (((_ref = this.bindings) != null ? _ref[event] : void 0) == null) { - return; - } - if (handler == null) { - return delete this.bindings[event]; - } else { - i = 0; - _results = []; - while (i < this.bindings[event].length) { - if (this.bindings[event][i].handler === handler) { - _results.push(this.bindings[event].splice(i, 1)); - } else { - _results.push(i++); - } - } - return _results; - } - }; - - Evented.prototype.trigger = function() { - var args, ctx, event, handler, i, once, _ref, _ref1, _results; - event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; - if ((_ref = this.bindings) != null ? _ref[event] : void 0) { - i = 0; - _results = []; - while (i < this.bindings[event].length) { - _ref1 = this.bindings[event][i], handler = _ref1.handler, ctx = _ref1.ctx, once = _ref1.once; - handler.apply(ctx != null ? ctx : this, args); - if (once) { - _results.push(this.bindings[event].splice(i, 1)); - } else { - _results.push(i++); - } - } - return _results; - } - }; - - return Evented; - - })(); - - Pace = window.Pace || {}; - - window.Pace = Pace; - - extend(Pace, Evented.prototype); - - options = Pace.options = extend({}, defaultOptions, window.paceOptions, getFromDOM()); - - _ref = ['ajax', 'document', 'eventLag', 'elements']; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - source = _ref[_i]; - if (options[source] === true) { - options[source] = defaultOptions[source]; - } - } - - NoTargetError = (function(_super) { - __extends(NoTargetError, _super); - - function NoTargetError() { - _ref1 = NoTargetError.__super__.constructor.apply(this, arguments); - return _ref1; - } - - return NoTargetError; - - })(Error); - - Bar = (function() { - function Bar() { - this.progress = 0; - } - - Bar.prototype.getElement = function() { - var targetElement; - if (this.el == null) { - targetElement = document.querySelector(options.target); - if (!targetElement) { - throw new NoTargetError; - } - this.el = document.createElement('div'); - this.el.className = "pace pace-active"; - document.body.className = document.body.className.replace(/pace-done/g, ''); - document.body.className += ' pace-running'; - this.el.innerHTML = '
        \n
        \n
        \n
        '; - if (targetElement.firstChild != null) { - targetElement.insertBefore(this.el, targetElement.firstChild); - } else { - targetElement.appendChild(this.el); - } - } - return this.el; - }; - - Bar.prototype.finish = function() { - var el; - el = this.getElement(); - el.className = el.className.replace('pace-active', ''); - el.className += ' pace-inactive'; - document.body.className = document.body.className.replace('pace-running', ''); - return document.body.className += ' pace-done'; - }; - - Bar.prototype.update = function(prog) { - this.progress = prog; - return this.render(); - }; - - Bar.prototype.destroy = function() { - try { - this.getElement().parentNode.removeChild(this.getElement()); - } catch (_error) { - NoTargetError = _error; - } - return this.el = void 0; - }; - - Bar.prototype.render = function() { - var el, key, progressStr, transform, _j, _len1, _ref2; - if (document.querySelector(options.target) == null) { - return false; - } - el = this.getElement(); - transform = "translate3d(" + this.progress + "%, 0, 0)"; - _ref2 = ['webkitTransform', 'msTransform', 'transform']; - for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { - key = _ref2[_j]; - el.children[0].style[key] = transform; - } - if (!this.lastRenderedProgress || this.lastRenderedProgress | 0 !== this.progress | 0) { - el.children[0].setAttribute('data-progress-text', "" + (this.progress | 0) + "%"); - if (this.progress >= 100) { - progressStr = '99'; - } else { - progressStr = this.progress < 10 ? "0" : ""; - progressStr += this.progress | 0; - } - el.children[0].setAttribute('data-progress', "" + progressStr); - } - return this.lastRenderedProgress = this.progress; - }; - - Bar.prototype.done = function() { - return this.progress >= 100; - }; - - return Bar; - - })(); - - Events = (function() { - function Events() { - this.bindings = {}; - } - - Events.prototype.trigger = function(name, val) { - var binding, _j, _len1, _ref2, _results; - if (this.bindings[name] != null) { - _ref2 = this.bindings[name]; - _results = []; - for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { - binding = _ref2[_j]; - _results.push(binding.call(this, val)); - } - return _results; - } - }; - - Events.prototype.on = function(name, fn) { - var _base; - if ((_base = this.bindings)[name] == null) { - _base[name] = []; - } - return this.bindings[name].push(fn); - }; - - return Events; - - })(); - - _XMLHttpRequest = window.XMLHttpRequest; - - _XDomainRequest = window.XDomainRequest; - - _WebSocket = window.WebSocket; - - extendNative = function(to, from) { - var e, key, _results; - _results = []; - for (key in from.prototype) { - try { - if ((to[key] == null) && typeof from[key] !== 'function') { - if (typeof Object.defineProperty === 'function') { - _results.push(Object.defineProperty(to, key, { - get: function() { - return from.prototype[key]; - }, - configurable: true, - enumerable: true - })); - } else { - _results.push(to[key] = from.prototype[key]); - } - } else { - _results.push(void 0); - } - } catch (_error) { - e = _error; - } - } - return _results; - }; - - ignoreStack = []; - - Pace.ignore = function() { - var args, fn, ret; - fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; - ignoreStack.unshift('ignore'); - ret = fn.apply(null, args); - ignoreStack.shift(); - return ret; - }; - - Pace.track = function() { - var args, fn, ret; - fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; - ignoreStack.unshift('track'); - ret = fn.apply(null, args); - ignoreStack.shift(); - return ret; - }; - - shouldTrack = function(method) { - var _ref2; - if (method == null) { - method = 'GET'; - } - if (ignoreStack[0] === 'track') { - return 'force'; - } - if (!ignoreStack.length && options.ajax) { - if (method === 'socket' && options.ajax.trackWebSockets) { - return true; - } else if (_ref2 = method.toUpperCase(), __indexOf.call(options.ajax.trackMethods, _ref2) >= 0) { - return true; - } - } - return false; - }; - - RequestIntercept = (function(_super) { - __extends(RequestIntercept, _super); - - function RequestIntercept() { - var monitorXHR, - _this = this; - RequestIntercept.__super__.constructor.apply(this, arguments); - monitorXHR = function(req) { - var _open; - _open = req.open; - return req.open = function(type, url, async) { - if (shouldTrack(type)) { - _this.trigger('request', { - type: type, - url: url, - request: req - }); - } - return _open.apply(req, arguments); - }; - }; - window.XMLHttpRequest = function(flags) { - var req; - req = new _XMLHttpRequest(flags); - monitorXHR(req); - return req; - }; - try { - extendNative(window.XMLHttpRequest, _XMLHttpRequest); - } catch (_error) {} - if (_XDomainRequest != null) { - window.XDomainRequest = function() { - var req; - req = new _XDomainRequest; - monitorXHR(req); - return req; - }; - try { - extendNative(window.XDomainRequest, _XDomainRequest); - } catch (_error) {} - } - if ((_WebSocket != null) && options.ajax.trackWebSockets) { - window.WebSocket = function(url, protocols) { - var req; - if (protocols != null) { - req = new _WebSocket(url, protocols); - } else { - req = new _WebSocket(url); - } - if (shouldTrack('socket')) { - _this.trigger('request', { - type: 'socket', - url: url, - protocols: protocols, - request: req - }); - } - return req; - }; - try { - extendNative(window.WebSocket, _WebSocket); - } catch (_error) {} - } - } - - return RequestIntercept; - - })(Events); - - _intercept = null; - - getIntercept = function() { - if (_intercept == null) { - _intercept = new RequestIntercept; - } - return _intercept; - }; - - shouldIgnoreURL = function(url) { - var pattern, _j, _len1, _ref2; - _ref2 = options.ajax.ignoreURLs; - for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { - pattern = _ref2[_j]; - if (typeof pattern === 'string') { - if (url.indexOf(pattern) !== -1) { - return true; - } - } else { - if (pattern.test(url)) { - return true; - } - } - } - return false; - }; - - getIntercept().on('request', function(_arg) { - var after, args, request, type, url; - type = _arg.type, request = _arg.request, url = _arg.url; - if (shouldIgnoreURL(url)) { - return; - } - if (!Pace.running && (options.restartOnRequestAfter !== false || shouldTrack(type) === 'force')) { - args = arguments; - after = options.restartOnRequestAfter || 0; - if (typeof after === 'boolean') { - after = 0; - } - return setTimeout(function() { - var stillActive, _j, _len1, _ref2, _ref3, _results; - if (type === 'socket') { - stillActive = request.readyState < 2; - } else { - stillActive = (0 < (_ref2 = request.readyState) && _ref2 < 4); - } - if (stillActive) { - Pace.restart(); - _ref3 = Pace.sources; - _results = []; - for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) { - source = _ref3[_j]; - if (source instanceof AjaxMonitor) { - source.watch.apply(source, args); - break; - } else { - _results.push(void 0); - } - } - return _results; - } - }, after); - } - }); - - AjaxMonitor = (function() { - function AjaxMonitor() { - var _this = this; - this.elements = []; - getIntercept().on('request', function() { - return _this.watch.apply(_this, arguments); - }); - } - - AjaxMonitor.prototype.watch = function(_arg) { - var request, tracker, type, url; - type = _arg.type, request = _arg.request, url = _arg.url; - if (shouldIgnoreURL(url)) { - return; - } - if (type === 'socket') { - tracker = new SocketRequestTracker(request); - } else { - tracker = new XHRRequestTracker(request); - } - return this.elements.push(tracker); - }; - - return AjaxMonitor; - - })(); - - XHRRequestTracker = (function() { - function XHRRequestTracker(request) { - var event, size, _j, _len1, _onreadystatechange, _ref2, - _this = this; - this.progress = 0; - if (window.ProgressEvent != null) { - size = null; - request.addEventListener('progress', function(evt) { - if (evt.lengthComputable) { - return _this.progress = 100 * evt.loaded / evt.total; - } else { - return _this.progress = _this.progress + (100 - _this.progress) / 2; - } - }, false); - _ref2 = ['load', 'abort', 'timeout', 'error']; - for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { - event = _ref2[_j]; - request.addEventListener(event, function() { - return _this.progress = 100; - }, false); - } - } else { - _onreadystatechange = request.onreadystatechange; - request.onreadystatechange = function() { - var _ref3; - if ((_ref3 = request.readyState) === 0 || _ref3 === 4) { - _this.progress = 100; - } else if (request.readyState === 3) { - _this.progress = 50; - } - return typeof _onreadystatechange === "function" ? _onreadystatechange.apply(null, arguments) : void 0; - }; - } - } - - return XHRRequestTracker; - - })(); - - SocketRequestTracker = (function() { - function SocketRequestTracker(request) { - var event, _j, _len1, _ref2, - _this = this; - this.progress = 0; - _ref2 = ['error', 'open']; - for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { - event = _ref2[_j]; - request.addEventListener(event, function() { - return _this.progress = 100; - }, false); - } - } - - return SocketRequestTracker; - - })(); - - ElementMonitor = (function() { - function ElementMonitor(options) { - var selector, _j, _len1, _ref2; - if (options == null) { - options = {}; - } - this.elements = []; - if (options.selectors == null) { - options.selectors = []; - } - _ref2 = options.selectors; - for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { - selector = _ref2[_j]; - this.elements.push(new ElementTracker(selector)); - } - } - - return ElementMonitor; - - })(); - - ElementTracker = (function() { - function ElementTracker(selector) { - this.selector = selector; - this.progress = 0; - this.check(); - } - - ElementTracker.prototype.check = function() { - var _this = this; - if (document.querySelector(this.selector)) { - return this.done(); - } else { - return setTimeout((function() { - return _this.check(); - }), options.elements.checkInterval); - } - }; - - ElementTracker.prototype.done = function() { - return this.progress = 100; - }; - - return ElementTracker; - - })(); - - DocumentMonitor = (function() { - DocumentMonitor.prototype.states = { - loading: 0, - interactive: 50, - complete: 100 - }; - - function DocumentMonitor() { - var _onreadystatechange, _ref2, - _this = this; - this.progress = (_ref2 = this.states[document.readyState]) != null ? _ref2 : 100; - _onreadystatechange = document.onreadystatechange; - document.onreadystatechange = function() { - if (_this.states[document.readyState] != null) { - _this.progress = _this.states[document.readyState]; - } - return typeof _onreadystatechange === "function" ? _onreadystatechange.apply(null, arguments) : void 0; - }; - } - - return DocumentMonitor; - - })(); - - EventLagMonitor = (function() { - function EventLagMonitor() { - var avg, interval, last, points, samples, - _this = this; - this.progress = 0; - avg = 0; - samples = []; - points = 0; - last = now(); - interval = setInterval(function() { - var diff; - diff = now() - last - 50; - last = now(); - samples.push(diff); - if (samples.length > options.eventLag.sampleCount) { - samples.shift(); - } - avg = avgAmplitude(samples); - if (++points >= options.eventLag.minSamples && avg < options.eventLag.lagThreshold) { - _this.progress = 100; - return clearInterval(interval); - } else { - return _this.progress = 100 * (3 / (avg + 3)); - } - }, 50); - } - - return EventLagMonitor; - - })(); - - Scaler = (function() { - function Scaler(source) { - this.source = source; - this.last = this.sinceLastUpdate = 0; - this.rate = options.initialRate; - this.catchup = 0; - this.progress = this.lastProgress = 0; - if (this.source != null) { - this.progress = result(this.source, 'progress'); - } - } - - Scaler.prototype.tick = function(frameTime, val) { - var scaling; - if (val == null) { - val = result(this.source, 'progress'); - } - if (val >= 100) { - this.done = true; - } - if (val === this.last) { - this.sinceLastUpdate += frameTime; - } else { - if (this.sinceLastUpdate) { - this.rate = (val - this.last) / this.sinceLastUpdate; - } - this.catchup = (val - this.progress) / options.catchupTime; - this.sinceLastUpdate = 0; - this.last = val; - } - if (val > this.progress) { - this.progress += this.catchup * frameTime; - } - scaling = 1 - Math.pow(this.progress / 100, options.easeFactor); - this.progress += scaling * this.rate * frameTime; - this.progress = Math.min(this.lastProgress + options.maxProgressPerFrame, this.progress); - this.progress = Math.max(0, this.progress); - this.progress = Math.min(100, this.progress); - this.lastProgress = this.progress; - return this.progress; - }; - - return Scaler; - - })(); - - sources = null; - - scalers = null; - - bar = null; - - uniScaler = null; - - animation = null; - - cancelAnimation = null; - - Pace.running = false; - - handlePushState = function() { - if (options.restartOnPushState) { - return Pace.restart(); - } - }; - - if (window.history.pushState != null) { - _pushState = window.history.pushState; - window.history.pushState = function() { - handlePushState(); - return _pushState.apply(window.history, arguments); - }; - } - - if (window.history.replaceState != null) { - _replaceState = window.history.replaceState; - window.history.replaceState = function() { - handlePushState(); - return _replaceState.apply(window.history, arguments); - }; - } - - SOURCE_KEYS = { - ajax: AjaxMonitor, - elements: ElementMonitor, - document: DocumentMonitor, - eventLag: EventLagMonitor - }; - - (init = function() { - var type, _j, _k, _len1, _len2, _ref2, _ref3, _ref4; - Pace.sources = sources = []; - _ref2 = ['ajax', 'elements', 'document', 'eventLag']; - for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { - type = _ref2[_j]; - if (options[type] !== false) { - sources.push(new SOURCE_KEYS[type](options[type])); - } - } - _ref4 = (_ref3 = options.extraSources) != null ? _ref3 : []; - for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) { - source = _ref4[_k]; - sources.push(new source(options)); - } - Pace.bar = bar = new Bar; - scalers = []; - return uniScaler = new Scaler; - })(); - - Pace.stop = function() { - Pace.trigger('stop'); - Pace.running = false; - bar.destroy(); - cancelAnimation = true; - if (animation != null) { - if (typeof cancelAnimationFrame === "function") { - cancelAnimationFrame(animation); - } - animation = null; - } - return init(); - }; - - Pace.restart = function() { - Pace.trigger('restart'); - Pace.stop(); - return Pace.start(); - }; - - Pace.go = function() { - var start; - Pace.running = true; - bar.render(); - start = now(); - cancelAnimation = false; - return animation = runAnimation(function(frameTime, enqueueNextFrame) { - var avg, count, done, element, elements, i, j, remaining, scaler, scalerList, sum, _j, _k, _len1, _len2, _ref2; - remaining = 100 - bar.progress; - count = sum = 0; - done = true; - for (i = _j = 0, _len1 = sources.length; _j < _len1; i = ++_j) { - source = sources[i]; - scalerList = scalers[i] != null ? scalers[i] : scalers[i] = []; - elements = (_ref2 = source.elements) != null ? _ref2 : [source]; - for (j = _k = 0, _len2 = elements.length; _k < _len2; j = ++_k) { - element = elements[j]; - scaler = scalerList[j] != null ? scalerList[j] : scalerList[j] = new Scaler(element); - done &= scaler.done; - if (scaler.done) { - continue; - } - count++; - sum += scaler.tick(frameTime); - } - } - avg = sum / count; - bar.update(uniScaler.tick(frameTime, avg)); - if (bar.done() || done || cancelAnimation) { - bar.update(100); - Pace.trigger('done'); - return setTimeout(function() { - bar.finish(); - Pace.running = false; - return Pace.trigger('hide'); - }, Math.max(options.ghostTime, Math.max(options.minTime - (now() - start), 0))); - } else { - return enqueueNextFrame(); - } - }); - }; - - Pace.start = function(_options) { - extend(options, _options); - Pace.running = true; - try { - bar.render(); - } catch (_error) { - NoTargetError = _error; - } - if (!document.querySelector('.pace')) { - return setTimeout(Pace.start, 50); - } else { - Pace.trigger('start'); - return Pace.go(); - } - }; - - if (typeof define === 'function' && define.amd) { - define(['pace'], function() { - return Pace; - }); - } else if (typeof exports === 'object') { - module.exports = Pace; - } else { - if (options.startOnPageLoad) { - Pace.start(); - } - } - +(function() { + var AjaxMonitor, Bar, DocumentMonitor, ElementMonitor, ElementTracker, EventLagMonitor, Evented, Events, NoTargetError, Pace, RequestIntercept, SOURCE_KEYS, Scaler, SocketRequestTracker, XHRRequestTracker, animation, avgAmplitude, bar, cancelAnimation, cancelAnimationFrame, defaultOptions, extend, extendNative, getFromDOM, getIntercept, handlePushState, ignoreStack, init, now, options, requestAnimationFrame, result, runAnimation, scalers, shouldIgnoreURL, shouldTrack, source, sources, uniScaler, _WebSocket, _XDomainRequest, _XMLHttpRequest, _i, _intercept, _len, _pushState, _ref, _ref1, _replaceState, + __slice = [].slice, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + defaultOptions = { + catchupTime: 100, + initialRate: .03, + minTime: 250, + ghostTime: 100, + maxProgressPerFrame: 20, + easeFactor: 1.25, + startOnPageLoad: true, + restartOnPushState: true, + restartOnRequestAfter: 500, + target: 'body', + elements: { + checkInterval: 100, + selectors: ['body'] + }, + eventLag: { + minSamples: 10, + sampleCount: 3, + lagThreshold: 3 + }, + ajax: { + trackMethods: ['GET'], + trackWebSockets: true, + ignoreURLs: [] + } + }; + + now = function() { + var _ref; + return (_ref = typeof performance !== "undefined" && performance !== null ? typeof performance.now === "function" ? performance.now() : void 0 : void 0) != null ? _ref : +(new Date); + }; + + requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; + + cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame; + + if (requestAnimationFrame == null) { + requestAnimationFrame = function(fn) { + return setTimeout(fn, 50); + }; + cancelAnimationFrame = function(id) { + return clearTimeout(id); + }; + } + + runAnimation = function(fn) { + var last, tick; + last = now(); + tick = function() { + var diff; + diff = now() - last; + if (diff >= 33) { + last = now(); + return fn(diff, function() { + return requestAnimationFrame(tick); + }); + } else { + return setTimeout(tick, 33 - diff); + } + }; + return tick(); + }; + + result = function() { + var args, key, obj; + obj = arguments[0], key = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : []; + if (typeof obj[key] === 'function') { + return obj[key].apply(obj, args); + } else { + return obj[key]; + } + }; + + extend = function() { + var key, out, source, sources, val, _i, _len; + out = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : []; + for (_i = 0, _len = sources.length; _i < _len; _i++) { + source = sources[_i]; + if (source) { + for (key in source) { + if (!__hasProp.call(source, key)) continue; + val = source[key]; + if ((out[key] != null) && typeof out[key] === 'object' && (val != null) && typeof val === 'object') { + extend(out[key], val); + } else { + out[key] = val; + } + } + } + } + return out; + }; + + avgAmplitude = function(arr) { + var count, sum, v, _i, _len; + sum = count = 0; + for (_i = 0, _len = arr.length; _i < _len; _i++) { + v = arr[_i]; + sum += Math.abs(v); + count++; + } + return sum / count; + }; + + getFromDOM = function(key, json) { + var data, e, el; + if (key == null) { + key = 'options'; + } + if (json == null) { + json = true; + } + el = document.querySelector("[data-pace-" + key + "]"); + if (!el) { + return; + } + data = el.getAttribute("data-pace-" + key); + if (!json) { + return data; + } + try { + return JSON.parse(data); + } catch (_error) { + e = _error; + return typeof console !== "undefined" && console !== null ? console.error("Error parsing inline pace options", e) : void 0; + } + }; + + Evented = (function() { + function Evented() {} + + Evented.prototype.on = function(event, handler, ctx, once) { + var _base; + if (once == null) { + once = false; + } + if (this.bindings == null) { + this.bindings = {}; + } + if ((_base = this.bindings)[event] == null) { + _base[event] = []; + } + return this.bindings[event].push({ + handler: handler, + ctx: ctx, + once: once + }); + }; + + Evented.prototype.once = function(event, handler, ctx) { + return this.on(event, handler, ctx, true); + }; + + Evented.prototype.off = function(event, handler) { + var i, _ref, _results; + if (((_ref = this.bindings) != null ? _ref[event] : void 0) == null) { + return; + } + if (handler == null) { + return delete this.bindings[event]; + } else { + i = 0; + _results = []; + while (i < this.bindings[event].length) { + if (this.bindings[event][i].handler === handler) { + _results.push(this.bindings[event].splice(i, 1)); + } else { + _results.push(i++); + } + } + return _results; + } + }; + + Evented.prototype.trigger = function() { + var args, ctx, event, handler, i, once, _ref, _ref1, _results; + event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; + if ((_ref = this.bindings) != null ? _ref[event] : void 0) { + i = 0; + _results = []; + while (i < this.bindings[event].length) { + _ref1 = this.bindings[event][i], handler = _ref1.handler, ctx = _ref1.ctx, once = _ref1.once; + handler.apply(ctx != null ? ctx : this, args); + if (once) { + _results.push(this.bindings[event].splice(i, 1)); + } else { + _results.push(i++); + } + } + return _results; + } + }; + + return Evented; + + })(); + + Pace = window.Pace || {}; + + window.Pace = Pace; + + extend(Pace, Evented.prototype); + + options = Pace.options = extend({}, defaultOptions, window.paceOptions, getFromDOM()); + + _ref = ['ajax', 'document', 'eventLag', 'elements']; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + source = _ref[_i]; + if (options[source] === true) { + options[source] = defaultOptions[source]; + } + } + + NoTargetError = (function(_super) { + __extends(NoTargetError, _super); + + function NoTargetError() { + _ref1 = NoTargetError.__super__.constructor.apply(this, arguments); + return _ref1; + } + + return NoTargetError; + + })(Error); + + Bar = (function() { + function Bar() { + this.progress = 0; + } + + Bar.prototype.getElement = function() { + var targetElement; + if (this.el == null) { + targetElement = document.querySelector(options.target); + if (!targetElement) { + throw new NoTargetError; + } + this.el = document.createElement('div'); + this.el.className = "pace pace-active"; + document.body.className = document.body.className.replace(/pace-done/g, ''); + document.body.className += ' pace-running'; + this.el.innerHTML = '
        \n
        \n
        \n
        '; + if (targetElement.firstChild != null) { + targetElement.insertBefore(this.el, targetElement.firstChild); + } else { + targetElement.appendChild(this.el); + } + } + return this.el; + }; + + Bar.prototype.finish = function() { + var el; + el = this.getElement(); + el.className = el.className.replace('pace-active', ''); + el.className += ' pace-inactive'; + document.body.className = document.body.className.replace('pace-running', ''); + return document.body.className += ' pace-done'; + }; + + Bar.prototype.update = function(prog) { + this.progress = prog; + return this.render(); + }; + + Bar.prototype.destroy = function() { + try { + this.getElement().parentNode.removeChild(this.getElement()); + } catch (_error) { + NoTargetError = _error; + } + return this.el = void 0; + }; + + Bar.prototype.render = function() { + var el, key, progressStr, transform, _j, _len1, _ref2; + if (document.querySelector(options.target) == null) { + return false; + } + el = this.getElement(); + transform = "translate3d(" + this.progress + "%, 0, 0)"; + _ref2 = ['webkitTransform', 'msTransform', 'transform']; + for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { + key = _ref2[_j]; + el.children[0].style[key] = transform; + } + if (!this.lastRenderedProgress || this.lastRenderedProgress | 0 !== this.progress | 0) { + el.children[0].setAttribute('data-progress-text', "" + (this.progress | 0) + "%"); + if (this.progress >= 100) { + progressStr = '99'; + } else { + progressStr = this.progress < 10 ? "0" : ""; + progressStr += this.progress | 0; + } + el.children[0].setAttribute('data-progress', "" + progressStr); + } + return this.lastRenderedProgress = this.progress; + }; + + Bar.prototype.done = function() { + return this.progress >= 100; + }; + + return Bar; + + })(); + + Events = (function() { + function Events() { + this.bindings = {}; + } + + Events.prototype.trigger = function(name, val) { + var binding, _j, _len1, _ref2, _results; + if (this.bindings[name] != null) { + _ref2 = this.bindings[name]; + _results = []; + for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { + binding = _ref2[_j]; + _results.push(binding.call(this, val)); + } + return _results; + } + }; + + Events.prototype.on = function(name, fn) { + var _base; + if ((_base = this.bindings)[name] == null) { + _base[name] = []; + } + return this.bindings[name].push(fn); + }; + + return Events; + + })(); + + _XMLHttpRequest = window.XMLHttpRequest; + + _XDomainRequest = window.XDomainRequest; + + _WebSocket = window.WebSocket; + + extendNative = function(to, from) { + var e, key, _results; + _results = []; + for (key in from.prototype) { + try { + if ((to[key] == null) && typeof from[key] !== 'function') { + if (typeof Object.defineProperty === 'function') { + _results.push(Object.defineProperty(to, key, { + get: function() { + return from.prototype[key]; + }, + configurable: true, + enumerable: true + })); + } else { + _results.push(to[key] = from.prototype[key]); + } + } else { + _results.push(void 0); + } + } catch (_error) { + e = _error; + } + } + return _results; + }; + + ignoreStack = []; + + Pace.ignore = function() { + var args, fn, ret; + fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; + ignoreStack.unshift('ignore'); + ret = fn.apply(null, args); + ignoreStack.shift(); + return ret; + }; + + Pace.track = function() { + var args, fn, ret; + fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; + ignoreStack.unshift('track'); + ret = fn.apply(null, args); + ignoreStack.shift(); + return ret; + }; + + shouldTrack = function(method) { + var _ref2; + if (method == null) { + method = 'GET'; + } + if (ignoreStack[0] === 'track') { + return 'force'; + } + if (!ignoreStack.length && options.ajax) { + if (method === 'socket' && options.ajax.trackWebSockets) { + return true; + } else if (_ref2 = method.toUpperCase(), __indexOf.call(options.ajax.trackMethods, _ref2) >= 0) { + return true; + } + } + return false; + }; + + RequestIntercept = (function(_super) { + __extends(RequestIntercept, _super); + + function RequestIntercept() { + var monitorXHR, + _this = this; + RequestIntercept.__super__.constructor.apply(this, arguments); + monitorXHR = function(req) { + var _open; + _open = req.open; + return req.open = function(type, url, async) { + if (shouldTrack(type)) { + _this.trigger('request', { + type: type, + url: url, + request: req + }); + } + return _open.apply(req, arguments); + }; + }; + window.XMLHttpRequest = function(flags) { + var req; + req = new _XMLHttpRequest(flags); + monitorXHR(req); + return req; + }; + try { + extendNative(window.XMLHttpRequest, _XMLHttpRequest); + } catch (_error) {} + if (_XDomainRequest != null) { + window.XDomainRequest = function() { + var req; + req = new _XDomainRequest; + monitorXHR(req); + return req; + }; + try { + extendNative(window.XDomainRequest, _XDomainRequest); + } catch (_error) {} + } + if ((_WebSocket != null) && options.ajax.trackWebSockets) { + window.WebSocket = function(url, protocols) { + var req; + if (protocols != null) { + req = new _WebSocket(url, protocols); + } else { + req = new _WebSocket(url); + } + if (shouldTrack('socket')) { + _this.trigger('request', { + type: 'socket', + url: url, + protocols: protocols, + request: req + }); + } + return req; + }; + try { + extendNative(window.WebSocket, _WebSocket); + } catch (_error) {} + } + } + + return RequestIntercept; + + })(Events); + + _intercept = null; + + getIntercept = function() { + if (_intercept == null) { + _intercept = new RequestIntercept; + } + return _intercept; + }; + + shouldIgnoreURL = function(url) { + var pattern, _j, _len1, _ref2; + _ref2 = options.ajax.ignoreURLs; + for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { + pattern = _ref2[_j]; + if (typeof pattern === 'string') { + if (url.indexOf(pattern) !== -1) { + return true; + } + } else { + if (pattern.test(url)) { + return true; + } + } + } + return false; + }; + + getIntercept().on('request', function(_arg) { + var after, args, request, type, url; + type = _arg.type, request = _arg.request, url = _arg.url; + if (shouldIgnoreURL(url)) { + return; + } + if (!Pace.running && (options.restartOnRequestAfter !== false || shouldTrack(type) === 'force')) { + args = arguments; + after = options.restartOnRequestAfter || 0; + if (typeof after === 'boolean') { + after = 0; + } + return setTimeout(function() { + var stillActive, _j, _len1, _ref2, _ref3, _results; + if (type === 'socket') { + stillActive = request.readyState < 2; + } else { + stillActive = (0 < (_ref2 = request.readyState) && _ref2 < 4); + } + if (stillActive) { + Pace.restart(); + _ref3 = Pace.sources; + _results = []; + for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) { + source = _ref3[_j]; + if (source instanceof AjaxMonitor) { + source.watch.apply(source, args); + break; + } else { + _results.push(void 0); + } + } + return _results; + } + }, after); + } + }); + + AjaxMonitor = (function() { + function AjaxMonitor() { + var _this = this; + this.elements = []; + getIntercept().on('request', function() { + return _this.watch.apply(_this, arguments); + }); + } + + AjaxMonitor.prototype.watch = function(_arg) { + var request, tracker, type, url; + type = _arg.type, request = _arg.request, url = _arg.url; + if (shouldIgnoreURL(url)) { + return; + } + if (type === 'socket') { + tracker = new SocketRequestTracker(request); + } else { + tracker = new XHRRequestTracker(request); + } + return this.elements.push(tracker); + }; + + return AjaxMonitor; + + })(); + + XHRRequestTracker = (function() { + function XHRRequestTracker(request) { + var event, size, _j, _len1, _onreadystatechange, _ref2, + _this = this; + this.progress = 0; + if (window.ProgressEvent != null) { + size = null; + request.addEventListener('progress', function(evt) { + if (evt.lengthComputable) { + return _this.progress = 100 * evt.loaded / evt.total; + } else { + return _this.progress = _this.progress + (100 - _this.progress) / 2; + } + }, false); + _ref2 = ['load', 'abort', 'timeout', 'error']; + for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { + event = _ref2[_j]; + request.addEventListener(event, function() { + return _this.progress = 100; + }, false); + } + } else { + _onreadystatechange = request.onreadystatechange; + request.onreadystatechange = function() { + var _ref3; + if ((_ref3 = request.readyState) === 0 || _ref3 === 4) { + _this.progress = 100; + } else if (request.readyState === 3) { + _this.progress = 50; + } + return typeof _onreadystatechange === "function" ? _onreadystatechange.apply(null, arguments) : void 0; + }; + } + } + + return XHRRequestTracker; + + })(); + + SocketRequestTracker = (function() { + function SocketRequestTracker(request) { + var event, _j, _len1, _ref2, + _this = this; + this.progress = 0; + _ref2 = ['error', 'open']; + for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { + event = _ref2[_j]; + request.addEventListener(event, function() { + return _this.progress = 100; + }, false); + } + } + + return SocketRequestTracker; + + })(); + + ElementMonitor = (function() { + function ElementMonitor(options) { + var selector, _j, _len1, _ref2; + if (options == null) { + options = {}; + } + this.elements = []; + if (options.selectors == null) { + options.selectors = []; + } + _ref2 = options.selectors; + for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { + selector = _ref2[_j]; + this.elements.push(new ElementTracker(selector)); + } + } + + return ElementMonitor; + + })(); + + ElementTracker = (function() { + function ElementTracker(selector) { + this.selector = selector; + this.progress = 0; + this.check(); + } + + ElementTracker.prototype.check = function() { + var _this = this; + if (document.querySelector(this.selector)) { + return this.done(); + } else { + return setTimeout((function() { + return _this.check(); + }), options.elements.checkInterval); + } + }; + + ElementTracker.prototype.done = function() { + return this.progress = 100; + }; + + return ElementTracker; + + })(); + + DocumentMonitor = (function() { + DocumentMonitor.prototype.states = { + loading: 0, + interactive: 50, + complete: 100 + }; + + function DocumentMonitor() { + var _onreadystatechange, _ref2, + _this = this; + this.progress = (_ref2 = this.states[document.readyState]) != null ? _ref2 : 100; + _onreadystatechange = document.onreadystatechange; + document.onreadystatechange = function() { + if (_this.states[document.readyState] != null) { + _this.progress = _this.states[document.readyState]; + } + return typeof _onreadystatechange === "function" ? _onreadystatechange.apply(null, arguments) : void 0; + }; + } + + return DocumentMonitor; + + })(); + + EventLagMonitor = (function() { + function EventLagMonitor() { + var avg, interval, last, points, samples, + _this = this; + this.progress = 0; + avg = 0; + samples = []; + points = 0; + last = now(); + interval = setInterval(function() { + var diff; + diff = now() - last - 50; + last = now(); + samples.push(diff); + if (samples.length > options.eventLag.sampleCount) { + samples.shift(); + } + avg = avgAmplitude(samples); + if (++points >= options.eventLag.minSamples && avg < options.eventLag.lagThreshold) { + _this.progress = 100; + return clearInterval(interval); + } else { + return _this.progress = 100 * (3 / (avg + 3)); + } + }, 50); + } + + return EventLagMonitor; + + })(); + + Scaler = (function() { + function Scaler(source) { + this.source = source; + this.last = this.sinceLastUpdate = 0; + this.rate = options.initialRate; + this.catchup = 0; + this.progress = this.lastProgress = 0; + if (this.source != null) { + this.progress = result(this.source, 'progress'); + } + } + + Scaler.prototype.tick = function(frameTime, val) { + var scaling; + if (val == null) { + val = result(this.source, 'progress'); + } + if (val >= 100) { + this.done = true; + } + if (val === this.last) { + this.sinceLastUpdate += frameTime; + } else { + if (this.sinceLastUpdate) { + this.rate = (val - this.last) / this.sinceLastUpdate; + } + this.catchup = (val - this.progress) / options.catchupTime; + this.sinceLastUpdate = 0; + this.last = val; + } + if (val > this.progress) { + this.progress += this.catchup * frameTime; + } + scaling = 1 - Math.pow(this.progress / 100, options.easeFactor); + this.progress += scaling * this.rate * frameTime; + this.progress = Math.min(this.lastProgress + options.maxProgressPerFrame, this.progress); + this.progress = Math.max(0, this.progress); + this.progress = Math.min(100, this.progress); + this.lastProgress = this.progress; + return this.progress; + }; + + return Scaler; + + })(); + + sources = null; + + scalers = null; + + bar = null; + + uniScaler = null; + + animation = null; + + cancelAnimation = null; + + Pace.running = false; + + handlePushState = function() { + if (options.restartOnPushState) { + return Pace.restart(); + } + }; + + if (window.history.pushState != null) { + _pushState = window.history.pushState; + window.history.pushState = function() { + handlePushState(); + return _pushState.apply(window.history, arguments); + }; + } + + if (window.history.replaceState != null) { + _replaceState = window.history.replaceState; + window.history.replaceState = function() { + handlePushState(); + return _replaceState.apply(window.history, arguments); + }; + } + + SOURCE_KEYS = { + ajax: AjaxMonitor, + elements: ElementMonitor, + document: DocumentMonitor, + eventLag: EventLagMonitor + }; + + (init = function() { + var type, _j, _k, _len1, _len2, _ref2, _ref3, _ref4; + Pace.sources = sources = []; + _ref2 = ['ajax', 'elements', 'document', 'eventLag']; + for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { + type = _ref2[_j]; + if (options[type] !== false) { + sources.push(new SOURCE_KEYS[type](options[type])); + } + } + _ref4 = (_ref3 = options.extraSources) != null ? _ref3 : []; + for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) { + source = _ref4[_k]; + sources.push(new source(options)); + } + Pace.bar = bar = new Bar; + scalers = []; + return uniScaler = new Scaler; + })(); + + Pace.stop = function() { + Pace.trigger('stop'); + Pace.running = false; + bar.destroy(); + cancelAnimation = true; + if (animation != null) { + if (typeof cancelAnimationFrame === "function") { + cancelAnimationFrame(animation); + } + animation = null; + } + return init(); + }; + + Pace.restart = function() { + Pace.trigger('restart'); + Pace.stop(); + return Pace.start(); + }; + + Pace.go = function() { + var start; + Pace.running = true; + bar.render(); + start = now(); + cancelAnimation = false; + return animation = runAnimation(function(frameTime, enqueueNextFrame) { + var avg, count, done, element, elements, i, j, remaining, scaler, scalerList, sum, _j, _k, _len1, _len2, _ref2; + remaining = 100 - bar.progress; + count = sum = 0; + done = true; + for (i = _j = 0, _len1 = sources.length; _j < _len1; i = ++_j) { + source = sources[i]; + scalerList = scalers[i] != null ? scalers[i] : scalers[i] = []; + elements = (_ref2 = source.elements) != null ? _ref2 : [source]; + for (j = _k = 0, _len2 = elements.length; _k < _len2; j = ++_k) { + element = elements[j]; + scaler = scalerList[j] != null ? scalerList[j] : scalerList[j] = new Scaler(element); + done &= scaler.done; + if (scaler.done) { + continue; + } + count++; + sum += scaler.tick(frameTime); + } + } + avg = sum / count; + bar.update(uniScaler.tick(frameTime, avg)); + if (bar.done() || done || cancelAnimation) { + bar.update(100); + Pace.trigger('done'); + return setTimeout(function() { + bar.finish(); + Pace.running = false; + return Pace.trigger('hide'); + }, Math.max(options.ghostTime, Math.max(options.minTime - (now() - start), 0))); + } else { + return enqueueNextFrame(); + } + }); + }; + + Pace.start = function(_options) { + extend(options, _options); + Pace.running = true; + try { + bar.render(); + } catch (_error) { + NoTargetError = _error; + } + if (!document.querySelector('.pace')) { + return setTimeout(Pace.start, 50); + } else { + Pace.trigger('start'); + return Pace.go(); + } + }; + + if (typeof define === 'function' && define.amd) { + define(['pace'], function() { + return Pace; + }); + } else if (typeof exports === 'object') { + module.exports = Pace; + } else { + if (options.startOnPageLoad) { + Pace.start(); + } + } + }).call(this); \ No newline at end of file diff --git a/src/main/resources/static/plugins/pace/pace.min.css b/src/main/resources/static/halo-backend/plugins/pace/pace.min.css old mode 100755 new mode 100644 similarity index 99% rename from src/main/resources/static/plugins/pace/pace.min.css rename to src/main/resources/static/halo-backend/plugins/pace/pace.min.css index e3d09ab59..2c1265843 --- a/src/main/resources/static/plugins/pace/pace.min.css +++ b/src/main/resources/static/halo-backend/plugins/pace/pace.min.css @@ -1 +1 @@ -.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pace-inactive{display:none}.pace .pace-progress{background:#fff;position:fixed;z-index:2000;top:0;right:100%;width:100%;height:2px}.pace .pace-progress-inner{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #fff,0 0 5px #fff;opacity:1;-webkit-transform:rotate(3deg) translate(0px,-4px);-moz-transform:rotate(3deg) translate(0px,-4px);-ms-transform:rotate(3deg) translate(0px,-4px);-o-transform:rotate(3deg) translate(0px,-4px);transform:rotate(3deg) translate(0px,-4px)}.pace .pace-activity{display:block;position:fixed;z-index:2000;top:15px;right:50%;width:14px;height:14px;border:solid 2px transparent;border-top-color:#fff;border-left-color:#fff;border-radius:10px;-webkit-animation:pace-spinner 400ms linear infinite;-moz-animation:pace-spinner 400ms linear infinite;-ms-animation:pace-spinner 400ms linear infinite;-o-animation:pace-spinner 400ms linear infinite;animation:pace-spinner 400ms linear infinite}@media (max-width: 767px){.pace .pace-activity{top:15px;right:15px;width:14px;height:14px}}@-webkit-keyframes pace-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes pace-spinner{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes pace-spinner{0%{-o-transform:rotate(0deg);transform:rotate(0deg)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes pace-spinner{0%{-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pace-spinner{0%{transform:rotate(0deg);transform:rotate(0deg)}100%{transform:rotate(360deg);transform:rotate(360deg)}} +.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pace-inactive{display:none}.pace .pace-progress{background:#fff;position:fixed;z-index:2000;top:0;right:100%;width:100%;height:2px}.pace .pace-progress-inner{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #fff,0 0 5px #fff;opacity:1;-webkit-transform:rotate(3deg) translate(0px,-4px);-moz-transform:rotate(3deg) translate(0px,-4px);-ms-transform:rotate(3deg) translate(0px,-4px);-o-transform:rotate(3deg) translate(0px,-4px);transform:rotate(3deg) translate(0px,-4px)}.pace .pace-activity{display:block;position:fixed;z-index:2000;top:15px;right:50%;width:14px;height:14px;border:solid 2px transparent;border-top-color:#fff;border-left-color:#fff;border-radius:10px;-webkit-animation:pace-spinner 400ms linear infinite;-moz-animation:pace-spinner 400ms linear infinite;-ms-animation:pace-spinner 400ms linear infinite;-o-animation:pace-spinner 400ms linear infinite;animation:pace-spinner 400ms linear infinite}@media (max-width: 767px){.pace .pace-activity{top:15px;right:15px;width:14px;height:14px}}@-webkit-keyframes pace-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes pace-spinner{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes pace-spinner{0%{-o-transform:rotate(0deg);transform:rotate(0deg)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes pace-spinner{0%{-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pace-spinner{0%{transform:rotate(0deg);transform:rotate(0deg)}100%{transform:rotate(360deg);transform:rotate(360deg)}} diff --git a/src/main/resources/static/plugins/pace/pace.min.js b/src/main/resources/static/halo-backend/plugins/pace/pace.min.js old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/pace/pace.min.js rename to src/main/resources/static/halo-backend/plugins/pace/pace.min.js diff --git a/src/main/resources/static/halo-backend/plugins/pjax/pjax.min.js b/src/main/resources/static/halo-backend/plugins/pjax/pjax.min.js new file mode 100644 index 000000000..e2cadbd38 --- /dev/null +++ b/src/main/resources/static/halo-backend/plugins/pjax/pjax.min.js @@ -0,0 +1 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Pjax=f()}})(function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i]+>/gi;var htmlAttribsRegex=/\s?[a-z:]+(?:\=(?:\'|\")[^\'\">]+(?:\'|\"))*/gi;var matches=html.match(htmlRegex);if(matches&&matches.length){matches=matches[0].match(htmlAttribsRegex);if(matches.length){matches.shift();matches.forEach(function(htmlAttrib){var attr=htmlAttrib.trim().split("=");if(attr.length===1){tmpEl.documentElement.setAttribute(attr[0],true)}else{tmpEl.documentElement.setAttribute(attr[0],attr[1].slice(1,-1))}})}}tmpEl.documentElement.innerHTML=html;this.log("load content",tmpEl.documentElement.attributes,tmpEl.documentElement.innerHTML.length);if(document.activeElement&&contains(document,this.options.selectors,document.activeElement)){try{document.activeElement.blur()}catch(e){}}this.switchSelectors(this.options.selectors,tmpEl,document,options)},abortRequest:require("./lib/abort-request.js"),doRequest:require("./lib/send-request.js"),handleResponse:require("./lib/proto/handle-response.js"),loadUrl:function(href,options){options=typeof options==="object"?extend({},this.options,options):clone(this.options);this.log("load href",href,options);this.abortRequest(this.request);trigger(document,"pjax:send",options);this.request=this.doRequest(href,options,this.handleResponse.bind(this))},afterAllSwitches:function(){var autofocusEl=Array.prototype.slice.call(document.querySelectorAll("[autofocus]")).pop();if(autofocusEl&&document.activeElement!==autofocusEl){autofocusEl.focus()}this.options.selectors.forEach(function(selector){forEachEls(document.querySelectorAll(selector),function(el){executeScripts(el)})});var state=this.state;if(state.options.history){if(!window.history.state){this.lastUid=this.maxUid=newUid();window.history.replaceState({url:window.location.href,title:document.title,uid:this.maxUid,scrollPos:[0,0]},document.title)}this.lastUid=this.maxUid=newUid();window.history.pushState({url:state.href,title:state.options.title,uid:this.maxUid,scrollPos:[0,0]},state.options.title,state.href)}this.forEachSelectors(function(el){this.parseDOM(el)},this);trigger(document,"pjax:complete pjax:success",state.options);if(typeof state.options.analytics==="function"){state.options.analytics()}if(state.options.history){var a=document.createElement("a");a.href=this.state.href;if(a.hash){var name=a.hash.slice(1);name=decodeURIComponent(name);var curtop=0;var target=document.getElementById(name)||document.getElementsByName(name)[0];if(target){if(target.offsetParent){do{curtop+=target.offsetTop;target=target.offsetParent}while(target)}}window.scrollTo(0,curtop)}else if(state.options.scrollTo!==false){if(state.options.scrollTo.length>1){window.scrollTo(state.options.scrollTo[0],state.options.scrollTo[1])}else{window.scrollTo(0,state.options.scrollTo)}}}else if(state.options.scrollRestoration&&state.options.scrollPos){window.scrollTo(state.options.scrollPos[0],state.options.scrollPos[1])}this.state={numPendingSwitches:0,href:null,options:null}}};Pjax.isSupported=require("./lib/is-supported.js");if(Pjax.isSupported()){module.exports=Pjax}else{var stupidPjax=noop;for(var key in Pjax.prototype){if(Pjax.prototype.hasOwnProperty(key)&&typeof Pjax.prototype[key]==="function"){stupidPjax[key]=noop}}module.exports=stupidPjax}},{"./lib/abort-request.js":2,"./lib/events/on.js":4,"./lib/events/trigger.js":5,"./lib/execute-scripts.js":6,"./lib/foreach-els.js":7,"./lib/foreach-selectors.js":8,"./lib/is-supported.js":9,"./lib/parse-options.js":10,"./lib/proto/attach-form.js":11,"./lib/proto/attach-link.js":12,"./lib/proto/handle-response.js":13,"./lib/proto/log.js":14,"./lib/proto/parse-element":15,"./lib/send-request.js":16,"./lib/switches":18,"./lib/switches-selectors.js":17,"./lib/uniqueid.js":19,"./lib/util/clone.js":20,"./lib/util/contains.js":21,"./lib/util/extend.js":22,"./lib/util/noop":23}],2:[function(require,module,exports){var noop=require("./util/noop");module.exports=function(request){if(request&&request.readyState<4){request.onreadystatechange=noop;request.abort()}}},{"./util/noop":23}],3:[function(require,module,exports){module.exports=function(el){var code=el.text||el.textContent||el.innerHTML||"";var src=el.src||"";var parent=el.parentNode||document.querySelector("head")||document.documentElement;var script=document.createElement("script");if(code.match("document.write")){if(console&&console.log){console.log("Script contains document.write. Can’t be executed correctly. Code skipped ",el)}return false}script.type="text/javascript";if(src!==""){script.src=src;script.async=false}if(code!==""){try{script.appendChild(document.createTextNode(code))}catch(e){script.text=code}}parent.appendChild(script);if(parent instanceof HTMLHeadElement||parent instanceof HTMLBodyElement){parent.removeChild(script)}return true}},{}],4:[function(require,module,exports){var forEachEls=require("../foreach-els");module.exports=function(els,events,listener,useCapture){events=typeof events==="string"?events.split(" "):events;events.forEach(function(e){forEachEls(els,function(el){el.addEventListener(e,listener,useCapture)})})}},{"../foreach-els":7}],5:[function(require,module,exports){var forEachEls=require("../foreach-els");module.exports=function(els,events,opts){events=typeof events==="string"?events.split(" "):events;events.forEach(function(e){var event;event=document.createEvent("HTMLEvents");event.initEvent(e,true,true);event.eventName=e;if(opts){Object.keys(opts).forEach(function(key){event[key]=opts[key]})}forEachEls(els,function(el){var domFix=false;if(!el.parentNode&&el!==document&&el!==window){domFix=true;document.body.appendChild(el)}el.dispatchEvent(event);if(domFix){el.parentNode.removeChild(el)}})})}},{"../foreach-els":7}],6:[function(require,module,exports){var forEachEls=require("./foreach-els");var evalScript=require("./eval-script");module.exports=function(el){if(el.tagName.toLowerCase()==="script"){evalScript(el)}forEachEls(el.querySelectorAll("script"),function(script){if(!script.type||script.type.toLowerCase()==="text/javascript"){if(script.parentNode){script.parentNode.removeChild(script)}evalScript(script)}})}},{"./eval-script":3,"./foreach-els":7}],7:[function(require,module,exports){module.exports=function(els,fn,context){if(els instanceof HTMLCollection||els instanceof NodeList||els instanceof Array){return Array.prototype.forEach.call(els,fn,context)}return fn.call(context,els)}},{}],8:[function(require,module,exports){var forEachEls=require("./foreach-els");module.exports=function(selectors,cb,context,DOMcontext){DOMcontext=DOMcontext||document;selectors.forEach(function(selector){forEachEls(DOMcontext.querySelectorAll(selector),cb,context)})}},{"./foreach-els":7}],9:[function(require,module,exports){module.exports=function(){return window.history&&window.history.pushState&&window.history.replaceState&&!navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/)}},{}],10:[function(require,module,exports){var defaultSwitches=require("./switches");module.exports=function(options){options=options||{};options.elements=options.elements||"a[href], form[action]";options.selectors=options.selectors||["title",".js-Pjax"];options.switches=options.switches||{};options.switchesOptions=options.switchesOptions||{};options.history=typeof options.history==="undefined"?true:options.history;options.analytics=typeof options.analytics==="function"||options.analytics===false?options.analytics:defaultAnalytics;options.scrollTo=typeof options.scrollTo==="undefined"?0:options.scrollTo;options.scrollRestoration=typeof options.scrollRestoration!=="undefined"?options.scrollRestoration:true;options.cacheBust=typeof options.cacheBust==="undefined"?true:options.cacheBust;options.debug=options.debug||false;options.timeout=options.timeout||0;options.currentUrlFullReload=typeof options.currentUrlFullReload==="undefined"?false:options.currentUrlFullReload;if(!options.switches.head){options.switches.head=defaultSwitches.switchElementsAlt}if(!options.switches.body){options.switches.body=defaultSwitches.switchElementsAlt}return options};function defaultAnalytics(){if(window._gaq){_gaq.push(["_trackPageview"])}if(window.ga){ga("send","pageview",{page:location.pathname,title:document.title})}}},{"./switches":18}],11:[function(require,module,exports){var on=require("../events/on");var clone=require("../util/clone");var attrState="data-pjax-state";var formAction=function(el,event){if(isDefaultPrevented(event)){return}var options=clone(this.options);options.requestOptions={requestUrl:el.getAttribute("action")||window.location.href,requestMethod:el.getAttribute("method")||"GET"};var virtLinkElement=document.createElement("a");virtLinkElement.setAttribute("href",options.requestOptions.requestUrl);var attrValue=checkIfShouldAbort(virtLinkElement,options);if(attrValue){el.setAttribute(attrState,attrValue);return}event.preventDefault();if(el.enctype==="multipart/form-data"){options.requestOptions.formData=new FormData(el)}else{options.requestOptions.requestParams=parseFormElements(el)}el.setAttribute(attrState,"submit");options.triggerElement=el;this.loadUrl(virtLinkElement.href,options)};function parseFormElements(el){var requestParams=[];for(var elementKey in el.elements){if(Number.isNaN(Number(elementKey))){continue}var element=el.elements[elementKey];var tagName=element.tagName.toLowerCase();if(!!element.name&&element.attributes!==undefined&&tagName!=="button"){var type=element.attributes.type;if(!type||type.value!=="checkbox"&&type.value!=="radio"||element.checked){var values=[];if(tagName==="select"){var opt;for(var i=0;i1||event.metaKey||event.ctrlKey||event.shiftKey||event.altKey){return"modifier"}if(el.protocol!==window.location.protocol||el.host!==window.location.host){return"external"}if(el.hash&&el.href.replace(el.hash,"")===window.location.href.replace(location.hash,"")){return"anchor"}if(el.href===window.location.href.split("#")[0]+"#"){return"anchor-empty"}}var isDefaultPrevented=function(event){return event.defaultPrevented||event.returnValue===false};module.exports=function(el){var that=this;el.setAttribute(attrState,"");on(el,"click",function(event){linkAction.call(that,el,event)});on(el,"keyup",function(event){if(event.keyCode===13){linkAction.call(that,el,event)}}.bind(this))}},{"../events/on":4,"../util/clone":20}],13:[function(require,module,exports){var clone=require("../util/clone.js");var newUid=require("../uniqueid.js");var trigger=require("../events/trigger.js");module.exports=function(responseText,request,href,options){options=clone(options||this.options);options.request=request;if(responseText===false){trigger(document,"pjax:complete pjax:error",options);return}var currentState=window.history.state||{};window.history.replaceState({url:currentState.url||window.location.href,title:currentState.title||document.title,uid:currentState.uid||newUid(),scrollPos:[document.documentElement.scrollLeft||document.body.scrollLeft,document.documentElement.scrollTop||document.body.scrollTop]},document.title,window.location);var oldHref=href;if(request.responseURL){if(href!==request.responseURL){href=request.responseURL}}else if(request.getResponseHeader("X-PJAX-URL")){href=request.getResponseHeader("X-PJAX-URL")}else if(request.getResponseHeader("X-XHR-Redirected-To")){href=request.getResponseHeader("X-XHR-Redirected-To")}var a=document.createElement("a");a.href=oldHref;var oldHash=a.hash;a.href=href;if(oldHash&&!a.hash){a.hash=oldHash;href=a.href}this.state.href=href;this.state.options=options;try{this.loadContent(responseText,options)}catch(e){trigger(document,"pjax:error",options);if(!this.options.debug){if(console&&console.error){console.error("Pjax switch fail: ",e)}return this.latestChance(href)}else{throw e}}}},{"../events/trigger.js":5,"../uniqueid.js":19,"../util/clone.js":20}],14:[function(require,module,exports){module.exports=function(){if(this.options.debug&&console){if(typeof console.log==="function"){console.log.apply(console,arguments)}else if(console.log){console.log(arguments)}}}},{}],15:[function(require,module,exports){var attrState="data-pjax-state";module.exports=function(el){switch(el.tagName.toLowerCase()){case"a":if(!el.hasAttribute(attrState)){this.attachLink(el)}break;case"form":if(!el.hasAttribute(attrState)){this.attachForm(el)}break;default:throw"Pjax can only be applied on or
        submit"}}},{}],16:[function(require,module,exports){var updateQueryString=require("./util/update-query-string");module.exports=function(location,options,callback){options=options||{};var queryString;var requestOptions=options.requestOptions||{};var requestMethod=(requestOptions.requestMethod||"GET").toUpperCase();var requestParams=requestOptions.requestParams||null;var formData=requestOptions.formData||null;var requestPayload=null;var request=new XMLHttpRequest;var timeout=options.timeout||0;request.onreadystatechange=function(){if(request.readyState===4){if(request.status===200){callback(request.responseText,request,location,options)}else if(request.status!==0){callback(null,request,location,options)}}};request.onerror=function(e){console.log(e);callback(null,request,location,options)};request.ontimeout=function(){callback(null,request,location,options)};if(requestParams&&requestParams.length){queryString=requestParams.map(function(param){return param.name+"="+param.value}).join("&");switch(requestMethod){case"GET":location=location.split("?")[0];location+="?"+queryString;break;case"POST":requestPayload=queryString;break}}else if(formData){requestPayload=formData}if(options.cacheBust){location=updateQueryString(location,"t",Date.now())}request.open(requestMethod,location,true);request.timeout=timeout;request.setRequestHeader("X-Requested-With","XMLHttpRequest");request.setRequestHeader("X-PJAX","true");request.setRequestHeader("X-PJAX-Selectors",JSON.stringify(options.selectors));if(requestPayload&&requestMethod==="POST"&&!formData){request.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}request.send(requestPayload);return request}},{"./util/update-query-string":24}],17:[function(require,module,exports){var forEachEls=require("./foreach-els");var defaultSwitches=require("./switches");module.exports=function(switches,switchesOptions,selectors,fromEl,toEl,options){var switchesQueue=[];selectors.forEach(function(selector){var newEls=fromEl.querySelectorAll(selector);var oldEls=toEl.querySelectorAll(selector);if(this.log){this.log("Pjax switch",selector,newEls,oldEls)}if(newEls.length!==oldEls.length){throw"DOM doesn’t look the same on new loaded page: ’"+selector+"’ - new "+newEls.length+", old "+oldEls.length}forEachEls(newEls,function(newEl,i){var oldEl=oldEls[i];if(this.log){this.log("newEl",newEl,"oldEl",oldEl)}var callback=switches[selector]?switches[selector].bind(this,oldEl,newEl,options,switchesOptions[selector]):defaultSwitches.outerHTML.bind(this,oldEl,newEl,options);switchesQueue.push(callback)},this)},this);this.state.numPendingSwitches=switchesQueue.length;switchesQueue.forEach(function(queuedSwitch){queuedSwitch()})}},{"./foreach-els":7,"./switches":18}],18:[function(require,module,exports){var on=require("./events/on.js");module.exports={outerHTML:function(oldEl,newEl){oldEl.outerHTML=newEl.outerHTML;this.onSwitch()},innerHTML:function(oldEl,newEl){oldEl.innerHTML=newEl.innerHTML;if(newEl.className===""){oldEl.removeAttribute("class")}else{oldEl.className=newEl.className}this.onSwitch()},switchElementsAlt:function(oldEl,newEl){oldEl.innerHTML=newEl.innerHTML;if(newEl.hasAttributes()){var attrs=newEl.attributes;for(var i=0;i_>)","text": ""}, +{"icon": "(;¬_¬)","text": ""}, +{"icon": "(\"▔□▔)","text": ""}, +{"icon": "(゚Д゚≡゚д゚)!?","text": ""}, +{"icon": "Σ(゚д゚;)","text": ""}, +{"icon": "Σ(  ̄□ ̄||)","text": ""}, +{"icon": "(´;ω;`)","text": ""}, +{"icon": "(/TДT)/","text": ""}, +{"icon": "(^・ω・^ )","text": ""}, +{"icon": "(。・ω・。)","text": ""}, +{"icon": "(● ̄(エ) ̄●)","text": ""}, +{"icon": "ε=ε=(ノ≧∇≦)ノ","text": ""}, +{"icon": "(´・_・`)","text": ""}, +{"icon": "(-_-#)","text": ""}, +{"icon": "( ̄へ ̄)","text": ""}, +{"icon": "( ̄ε(# ̄) Σ","text": ""}, +{"icon": "ヽ(`Д´)ノ","text": ""}, +{"icon": "(╯°口°)╯(┴—┴","text": ""}, +{"icon": "(#-_-)┯━┯","text": ""}, +{"icon": "_(:3」∠)_","text": ""}, +{"icon": "_(•̀ω•́ 」∠)_","text": ""}, +{"icon": "─=≡Σ((( つ•̀ω•́)つ","text": ""}, +{"icon": "(ಥ_ಥ)","text": ""}, +{"icon": "(๑•̀ㅂ•́)و✧","text": ""}, +{"icon": "(๑╹∀╹๑)","text": ""}, +{"icon": "눈_눈","text": ""}, +{"icon": "ᕦ(ò_óˇ)ᕤ","text": ""}, +{"icon": "(๑•ั็ω•็ั๑)","text": ""}, +{"icon": "( *・ω・)✄╰ひ╯","text": ""}, +{"icon": "~( ̄▽ ̄)C❀(捏菊花)","text": ""}, +{"icon": "(((┏(; ̄▽ ̄)┛装完逼就跑","text": ""} +]}, +"阿鲁": {"type": "image","container": [ +{"icon": "\"暗地观察\"","text": "暗地观察"}, +{"icon": "\"便便\"","text": "便便"}, +{"icon": "\"不出所料\"","text": "不出所料"}, +{"icon": "\"不高兴\"","text": "不高兴"}, +{"icon": "\"不说话\"","text": "不说话"}, +{"icon": "\"抽烟\"","text": "抽烟"}, +{"icon": "\"呲牙\"","text": "呲牙"}, +{"icon": "\"大囧\"","text": "大囧"}, +{"icon": "\"得意\"","text": "得意"}, +{"icon": "\"愤怒\"","text": "愤怒"}, +{"icon": "\"尴尬\"","text": "尴尬"}, +{"icon": "\"高兴\"","text": "高兴"}, +{"icon": "\"鼓掌\"","text": "鼓掌"}, +{"icon": "\"观察\"","text": "观察"}, +{"icon": "\"害羞\"","text": "害羞"}, +{"icon": "\"汗\"","text": "汗"}, +{"icon": "\"黑线\"","text": "黑线"}, +{"icon": "\"欢呼\"","text": "欢呼"}, +{"icon": "\"击掌\"","text": "击掌"}, +{"icon": "\"惊喜\"","text": "惊喜"}, +{"icon": "\"看不见\"","text": "看不见"}, +{"icon": "\"看热闹\"","text": "看热闹"}, +{"icon": "\"抠鼻\"","text": "抠鼻"}, +{"icon": "\"口水\"","text": "口水"}, +{"icon": "\"哭泣\"","text": "哭泣"}, +{"icon": "\"狂汗\"","text": "狂汗"}, +{"icon": "\"蜡烛\"","text": "蜡烛"}, +{"icon": "\"脸红\"","text": "脸红"}, +{"icon": "\"内伤\"","text": "内伤"}, +{"icon": "\"喷水\"","text": "喷水"}, +{"icon": "\"喷血\"","text": "喷血"}, +{"icon": "\"期待\"","text": "期待"}, +{"icon": "\"亲亲\"","text": "亲亲"}, +{"icon": "\"傻笑\"","text": "傻笑"}, +{"icon": "\"扇耳光\"","text": "扇耳光"}, +{"icon": "\"深思\"","text": "深思"}, +{"icon": "\"锁眉\"","text": "锁眉"}, +{"icon": "\"投降\"","text": "投降"}, +{"icon": "\"吐\"","text": "吐"}, +{"icon": "\"吐舌\"","text": "吐舌"}, +{"icon": "\"吐血倒地\"","text": "吐血倒地"}, +{"icon": "\"无奈\"","text": "无奈"}, +{"icon": "\"无所谓\"","text": "无所谓"}, +{"icon": "\"无语\"","text": "无语"}, +{"icon": "\"喜极而泣\"","text": "喜极而泣"}, +{"icon": "\"献花\"","text": "献花"}, +{"icon": "\"献黄瓜\"","text": "献黄瓜"}, +{"icon": "\"想一想\"","text": "想一想"}, +{"icon": "\"小怒\"","text": "小怒"}, +{"icon": "\"小眼睛\"","text": "小眼睛"}, +{"icon": "\"邪恶\"","text": "邪恶"}, +{"icon": "\"咽气\"","text": "咽气"}, +{"icon": "\"阴暗\"","text": "阴暗"}, +{"icon": "\"赞一个\"","text": "赞一个"}, +{"icon": "\"长草\"","text": "长草"}, +{"icon": "\"中刀\"","text": "中刀"}, +{"icon": "\"中枪\"","text": "中枪"}, +{"icon": "\"中指\"","text": "中指"}, +{"icon": "\"肿包\"","text": "肿包"}, +{"icon": "\"皱眉\"","text": "皱眉"}, +{"icon": "\"装大款\"","text": "装大款"}, +{"icon": "\"坐等\"","text": "坐等"} +]}, +"泡泡": {"type": "image","container": [ +{"icon": "\"啊\"","text": "啊"}, +{"icon": "\"爱心\"","text": "爱心"}, +{"icon": "\"鄙视\"","text": "鄙视"}, +{"icon": "\"便便\"","text": "便便"}, +{"icon": "\"不高兴\"","text": "不高兴"}, +{"icon": "\"彩虹\"","text": "彩虹"}, +{"icon": "\"茶杯\"","text": "茶杯"}, +{"icon": "\"大拇指\"","text": "大拇指"}, +{"icon": "\"蛋糕\"","text": "蛋糕"}, +{"icon": "\"灯泡\"","text": "灯泡"}, +{"icon": "\"乖\"","text": "乖"}, +{"icon": "\"哈哈\"","text": "哈哈"}, +{"icon": "\"汗\"","text": "汗"}, +{"icon": "\"呵呵\"","text": "呵呵"}, +{"icon": "\"黑线\"","text": "黑线"}, +{"icon": "\"红领巾\"","text": "红领巾"}, +{"icon": "\"呼\"","text": "呼"}, +{"icon": "\"花心\"","text": "花心"}, +{"icon": "\"滑稽\"","text": "滑稽"}, +{"icon": "\"惊哭\"","text": "惊哭"}, +{"icon": "\"惊讶\"","text": "惊讶"}, +{"icon": "\"开心\"","text": "开心"}, +{"icon": "\"酷\"","text": "酷"}, +{"icon": "\"狂汗\"","text": "狂汗"}, +{"icon": "\"蜡烛\"","text": "蜡烛"}, +{"icon": "\"懒得理\"","text": "懒得理"}, +{"icon": "\"泪\"","text": "泪"}, +{"icon": "\"冷\"","text": "冷"}, +{"icon": "\"礼物\"","text": "礼物"}, +{"icon": "\"玫瑰\"","text": "玫瑰"}, +{"icon": "\"勉强\"","text": "勉强"}, +{"icon": "\"你懂的\"","text": "你懂的"}, +{"icon": "\"怒\"","text": "怒"}, +{"icon": "\"喷\"","text": "喷"}, +{"icon": "\"钱\"","text": "钱"}, +{"icon": "\"钱币\"","text": "钱币"}, +{"icon": "\"弱\"","text": "弱"}, +{"icon": "\"三道杠\"","text": "三道杠"}, +{"icon": "\"沙发\"","text": "沙发"}, +{"icon": "\"生气\"","text": "生气"}, +{"icon": "\"胜利\"","text": "胜利"}, +{"icon": "\"手纸\"","text": "手纸"}, +{"icon": "\"睡觉\"","text": "睡觉"}, +{"icon": "\"酸爽\"","text": "酸爽"}, +{"icon": "\"太开心\"","text": "太开心"}, +{"icon": "\"太阳\"","text": "太阳"}, +{"icon": "\"吐\"","text": "吐"}, +{"icon": "\"吐舌\"","text": "吐舌"}, +{"icon": "\"挖鼻\"","text": "挖鼻"}, +{"icon": "\"委屈\"","text": "委屈"}, +{"icon": "\"捂嘴笑\"","text": "捂嘴笑"}, +{"icon": "\"犀利\"","text": "犀利"}, +{"icon": "\"香蕉\"","text": "香蕉"}, +{"icon": "\"小乖\"","text": "小乖"}, +{"icon": "\"小红脸\"","text": "小红脸"}, +{"icon": "\"笑尿\"","text": "笑尿"}, +{"icon": "\"笑眼\"","text": "笑眼"}, +{"icon": "\"心碎\"","text": "心碎"}, +{"icon": "\"星星月亮\"","text": "星星月亮"}, +{"icon": "\"呀咩爹\"","text": "呀咩爹"}, +{"icon": "\"药丸\"","text": "药丸"}, +{"icon": "\"咦\"","text": "咦"}, +{"icon": "\"疑问\"","text": "疑问"}, +{"icon": "\"阴险\"","text": "阴险"}, +{"icon": "\"音乐\"","text": "音乐"}, +{"icon": "\"真棒\"","text": "真棒"}, +{"icon": "\"nico\"","text": "nico"}, +{"icon": "\"OK\"","text": "OK"}, +{"icon": "\"what\"","text": "what"}, +{"icon": "\"吃瓜\"","text": "吃瓜"}, +{"icon": "\"吃翔\"","text": "吃翔"}, +{"icon": "\"嘚瑟\"","text": "嘚瑟"}, +{"icon": "\"惊恐\"","text": "惊恐"} +]}} \ No newline at end of file diff --git a/src/main/resources/static/plugins/OwO/alu/不出所料.png b/src/main/resources/static/halo-common/OwO/alu/不出所料.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/不出所料.png rename to src/main/resources/static/halo-common/OwO/alu/不出所料.png diff --git a/src/main/resources/static/plugins/OwO/alu/不出所料@2x.png b/src/main/resources/static/halo-common/OwO/alu/不出所料@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/不出所料@2x.png rename to src/main/resources/static/halo-common/OwO/alu/不出所料@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/不说话.png b/src/main/resources/static/halo-common/OwO/alu/不说话.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/不说话.png rename to src/main/resources/static/halo-common/OwO/alu/不说话.png diff --git a/src/main/resources/static/plugins/OwO/alu/不说话@2x.png b/src/main/resources/static/halo-common/OwO/alu/不说话@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/不说话@2x.png rename to src/main/resources/static/halo-common/OwO/alu/不说话@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/不高兴.png b/src/main/resources/static/halo-common/OwO/alu/不高兴.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/不高兴.png rename to src/main/resources/static/halo-common/OwO/alu/不高兴.png diff --git a/src/main/resources/static/plugins/OwO/alu/不高兴@2x.png b/src/main/resources/static/halo-common/OwO/alu/不高兴@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/不高兴@2x.png rename to src/main/resources/static/halo-common/OwO/alu/不高兴@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/中刀.png b/src/main/resources/static/halo-common/OwO/alu/中刀.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/中刀.png rename to src/main/resources/static/halo-common/OwO/alu/中刀.png diff --git a/src/main/resources/static/plugins/OwO/alu/中刀@2x.png b/src/main/resources/static/halo-common/OwO/alu/中刀@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/中刀@2x.png rename to src/main/resources/static/halo-common/OwO/alu/中刀@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/中指.png b/src/main/resources/static/halo-common/OwO/alu/中指.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/中指.png rename to src/main/resources/static/halo-common/OwO/alu/中指.png diff --git a/src/main/resources/static/plugins/OwO/alu/中指@2x.png b/src/main/resources/static/halo-common/OwO/alu/中指@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/中指@2x.png rename to src/main/resources/static/halo-common/OwO/alu/中指@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/中枪.png b/src/main/resources/static/halo-common/OwO/alu/中枪.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/中枪.png rename to src/main/resources/static/halo-common/OwO/alu/中枪.png diff --git a/src/main/resources/static/plugins/OwO/alu/中枪@2x.png b/src/main/resources/static/halo-common/OwO/alu/中枪@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/中枪@2x.png rename to src/main/resources/static/halo-common/OwO/alu/中枪@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/亲亲.png b/src/main/resources/static/halo-common/OwO/alu/亲亲.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/亲亲.png rename to src/main/resources/static/halo-common/OwO/alu/亲亲.png diff --git a/src/main/resources/static/plugins/OwO/alu/亲亲@2x.png b/src/main/resources/static/halo-common/OwO/alu/亲亲@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/亲亲@2x.png rename to src/main/resources/static/halo-common/OwO/alu/亲亲@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/便便.png b/src/main/resources/static/halo-common/OwO/alu/便便.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/便便.png rename to src/main/resources/static/halo-common/OwO/alu/便便.png diff --git a/src/main/resources/static/plugins/OwO/alu/便便@2x.png b/src/main/resources/static/halo-common/OwO/alu/便便@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/便便@2x.png rename to src/main/resources/static/halo-common/OwO/alu/便便@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/傻笑.png b/src/main/resources/static/halo-common/OwO/alu/傻笑.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/傻笑.png rename to src/main/resources/static/halo-common/OwO/alu/傻笑.png diff --git a/src/main/resources/static/plugins/OwO/alu/傻笑@2x.png b/src/main/resources/static/halo-common/OwO/alu/傻笑@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/傻笑@2x.png rename to src/main/resources/static/halo-common/OwO/alu/傻笑@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/内伤.png b/src/main/resources/static/halo-common/OwO/alu/内伤.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/内伤.png rename to src/main/resources/static/halo-common/OwO/alu/内伤.png diff --git a/src/main/resources/static/plugins/OwO/alu/内伤@2x.png b/src/main/resources/static/halo-common/OwO/alu/内伤@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/内伤@2x.png rename to src/main/resources/static/halo-common/OwO/alu/内伤@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/击掌.png b/src/main/resources/static/halo-common/OwO/alu/击掌.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/击掌.png rename to src/main/resources/static/halo-common/OwO/alu/击掌.png diff --git a/src/main/resources/static/plugins/OwO/alu/击掌@2x.png b/src/main/resources/static/halo-common/OwO/alu/击掌@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/击掌@2x.png rename to src/main/resources/static/halo-common/OwO/alu/击掌@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/口水.png b/src/main/resources/static/halo-common/OwO/alu/口水.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/口水.png rename to src/main/resources/static/halo-common/OwO/alu/口水.png diff --git a/src/main/resources/static/plugins/OwO/alu/口水@2x.png b/src/main/resources/static/halo-common/OwO/alu/口水@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/口水@2x.png rename to src/main/resources/static/halo-common/OwO/alu/口水@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/吐.png b/src/main/resources/static/halo-common/OwO/alu/吐.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/吐.png rename to src/main/resources/static/halo-common/OwO/alu/吐.png diff --git a/src/main/resources/static/plugins/OwO/alu/吐@2x.png b/src/main/resources/static/halo-common/OwO/alu/吐@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/吐@2x.png rename to src/main/resources/static/halo-common/OwO/alu/吐@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/吐舌.png b/src/main/resources/static/halo-common/OwO/alu/吐舌.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/吐舌.png rename to src/main/resources/static/halo-common/OwO/alu/吐舌.png diff --git a/src/main/resources/static/plugins/OwO/alu/吐舌@2x.png b/src/main/resources/static/halo-common/OwO/alu/吐舌@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/吐舌@2x.png rename to src/main/resources/static/halo-common/OwO/alu/吐舌@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/吐血倒地.png b/src/main/resources/static/halo-common/OwO/alu/吐血倒地.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/吐血倒地.png rename to src/main/resources/static/halo-common/OwO/alu/吐血倒地.png diff --git a/src/main/resources/static/plugins/OwO/alu/吐血倒地@2x.png b/src/main/resources/static/halo-common/OwO/alu/吐血倒地@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/吐血倒地@2x.png rename to src/main/resources/static/halo-common/OwO/alu/吐血倒地@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/呲牙.png b/src/main/resources/static/halo-common/OwO/alu/呲牙.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/呲牙.png rename to src/main/resources/static/halo-common/OwO/alu/呲牙.png diff --git a/src/main/resources/static/plugins/OwO/alu/呲牙@2x.png b/src/main/resources/static/halo-common/OwO/alu/呲牙@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/呲牙@2x.png rename to src/main/resources/static/halo-common/OwO/alu/呲牙@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/咽气.png b/src/main/resources/static/halo-common/OwO/alu/咽气.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/咽气.png rename to src/main/resources/static/halo-common/OwO/alu/咽气.png diff --git a/src/main/resources/static/plugins/OwO/alu/咽气@2x.png b/src/main/resources/static/halo-common/OwO/alu/咽气@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/咽气@2x.png rename to src/main/resources/static/halo-common/OwO/alu/咽气@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/哭泣.png b/src/main/resources/static/halo-common/OwO/alu/哭泣.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/哭泣.png rename to src/main/resources/static/halo-common/OwO/alu/哭泣.png diff --git a/src/main/resources/static/plugins/OwO/alu/哭泣@2x.png b/src/main/resources/static/halo-common/OwO/alu/哭泣@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/哭泣@2x.png rename to src/main/resources/static/halo-common/OwO/alu/哭泣@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/喜极而泣.png b/src/main/resources/static/halo-common/OwO/alu/喜极而泣.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/喜极而泣.png rename to src/main/resources/static/halo-common/OwO/alu/喜极而泣.png diff --git a/src/main/resources/static/plugins/OwO/alu/喜极而泣@2x.png b/src/main/resources/static/halo-common/OwO/alu/喜极而泣@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/喜极而泣@2x.png rename to src/main/resources/static/halo-common/OwO/alu/喜极而泣@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/喷水.png b/src/main/resources/static/halo-common/OwO/alu/喷水.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/喷水.png rename to src/main/resources/static/halo-common/OwO/alu/喷水.png diff --git a/src/main/resources/static/plugins/OwO/alu/喷水@2x.png b/src/main/resources/static/halo-common/OwO/alu/喷水@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/喷水@2x.png rename to src/main/resources/static/halo-common/OwO/alu/喷水@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/喷血.png b/src/main/resources/static/halo-common/OwO/alu/喷血.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/喷血.png rename to src/main/resources/static/halo-common/OwO/alu/喷血.png diff --git a/src/main/resources/static/plugins/OwO/alu/喷血@2x.png b/src/main/resources/static/halo-common/OwO/alu/喷血@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/喷血@2x.png rename to src/main/resources/static/halo-common/OwO/alu/喷血@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/坐等.png b/src/main/resources/static/halo-common/OwO/alu/坐等.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/坐等.png rename to src/main/resources/static/halo-common/OwO/alu/坐等.png diff --git a/src/main/resources/static/plugins/OwO/alu/坐等@2x.png b/src/main/resources/static/halo-common/OwO/alu/坐等@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/坐等@2x.png rename to src/main/resources/static/halo-common/OwO/alu/坐等@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/大囧.png b/src/main/resources/static/halo-common/OwO/alu/大囧.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/大囧.png rename to src/main/resources/static/halo-common/OwO/alu/大囧.png diff --git a/src/main/resources/static/plugins/OwO/alu/大囧@2x.png b/src/main/resources/static/halo-common/OwO/alu/大囧@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/大囧@2x.png rename to src/main/resources/static/halo-common/OwO/alu/大囧@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/害羞.png b/src/main/resources/static/halo-common/OwO/alu/害羞.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/害羞.png rename to src/main/resources/static/halo-common/OwO/alu/害羞.png diff --git a/src/main/resources/static/plugins/OwO/alu/害羞@2x.png b/src/main/resources/static/halo-common/OwO/alu/害羞@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/害羞@2x.png rename to src/main/resources/static/halo-common/OwO/alu/害羞@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/小怒.png b/src/main/resources/static/halo-common/OwO/alu/小怒.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/小怒.png rename to src/main/resources/static/halo-common/OwO/alu/小怒.png diff --git a/src/main/resources/static/plugins/OwO/alu/小怒@2x.png b/src/main/resources/static/halo-common/OwO/alu/小怒@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/小怒@2x.png rename to src/main/resources/static/halo-common/OwO/alu/小怒@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/小眼睛.png b/src/main/resources/static/halo-common/OwO/alu/小眼睛.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/小眼睛.png rename to src/main/resources/static/halo-common/OwO/alu/小眼睛.png diff --git a/src/main/resources/static/plugins/OwO/alu/小眼睛@2x.png b/src/main/resources/static/halo-common/OwO/alu/小眼睛@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/小眼睛@2x.png rename to src/main/resources/static/halo-common/OwO/alu/小眼睛@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/尴尬.png b/src/main/resources/static/halo-common/OwO/alu/尴尬.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/尴尬.png rename to src/main/resources/static/halo-common/OwO/alu/尴尬.png diff --git a/src/main/resources/static/plugins/OwO/alu/尴尬@2x.png b/src/main/resources/static/halo-common/OwO/alu/尴尬@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/尴尬@2x.png rename to src/main/resources/static/halo-common/OwO/alu/尴尬@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/得意.png b/src/main/resources/static/halo-common/OwO/alu/得意.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/得意.png rename to src/main/resources/static/halo-common/OwO/alu/得意.png diff --git a/src/main/resources/static/plugins/OwO/alu/得意@2x.png b/src/main/resources/static/halo-common/OwO/alu/得意@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/得意@2x.png rename to src/main/resources/static/halo-common/OwO/alu/得意@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/惊喜.png b/src/main/resources/static/halo-common/OwO/alu/惊喜.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/惊喜.png rename to src/main/resources/static/halo-common/OwO/alu/惊喜.png diff --git a/src/main/resources/static/plugins/OwO/alu/惊喜@2x.png b/src/main/resources/static/halo-common/OwO/alu/惊喜@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/惊喜@2x.png rename to src/main/resources/static/halo-common/OwO/alu/惊喜@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/想一想.png b/src/main/resources/static/halo-common/OwO/alu/想一想.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/想一想.png rename to src/main/resources/static/halo-common/OwO/alu/想一想.png diff --git a/src/main/resources/static/plugins/OwO/alu/想一想@2x.png b/src/main/resources/static/halo-common/OwO/alu/想一想@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/想一想@2x.png rename to src/main/resources/static/halo-common/OwO/alu/想一想@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/愤怒.png b/src/main/resources/static/halo-common/OwO/alu/愤怒.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/愤怒.png rename to src/main/resources/static/halo-common/OwO/alu/愤怒.png diff --git a/src/main/resources/static/plugins/OwO/alu/愤怒@2x.png b/src/main/resources/static/halo-common/OwO/alu/愤怒@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/愤怒@2x.png rename to src/main/resources/static/halo-common/OwO/alu/愤怒@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/扇耳光.png b/src/main/resources/static/halo-common/OwO/alu/扇耳光.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/扇耳光.png rename to src/main/resources/static/halo-common/OwO/alu/扇耳光.png diff --git a/src/main/resources/static/plugins/OwO/alu/扇耳光@2x.png b/src/main/resources/static/halo-common/OwO/alu/扇耳光@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/扇耳光@2x.png rename to src/main/resources/static/halo-common/OwO/alu/扇耳光@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/投降.png b/src/main/resources/static/halo-common/OwO/alu/投降.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/投降.png rename to src/main/resources/static/halo-common/OwO/alu/投降.png diff --git a/src/main/resources/static/plugins/OwO/alu/投降@2x.png b/src/main/resources/static/halo-common/OwO/alu/投降@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/投降@2x.png rename to src/main/resources/static/halo-common/OwO/alu/投降@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/抠鼻.png b/src/main/resources/static/halo-common/OwO/alu/抠鼻.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/抠鼻.png rename to src/main/resources/static/halo-common/OwO/alu/抠鼻.png diff --git a/src/main/resources/static/plugins/OwO/alu/抠鼻@2x.png b/src/main/resources/static/halo-common/OwO/alu/抠鼻@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/抠鼻@2x.png rename to src/main/resources/static/halo-common/OwO/alu/抠鼻@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/抽烟.png b/src/main/resources/static/halo-common/OwO/alu/抽烟.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/抽烟.png rename to src/main/resources/static/halo-common/OwO/alu/抽烟.png diff --git a/src/main/resources/static/plugins/OwO/alu/抽烟@2x.png b/src/main/resources/static/halo-common/OwO/alu/抽烟@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/抽烟@2x.png rename to src/main/resources/static/halo-common/OwO/alu/抽烟@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/无奈.png b/src/main/resources/static/halo-common/OwO/alu/无奈.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/无奈.png rename to src/main/resources/static/halo-common/OwO/alu/无奈.png diff --git a/src/main/resources/static/plugins/OwO/alu/无奈@2x.png b/src/main/resources/static/halo-common/OwO/alu/无奈@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/无奈@2x.png rename to src/main/resources/static/halo-common/OwO/alu/无奈@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/无所谓.png b/src/main/resources/static/halo-common/OwO/alu/无所谓.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/无所谓.png rename to src/main/resources/static/halo-common/OwO/alu/无所谓.png diff --git a/src/main/resources/static/plugins/OwO/alu/无所谓@2x.png b/src/main/resources/static/halo-common/OwO/alu/无所谓@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/无所谓@2x.png rename to src/main/resources/static/halo-common/OwO/alu/无所谓@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/无语.png b/src/main/resources/static/halo-common/OwO/alu/无语.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/无语.png rename to src/main/resources/static/halo-common/OwO/alu/无语.png diff --git a/src/main/resources/static/plugins/OwO/alu/无语@2x.png b/src/main/resources/static/halo-common/OwO/alu/无语@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/无语@2x.png rename to src/main/resources/static/halo-common/OwO/alu/无语@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/暗地观察.png b/src/main/resources/static/halo-common/OwO/alu/暗地观察.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/暗地观察.png rename to src/main/resources/static/halo-common/OwO/alu/暗地观察.png diff --git a/src/main/resources/static/plugins/OwO/alu/暗地观察@2x.png b/src/main/resources/static/halo-common/OwO/alu/暗地观察@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/暗地观察@2x.png rename to src/main/resources/static/halo-common/OwO/alu/暗地观察@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/期待.png b/src/main/resources/static/halo-common/OwO/alu/期待.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/期待.png rename to src/main/resources/static/halo-common/OwO/alu/期待.png diff --git a/src/main/resources/static/plugins/OwO/alu/期待@2x.png b/src/main/resources/static/halo-common/OwO/alu/期待@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/期待@2x.png rename to src/main/resources/static/halo-common/OwO/alu/期待@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/欢呼.png b/src/main/resources/static/halo-common/OwO/alu/欢呼.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/欢呼.png rename to src/main/resources/static/halo-common/OwO/alu/欢呼.png diff --git a/src/main/resources/static/plugins/OwO/alu/欢呼@2x.png b/src/main/resources/static/halo-common/OwO/alu/欢呼@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/欢呼@2x.png rename to src/main/resources/static/halo-common/OwO/alu/欢呼@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/汗.png b/src/main/resources/static/halo-common/OwO/alu/汗.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/汗.png rename to src/main/resources/static/halo-common/OwO/alu/汗.png diff --git a/src/main/resources/static/plugins/OwO/alu/汗@2x.png b/src/main/resources/static/halo-common/OwO/alu/汗@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/汗@2x.png rename to src/main/resources/static/halo-common/OwO/alu/汗@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/深思.png b/src/main/resources/static/halo-common/OwO/alu/深思.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/深思.png rename to src/main/resources/static/halo-common/OwO/alu/深思.png diff --git a/src/main/resources/static/plugins/OwO/alu/深思@2x.png b/src/main/resources/static/halo-common/OwO/alu/深思@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/深思@2x.png rename to src/main/resources/static/halo-common/OwO/alu/深思@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/狂汗.png b/src/main/resources/static/halo-common/OwO/alu/狂汗.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/狂汗.png rename to src/main/resources/static/halo-common/OwO/alu/狂汗.png diff --git a/src/main/resources/static/plugins/OwO/alu/狂汗@2x.png b/src/main/resources/static/halo-common/OwO/alu/狂汗@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/狂汗@2x.png rename to src/main/resources/static/halo-common/OwO/alu/狂汗@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/献花.png b/src/main/resources/static/halo-common/OwO/alu/献花.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/献花.png rename to src/main/resources/static/halo-common/OwO/alu/献花.png diff --git a/src/main/resources/static/plugins/OwO/alu/献花@2x.png b/src/main/resources/static/halo-common/OwO/alu/献花@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/献花@2x.png rename to src/main/resources/static/halo-common/OwO/alu/献花@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/献黄瓜.png b/src/main/resources/static/halo-common/OwO/alu/献黄瓜.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/献黄瓜.png rename to src/main/resources/static/halo-common/OwO/alu/献黄瓜.png diff --git a/src/main/resources/static/plugins/OwO/alu/献黄瓜@2x.png b/src/main/resources/static/halo-common/OwO/alu/献黄瓜@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/献黄瓜@2x.png rename to src/main/resources/static/halo-common/OwO/alu/献黄瓜@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/皱眉.png b/src/main/resources/static/halo-common/OwO/alu/皱眉.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/皱眉.png rename to src/main/resources/static/halo-common/OwO/alu/皱眉.png diff --git a/src/main/resources/static/plugins/OwO/alu/皱眉@2x.png b/src/main/resources/static/halo-common/OwO/alu/皱眉@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/皱眉@2x.png rename to src/main/resources/static/halo-common/OwO/alu/皱眉@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/看不见.png b/src/main/resources/static/halo-common/OwO/alu/看不见.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/看不见.png rename to src/main/resources/static/halo-common/OwO/alu/看不见.png diff --git a/src/main/resources/static/plugins/OwO/alu/看不见@2x.png b/src/main/resources/static/halo-common/OwO/alu/看不见@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/看不见@2x.png rename to src/main/resources/static/halo-common/OwO/alu/看不见@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/看热闹.png b/src/main/resources/static/halo-common/OwO/alu/看热闹.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/看热闹.png rename to src/main/resources/static/halo-common/OwO/alu/看热闹.png diff --git a/src/main/resources/static/plugins/OwO/alu/看热闹@2x.png b/src/main/resources/static/halo-common/OwO/alu/看热闹@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/看热闹@2x.png rename to src/main/resources/static/halo-common/OwO/alu/看热闹@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/肿包.png b/src/main/resources/static/halo-common/OwO/alu/肿包.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/肿包.png rename to src/main/resources/static/halo-common/OwO/alu/肿包.png diff --git a/src/main/resources/static/plugins/OwO/alu/肿包@2x.png b/src/main/resources/static/halo-common/OwO/alu/肿包@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/肿包@2x.png rename to src/main/resources/static/halo-common/OwO/alu/肿包@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/脸红.png b/src/main/resources/static/halo-common/OwO/alu/脸红.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/脸红.png rename to src/main/resources/static/halo-common/OwO/alu/脸红.png diff --git a/src/main/resources/static/plugins/OwO/alu/脸红@2x.png b/src/main/resources/static/halo-common/OwO/alu/脸红@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/脸红@2x.png rename to src/main/resources/static/halo-common/OwO/alu/脸红@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/蜡烛.png b/src/main/resources/static/halo-common/OwO/alu/蜡烛.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/蜡烛.png rename to src/main/resources/static/halo-common/OwO/alu/蜡烛.png diff --git a/src/main/resources/static/plugins/OwO/alu/蜡烛@2x.png b/src/main/resources/static/halo-common/OwO/alu/蜡烛@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/蜡烛@2x.png rename to src/main/resources/static/halo-common/OwO/alu/蜡烛@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/装大款.png b/src/main/resources/static/halo-common/OwO/alu/装大款.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/装大款.png rename to src/main/resources/static/halo-common/OwO/alu/装大款.png diff --git a/src/main/resources/static/plugins/OwO/alu/装大款@2x.png b/src/main/resources/static/halo-common/OwO/alu/装大款@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/装大款@2x.png rename to src/main/resources/static/halo-common/OwO/alu/装大款@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/观察.png b/src/main/resources/static/halo-common/OwO/alu/观察.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/观察.png rename to src/main/resources/static/halo-common/OwO/alu/观察.png diff --git a/src/main/resources/static/plugins/OwO/alu/观察@2x.png b/src/main/resources/static/halo-common/OwO/alu/观察@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/观察@2x.png rename to src/main/resources/static/halo-common/OwO/alu/观察@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/赞一个.png b/src/main/resources/static/halo-common/OwO/alu/赞一个.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/赞一个.png rename to src/main/resources/static/halo-common/OwO/alu/赞一个.png diff --git a/src/main/resources/static/plugins/OwO/alu/赞一个@2x.png b/src/main/resources/static/halo-common/OwO/alu/赞一个@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/赞一个@2x.png rename to src/main/resources/static/halo-common/OwO/alu/赞一个@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/邪恶.png b/src/main/resources/static/halo-common/OwO/alu/邪恶.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/邪恶.png rename to src/main/resources/static/halo-common/OwO/alu/邪恶.png diff --git a/src/main/resources/static/plugins/OwO/alu/邪恶@2x.png b/src/main/resources/static/halo-common/OwO/alu/邪恶@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/邪恶@2x.png rename to src/main/resources/static/halo-common/OwO/alu/邪恶@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/锁眉.png b/src/main/resources/static/halo-common/OwO/alu/锁眉.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/锁眉.png rename to src/main/resources/static/halo-common/OwO/alu/锁眉.png diff --git a/src/main/resources/static/plugins/OwO/alu/锁眉@2x.png b/src/main/resources/static/halo-common/OwO/alu/锁眉@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/锁眉@2x.png rename to src/main/resources/static/halo-common/OwO/alu/锁眉@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/长草.png b/src/main/resources/static/halo-common/OwO/alu/长草.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/长草.png rename to src/main/resources/static/halo-common/OwO/alu/长草.png diff --git a/src/main/resources/static/plugins/OwO/alu/长草@2x.png b/src/main/resources/static/halo-common/OwO/alu/长草@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/长草@2x.png rename to src/main/resources/static/halo-common/OwO/alu/长草@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/阴暗.png b/src/main/resources/static/halo-common/OwO/alu/阴暗.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/阴暗.png rename to src/main/resources/static/halo-common/OwO/alu/阴暗.png diff --git a/src/main/resources/static/plugins/OwO/alu/阴暗@2x.png b/src/main/resources/static/halo-common/OwO/alu/阴暗@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/阴暗@2x.png rename to src/main/resources/static/halo-common/OwO/alu/阴暗@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/高兴.png b/src/main/resources/static/halo-common/OwO/alu/高兴.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/高兴.png rename to src/main/resources/static/halo-common/OwO/alu/高兴.png diff --git a/src/main/resources/static/plugins/OwO/alu/高兴@2x.png b/src/main/resources/static/halo-common/OwO/alu/高兴@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/高兴@2x.png rename to src/main/resources/static/halo-common/OwO/alu/高兴@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/黑线.png b/src/main/resources/static/halo-common/OwO/alu/黑线.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/黑线.png rename to src/main/resources/static/halo-common/OwO/alu/黑线.png diff --git a/src/main/resources/static/plugins/OwO/alu/黑线@2x.png b/src/main/resources/static/halo-common/OwO/alu/黑线@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/黑线@2x.png rename to src/main/resources/static/halo-common/OwO/alu/黑线@2x.png diff --git a/src/main/resources/static/plugins/OwO/alu/鼓掌.png b/src/main/resources/static/halo-common/OwO/alu/鼓掌.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/鼓掌.png rename to src/main/resources/static/halo-common/OwO/alu/鼓掌.png diff --git a/src/main/resources/static/plugins/OwO/alu/鼓掌@2x.png b/src/main/resources/static/halo-common/OwO/alu/鼓掌@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/alu/鼓掌@2x.png rename to src/main/resources/static/halo-common/OwO/alu/鼓掌@2x.png diff --git a/src/main/resources/static/plugins/OwO/images/smile.svg b/src/main/resources/static/halo-common/OwO/images/smile.svg similarity index 100% rename from src/main/resources/static/plugins/OwO/images/smile.svg rename to src/main/resources/static/halo-common/OwO/images/smile.svg diff --git a/src/main/resources/static/plugins/OwO/paopao/OK.png b/src/main/resources/static/halo-common/OwO/paopao/OK.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/OK.png rename to src/main/resources/static/halo-common/OwO/paopao/OK.png diff --git a/src/main/resources/static/plugins/OwO/paopao/OK@2x.png b/src/main/resources/static/halo-common/OwO/paopao/OK@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/OK@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/OK@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/nico.png b/src/main/resources/static/halo-common/OwO/paopao/nico.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/nico.png rename to src/main/resources/static/halo-common/OwO/paopao/nico.png diff --git a/src/main/resources/static/plugins/OwO/paopao/nico@2x.png b/src/main/resources/static/halo-common/OwO/paopao/nico@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/nico@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/nico@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/what.png b/src/main/resources/static/halo-common/OwO/paopao/what.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/what.png rename to src/main/resources/static/halo-common/OwO/paopao/what.png diff --git a/src/main/resources/static/plugins/OwO/paopao/what@2x.png b/src/main/resources/static/halo-common/OwO/paopao/what@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/what@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/what@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/三道杠.png b/src/main/resources/static/halo-common/OwO/paopao/三道杠.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/三道杠.png rename to src/main/resources/static/halo-common/OwO/paopao/三道杠.png diff --git a/src/main/resources/static/plugins/OwO/paopao/三道杠@2x.png b/src/main/resources/static/halo-common/OwO/paopao/三道杠@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/三道杠@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/三道杠@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/不高兴.png b/src/main/resources/static/halo-common/OwO/paopao/不高兴.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/不高兴.png rename to src/main/resources/static/halo-common/OwO/paopao/不高兴.png diff --git a/src/main/resources/static/plugins/OwO/paopao/不高兴@2x.png b/src/main/resources/static/halo-common/OwO/paopao/不高兴@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/不高兴@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/不高兴@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/乖.png b/src/main/resources/static/halo-common/OwO/paopao/乖.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/乖.png rename to src/main/resources/static/halo-common/OwO/paopao/乖.png diff --git a/src/main/resources/static/plugins/OwO/paopao/乖@2x.png b/src/main/resources/static/halo-common/OwO/paopao/乖@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/乖@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/乖@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/你懂的.png b/src/main/resources/static/halo-common/OwO/paopao/你懂的.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/你懂的.png rename to src/main/resources/static/halo-common/OwO/paopao/你懂的.png diff --git a/src/main/resources/static/plugins/OwO/paopao/你懂的@2x.png b/src/main/resources/static/halo-common/OwO/paopao/你懂的@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/你懂的@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/你懂的@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/便便.png b/src/main/resources/static/halo-common/OwO/paopao/便便.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/便便.png rename to src/main/resources/static/halo-common/OwO/paopao/便便.png diff --git a/src/main/resources/static/plugins/OwO/paopao/便便@2x.png b/src/main/resources/static/halo-common/OwO/paopao/便便@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/便便@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/便便@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/冷.png b/src/main/resources/static/halo-common/OwO/paopao/冷.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/冷.png rename to src/main/resources/static/halo-common/OwO/paopao/冷.png diff --git a/src/main/resources/static/plugins/OwO/paopao/冷@2x.png b/src/main/resources/static/halo-common/OwO/paopao/冷@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/冷@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/冷@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/勉强.png b/src/main/resources/static/halo-common/OwO/paopao/勉强.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/勉强.png rename to src/main/resources/static/halo-common/OwO/paopao/勉强.png diff --git a/src/main/resources/static/plugins/OwO/paopao/勉强@2x.png b/src/main/resources/static/halo-common/OwO/paopao/勉强@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/勉强@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/勉强@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/吃瓜.png b/src/main/resources/static/halo-common/OwO/paopao/吃瓜.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/吃瓜.png rename to src/main/resources/static/halo-common/OwO/paopao/吃瓜.png diff --git a/src/main/resources/static/plugins/OwO/paopao/吃瓜@2x.png b/src/main/resources/static/halo-common/OwO/paopao/吃瓜@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/吃瓜@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/吃瓜@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/吃翔.png b/src/main/resources/static/halo-common/OwO/paopao/吃翔.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/吃翔.png rename to src/main/resources/static/halo-common/OwO/paopao/吃翔.png diff --git a/src/main/resources/static/plugins/OwO/paopao/吃翔@2x.png b/src/main/resources/static/halo-common/OwO/paopao/吃翔@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/吃翔@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/吃翔@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/吐.png b/src/main/resources/static/halo-common/OwO/paopao/吐.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/吐.png rename to src/main/resources/static/halo-common/OwO/paopao/吐.png diff --git a/src/main/resources/static/plugins/OwO/paopao/吐@2x.png b/src/main/resources/static/halo-common/OwO/paopao/吐@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/吐@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/吐@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/吐舌.png b/src/main/resources/static/halo-common/OwO/paopao/吐舌.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/吐舌.png rename to src/main/resources/static/halo-common/OwO/paopao/吐舌.png diff --git a/src/main/resources/static/plugins/OwO/paopao/吐舌@2x.png b/src/main/resources/static/halo-common/OwO/paopao/吐舌@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/吐舌@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/吐舌@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/呀咩爹.png b/src/main/resources/static/halo-common/OwO/paopao/呀咩爹.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/呀咩爹.png rename to src/main/resources/static/halo-common/OwO/paopao/呀咩爹.png diff --git a/src/main/resources/static/plugins/OwO/paopao/呀咩爹@2x.png b/src/main/resources/static/halo-common/OwO/paopao/呀咩爹@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/呀咩爹@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/呀咩爹@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/呵呵.png b/src/main/resources/static/halo-common/OwO/paopao/呵呵.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/呵呵.png rename to src/main/resources/static/halo-common/OwO/paopao/呵呵.png diff --git a/src/main/resources/static/plugins/OwO/paopao/呵呵@2x.png b/src/main/resources/static/halo-common/OwO/paopao/呵呵@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/呵呵@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/呵呵@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/呼.png b/src/main/resources/static/halo-common/OwO/paopao/呼.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/呼.png rename to src/main/resources/static/halo-common/OwO/paopao/呼.png diff --git a/src/main/resources/static/plugins/OwO/paopao/呼@2x.png b/src/main/resources/static/halo-common/OwO/paopao/呼@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/呼@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/呼@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/咦.png b/src/main/resources/static/halo-common/OwO/paopao/咦.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/咦.png rename to src/main/resources/static/halo-common/OwO/paopao/咦.png diff --git a/src/main/resources/static/plugins/OwO/paopao/咦@2x.png b/src/main/resources/static/halo-common/OwO/paopao/咦@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/咦@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/咦@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/哈哈.png b/src/main/resources/static/halo-common/OwO/paopao/哈哈.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/哈哈.png rename to src/main/resources/static/halo-common/OwO/paopao/哈哈.png diff --git a/src/main/resources/static/plugins/OwO/paopao/哈哈@2x.png b/src/main/resources/static/halo-common/OwO/paopao/哈哈@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/哈哈@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/哈哈@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/啊.png b/src/main/resources/static/halo-common/OwO/paopao/啊.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/啊.png rename to src/main/resources/static/halo-common/OwO/paopao/啊.png diff --git a/src/main/resources/static/plugins/OwO/paopao/啊@2x.png b/src/main/resources/static/halo-common/OwO/paopao/啊@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/啊@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/啊@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/喷.png b/src/main/resources/static/halo-common/OwO/paopao/喷.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/喷.png rename to src/main/resources/static/halo-common/OwO/paopao/喷.png diff --git a/src/main/resources/static/plugins/OwO/paopao/喷@2x.png b/src/main/resources/static/halo-common/OwO/paopao/喷@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/喷@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/喷@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/嘚瑟.png b/src/main/resources/static/halo-common/OwO/paopao/嘚瑟.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/嘚瑟.png rename to src/main/resources/static/halo-common/OwO/paopao/嘚瑟.png diff --git a/src/main/resources/static/plugins/OwO/paopao/嘚瑟@2x.png b/src/main/resources/static/halo-common/OwO/paopao/嘚瑟@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/嘚瑟@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/嘚瑟@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/大拇指.png b/src/main/resources/static/halo-common/OwO/paopao/大拇指.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/大拇指.png rename to src/main/resources/static/halo-common/OwO/paopao/大拇指.png diff --git a/src/main/resources/static/plugins/OwO/paopao/大拇指@2x.png b/src/main/resources/static/halo-common/OwO/paopao/大拇指@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/大拇指@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/大拇指@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/太开心.png b/src/main/resources/static/halo-common/OwO/paopao/太开心.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/太开心.png rename to src/main/resources/static/halo-common/OwO/paopao/太开心.png diff --git a/src/main/resources/static/plugins/OwO/paopao/太开心@2x.png b/src/main/resources/static/halo-common/OwO/paopao/太开心@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/太开心@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/太开心@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/太阳.png b/src/main/resources/static/halo-common/OwO/paopao/太阳.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/太阳.png rename to src/main/resources/static/halo-common/OwO/paopao/太阳.png diff --git a/src/main/resources/static/plugins/OwO/paopao/太阳@2x.png b/src/main/resources/static/halo-common/OwO/paopao/太阳@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/太阳@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/太阳@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/委屈.png b/src/main/resources/static/halo-common/OwO/paopao/委屈.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/委屈.png rename to src/main/resources/static/halo-common/OwO/paopao/委屈.png diff --git a/src/main/resources/static/plugins/OwO/paopao/委屈@2x.png b/src/main/resources/static/halo-common/OwO/paopao/委屈@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/委屈@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/委屈@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/小乖.png b/src/main/resources/static/halo-common/OwO/paopao/小乖.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/小乖.png rename to src/main/resources/static/halo-common/OwO/paopao/小乖.png diff --git a/src/main/resources/static/plugins/OwO/paopao/小乖@2x.png b/src/main/resources/static/halo-common/OwO/paopao/小乖@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/小乖@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/小乖@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/小红脸.png b/src/main/resources/static/halo-common/OwO/paopao/小红脸.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/小红脸.png rename to src/main/resources/static/halo-common/OwO/paopao/小红脸.png diff --git a/src/main/resources/static/plugins/OwO/paopao/小红脸@2x.png b/src/main/resources/static/halo-common/OwO/paopao/小红脸@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/小红脸@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/小红脸@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/开心.png b/src/main/resources/static/halo-common/OwO/paopao/开心.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/开心.png rename to src/main/resources/static/halo-common/OwO/paopao/开心.png diff --git a/src/main/resources/static/plugins/OwO/paopao/开心@2x.png b/src/main/resources/static/halo-common/OwO/paopao/开心@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/开心@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/开心@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/弱.png b/src/main/resources/static/halo-common/OwO/paopao/弱.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/弱.png rename to src/main/resources/static/halo-common/OwO/paopao/弱.png diff --git a/src/main/resources/static/plugins/OwO/paopao/弱@2x.png b/src/main/resources/static/halo-common/OwO/paopao/弱@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/弱@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/弱@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/彩虹.png b/src/main/resources/static/halo-common/OwO/paopao/彩虹.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/彩虹.png rename to src/main/resources/static/halo-common/OwO/paopao/彩虹.png diff --git a/src/main/resources/static/plugins/OwO/paopao/彩虹@2x.png b/src/main/resources/static/halo-common/OwO/paopao/彩虹@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/彩虹@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/彩虹@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/心碎.png b/src/main/resources/static/halo-common/OwO/paopao/心碎.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/心碎.png rename to src/main/resources/static/halo-common/OwO/paopao/心碎.png diff --git a/src/main/resources/static/plugins/OwO/paopao/心碎@2x.png b/src/main/resources/static/halo-common/OwO/paopao/心碎@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/心碎@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/心碎@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/怒.png b/src/main/resources/static/halo-common/OwO/paopao/怒.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/怒.png rename to src/main/resources/static/halo-common/OwO/paopao/怒.png diff --git a/src/main/resources/static/plugins/OwO/paopao/怒@2x.png b/src/main/resources/static/halo-common/OwO/paopao/怒@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/怒@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/怒@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/惊哭.png b/src/main/resources/static/halo-common/OwO/paopao/惊哭.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/惊哭.png rename to src/main/resources/static/halo-common/OwO/paopao/惊哭.png diff --git a/src/main/resources/static/plugins/OwO/paopao/惊哭@2x.png b/src/main/resources/static/halo-common/OwO/paopao/惊哭@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/惊哭@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/惊哭@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/惊恐.png b/src/main/resources/static/halo-common/OwO/paopao/惊恐.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/惊恐.png rename to src/main/resources/static/halo-common/OwO/paopao/惊恐.png diff --git a/src/main/resources/static/plugins/OwO/paopao/惊恐@2x.png b/src/main/resources/static/halo-common/OwO/paopao/惊恐@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/惊恐@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/惊恐@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/惊讶.png b/src/main/resources/static/halo-common/OwO/paopao/惊讶.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/惊讶.png rename to src/main/resources/static/halo-common/OwO/paopao/惊讶.png diff --git a/src/main/resources/static/plugins/OwO/paopao/惊讶@2x.png b/src/main/resources/static/halo-common/OwO/paopao/惊讶@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/惊讶@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/惊讶@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/懒得理.png b/src/main/resources/static/halo-common/OwO/paopao/懒得理.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/懒得理.png rename to src/main/resources/static/halo-common/OwO/paopao/懒得理.png diff --git a/src/main/resources/static/plugins/OwO/paopao/懒得理@2x.png b/src/main/resources/static/halo-common/OwO/paopao/懒得理@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/懒得理@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/懒得理@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/手纸.png b/src/main/resources/static/halo-common/OwO/paopao/手纸.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/手纸.png rename to src/main/resources/static/halo-common/OwO/paopao/手纸.png diff --git a/src/main/resources/static/plugins/OwO/paopao/手纸@2x.png b/src/main/resources/static/halo-common/OwO/paopao/手纸@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/手纸@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/手纸@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/挖鼻.png b/src/main/resources/static/halo-common/OwO/paopao/挖鼻.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/挖鼻.png rename to src/main/resources/static/halo-common/OwO/paopao/挖鼻.png diff --git a/src/main/resources/static/plugins/OwO/paopao/挖鼻@2x.png b/src/main/resources/static/halo-common/OwO/paopao/挖鼻@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/挖鼻@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/挖鼻@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/捂嘴笑.png b/src/main/resources/static/halo-common/OwO/paopao/捂嘴笑.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/捂嘴笑.png rename to src/main/resources/static/halo-common/OwO/paopao/捂嘴笑.png diff --git a/src/main/resources/static/plugins/OwO/paopao/捂嘴笑@2x.png b/src/main/resources/static/halo-common/OwO/paopao/捂嘴笑@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/捂嘴笑@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/捂嘴笑@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/星星月亮.png b/src/main/resources/static/halo-common/OwO/paopao/星星月亮.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/星星月亮.png rename to src/main/resources/static/halo-common/OwO/paopao/星星月亮.png diff --git a/src/main/resources/static/plugins/OwO/paopao/星星月亮@2x.png b/src/main/resources/static/halo-common/OwO/paopao/星星月亮@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/星星月亮@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/星星月亮@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/汗.png b/src/main/resources/static/halo-common/OwO/paopao/汗.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/汗.png rename to src/main/resources/static/halo-common/OwO/paopao/汗.png diff --git a/src/main/resources/static/plugins/OwO/paopao/汗@2x.png b/src/main/resources/static/halo-common/OwO/paopao/汗@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/汗@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/汗@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/沙发.png b/src/main/resources/static/halo-common/OwO/paopao/沙发.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/沙发.png rename to src/main/resources/static/halo-common/OwO/paopao/沙发.png diff --git a/src/main/resources/static/plugins/OwO/paopao/沙发@2x.png b/src/main/resources/static/halo-common/OwO/paopao/沙发@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/沙发@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/沙发@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/泪.png b/src/main/resources/static/halo-common/OwO/paopao/泪.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/泪.png rename to src/main/resources/static/halo-common/OwO/paopao/泪.png diff --git a/src/main/resources/static/plugins/OwO/paopao/泪@2x.png b/src/main/resources/static/halo-common/OwO/paopao/泪@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/泪@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/泪@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/滑稽.png b/src/main/resources/static/halo-common/OwO/paopao/滑稽.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/滑稽.png rename to src/main/resources/static/halo-common/OwO/paopao/滑稽.png diff --git a/src/main/resources/static/plugins/OwO/paopao/滑稽@2x.png b/src/main/resources/static/halo-common/OwO/paopao/滑稽@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/滑稽@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/滑稽@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/灯泡.png b/src/main/resources/static/halo-common/OwO/paopao/灯泡.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/灯泡.png rename to src/main/resources/static/halo-common/OwO/paopao/灯泡.png diff --git a/src/main/resources/static/plugins/OwO/paopao/灯泡@2x.png b/src/main/resources/static/halo-common/OwO/paopao/灯泡@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/灯泡@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/灯泡@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/爱心.png b/src/main/resources/static/halo-common/OwO/paopao/爱心.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/爱心.png rename to src/main/resources/static/halo-common/OwO/paopao/爱心.png diff --git a/src/main/resources/static/plugins/OwO/paopao/爱心@2x.png b/src/main/resources/static/halo-common/OwO/paopao/爱心@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/爱心@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/爱心@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/犀利.png b/src/main/resources/static/halo-common/OwO/paopao/犀利.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/犀利.png rename to src/main/resources/static/halo-common/OwO/paopao/犀利.png diff --git a/src/main/resources/static/plugins/OwO/paopao/犀利@2x.png b/src/main/resources/static/halo-common/OwO/paopao/犀利@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/犀利@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/犀利@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/狂汗.png b/src/main/resources/static/halo-common/OwO/paopao/狂汗.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/狂汗.png rename to src/main/resources/static/halo-common/OwO/paopao/狂汗.png diff --git a/src/main/resources/static/plugins/OwO/paopao/狂汗@2x.png b/src/main/resources/static/halo-common/OwO/paopao/狂汗@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/狂汗@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/狂汗@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/玫瑰.png b/src/main/resources/static/halo-common/OwO/paopao/玫瑰.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/玫瑰.png rename to src/main/resources/static/halo-common/OwO/paopao/玫瑰.png diff --git a/src/main/resources/static/plugins/OwO/paopao/玫瑰@2x.png b/src/main/resources/static/halo-common/OwO/paopao/玫瑰@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/玫瑰@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/玫瑰@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/生气.png b/src/main/resources/static/halo-common/OwO/paopao/生气.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/生气.png rename to src/main/resources/static/halo-common/OwO/paopao/生气.png diff --git a/src/main/resources/static/plugins/OwO/paopao/生气@2x.png b/src/main/resources/static/halo-common/OwO/paopao/生气@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/生气@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/生气@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/疑问.png b/src/main/resources/static/halo-common/OwO/paopao/疑问.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/疑问.png rename to src/main/resources/static/halo-common/OwO/paopao/疑问.png diff --git a/src/main/resources/static/plugins/OwO/paopao/疑问@2x.png b/src/main/resources/static/halo-common/OwO/paopao/疑问@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/疑问@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/疑问@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/真棒.png b/src/main/resources/static/halo-common/OwO/paopao/真棒.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/真棒.png rename to src/main/resources/static/halo-common/OwO/paopao/真棒.png diff --git a/src/main/resources/static/plugins/OwO/paopao/真棒@2x.png b/src/main/resources/static/halo-common/OwO/paopao/真棒@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/真棒@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/真棒@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/睡觉.png b/src/main/resources/static/halo-common/OwO/paopao/睡觉.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/睡觉.png rename to src/main/resources/static/halo-common/OwO/paopao/睡觉.png diff --git a/src/main/resources/static/plugins/OwO/paopao/睡觉@2x.png b/src/main/resources/static/halo-common/OwO/paopao/睡觉@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/睡觉@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/睡觉@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/礼物.png b/src/main/resources/static/halo-common/OwO/paopao/礼物.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/礼物.png rename to src/main/resources/static/halo-common/OwO/paopao/礼物.png diff --git a/src/main/resources/static/plugins/OwO/paopao/礼物@2x.png b/src/main/resources/static/halo-common/OwO/paopao/礼物@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/礼物@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/礼物@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/笑尿.png b/src/main/resources/static/halo-common/OwO/paopao/笑尿.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/笑尿.png rename to src/main/resources/static/halo-common/OwO/paopao/笑尿.png diff --git a/src/main/resources/static/plugins/OwO/paopao/笑尿@2x.png b/src/main/resources/static/halo-common/OwO/paopao/笑尿@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/笑尿@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/笑尿@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/笑眼.png b/src/main/resources/static/halo-common/OwO/paopao/笑眼.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/笑眼.png rename to src/main/resources/static/halo-common/OwO/paopao/笑眼.png diff --git a/src/main/resources/static/plugins/OwO/paopao/笑眼@2x.png b/src/main/resources/static/halo-common/OwO/paopao/笑眼@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/笑眼@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/笑眼@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/红领巾.png b/src/main/resources/static/halo-common/OwO/paopao/红领巾.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/红领巾.png rename to src/main/resources/static/halo-common/OwO/paopao/红领巾.png diff --git a/src/main/resources/static/plugins/OwO/paopao/红领巾@2x.png b/src/main/resources/static/halo-common/OwO/paopao/红领巾@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/红领巾@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/红领巾@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/胜利.png b/src/main/resources/static/halo-common/OwO/paopao/胜利.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/胜利.png rename to src/main/resources/static/halo-common/OwO/paopao/胜利.png diff --git a/src/main/resources/static/plugins/OwO/paopao/胜利@2x.png b/src/main/resources/static/halo-common/OwO/paopao/胜利@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/胜利@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/胜利@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/花心.png b/src/main/resources/static/halo-common/OwO/paopao/花心.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/花心.png rename to src/main/resources/static/halo-common/OwO/paopao/花心.png diff --git a/src/main/resources/static/plugins/OwO/paopao/花心@2x.png b/src/main/resources/static/halo-common/OwO/paopao/花心@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/花心@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/花心@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/茶杯.png b/src/main/resources/static/halo-common/OwO/paopao/茶杯.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/茶杯.png rename to src/main/resources/static/halo-common/OwO/paopao/茶杯.png diff --git a/src/main/resources/static/plugins/OwO/paopao/茶杯@2x.png b/src/main/resources/static/halo-common/OwO/paopao/茶杯@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/茶杯@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/茶杯@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/药丸.png b/src/main/resources/static/halo-common/OwO/paopao/药丸.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/药丸.png rename to src/main/resources/static/halo-common/OwO/paopao/药丸.png diff --git a/src/main/resources/static/plugins/OwO/paopao/药丸@2x.png b/src/main/resources/static/halo-common/OwO/paopao/药丸@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/药丸@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/药丸@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/蛋糕.png b/src/main/resources/static/halo-common/OwO/paopao/蛋糕.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/蛋糕.png rename to src/main/resources/static/halo-common/OwO/paopao/蛋糕.png diff --git a/src/main/resources/static/plugins/OwO/paopao/蛋糕@2x.png b/src/main/resources/static/halo-common/OwO/paopao/蛋糕@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/蛋糕@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/蛋糕@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/蜡烛.png b/src/main/resources/static/halo-common/OwO/paopao/蜡烛.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/蜡烛.png rename to src/main/resources/static/halo-common/OwO/paopao/蜡烛.png diff --git a/src/main/resources/static/plugins/OwO/paopao/蜡烛@2x.png b/src/main/resources/static/halo-common/OwO/paopao/蜡烛@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/蜡烛@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/蜡烛@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/鄙视.png b/src/main/resources/static/halo-common/OwO/paopao/鄙视.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/鄙视.png rename to src/main/resources/static/halo-common/OwO/paopao/鄙视.png diff --git a/src/main/resources/static/plugins/OwO/paopao/鄙视@2x.png b/src/main/resources/static/halo-common/OwO/paopao/鄙视@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/鄙视@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/鄙视@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/酷.png b/src/main/resources/static/halo-common/OwO/paopao/酷.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/酷.png rename to src/main/resources/static/halo-common/OwO/paopao/酷.png diff --git a/src/main/resources/static/plugins/OwO/paopao/酷@2x.png b/src/main/resources/static/halo-common/OwO/paopao/酷@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/酷@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/酷@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/酸爽.png b/src/main/resources/static/halo-common/OwO/paopao/酸爽.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/酸爽.png rename to src/main/resources/static/halo-common/OwO/paopao/酸爽.png diff --git a/src/main/resources/static/plugins/OwO/paopao/酸爽@2x.png b/src/main/resources/static/halo-common/OwO/paopao/酸爽@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/酸爽@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/酸爽@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/钱.png b/src/main/resources/static/halo-common/OwO/paopao/钱.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/钱.png rename to src/main/resources/static/halo-common/OwO/paopao/钱.png diff --git a/src/main/resources/static/plugins/OwO/paopao/钱@2x.png b/src/main/resources/static/halo-common/OwO/paopao/钱@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/钱@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/钱@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/钱币.png b/src/main/resources/static/halo-common/OwO/paopao/钱币.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/钱币.png rename to src/main/resources/static/halo-common/OwO/paopao/钱币.png diff --git a/src/main/resources/static/plugins/OwO/paopao/钱币@2x.png b/src/main/resources/static/halo-common/OwO/paopao/钱币@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/钱币@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/钱币@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/阴险.png b/src/main/resources/static/halo-common/OwO/paopao/阴险.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/阴险.png rename to src/main/resources/static/halo-common/OwO/paopao/阴险.png diff --git a/src/main/resources/static/plugins/OwO/paopao/阴险@2x.png b/src/main/resources/static/halo-common/OwO/paopao/阴险@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/阴险@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/阴险@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/音乐.png b/src/main/resources/static/halo-common/OwO/paopao/音乐.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/音乐.png rename to src/main/resources/static/halo-common/OwO/paopao/音乐.png diff --git a/src/main/resources/static/plugins/OwO/paopao/音乐@2x.png b/src/main/resources/static/halo-common/OwO/paopao/音乐@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/音乐@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/音乐@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/香蕉.png b/src/main/resources/static/halo-common/OwO/paopao/香蕉.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/香蕉.png rename to src/main/resources/static/halo-common/OwO/paopao/香蕉.png diff --git a/src/main/resources/static/plugins/OwO/paopao/香蕉@2x.png b/src/main/resources/static/halo-common/OwO/paopao/香蕉@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/香蕉@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/香蕉@2x.png diff --git a/src/main/resources/static/plugins/OwO/paopao/黑线.png b/src/main/resources/static/halo-common/OwO/paopao/黑线.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/黑线.png rename to src/main/resources/static/halo-common/OwO/paopao/黑线.png diff --git a/src/main/resources/static/plugins/OwO/paopao/黑线@2x.png b/src/main/resources/static/halo-common/OwO/paopao/黑线@2x.png similarity index 100% rename from src/main/resources/static/plugins/OwO/paopao/黑线@2x.png rename to src/main/resources/static/halo-common/OwO/paopao/黑线@2x.png diff --git a/src/main/resources/static/plugins/jquery/jquery.min.js b/src/main/resources/static/halo-common/jquery/jquery.min.js old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/static/plugins/jquery/jquery.min.js rename to src/main/resources/static/halo-common/jquery/jquery.min.js diff --git a/src/main/resources/static/css/comment.css b/src/main/resources/static/halo-frontend/css/comment.css similarity index 100% rename from src/main/resources/static/css/comment.css rename to src/main/resources/static/halo-frontend/css/comment.css diff --git a/src/main/resources/static/css/comment.min.css b/src/main/resources/static/halo-frontend/css/comment.min.css similarity index 100% rename from src/main/resources/static/css/comment.min.css rename to src/main/resources/static/halo-frontend/css/comment.min.css diff --git a/src/main/resources/static/images/thumbnail/thumbnail-1.jpg b/src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-1.jpg similarity index 100% rename from src/main/resources/static/images/thumbnail/thumbnail-1.jpg rename to src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-1.jpg diff --git a/src/main/resources/static/images/thumbnail/thumbnail-10.jpg b/src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-10.jpg similarity index 100% rename from src/main/resources/static/images/thumbnail/thumbnail-10.jpg rename to src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-10.jpg diff --git a/src/main/resources/static/images/thumbnail/thumbnail-2.jpg b/src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-2.jpg similarity index 100% rename from src/main/resources/static/images/thumbnail/thumbnail-2.jpg rename to src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-2.jpg diff --git a/src/main/resources/static/images/thumbnail/thumbnail-3.jpg b/src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-3.jpg similarity index 100% rename from src/main/resources/static/images/thumbnail/thumbnail-3.jpg rename to src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-3.jpg diff --git a/src/main/resources/static/images/thumbnail/thumbnail-4.jpg b/src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-4.jpg similarity index 100% rename from src/main/resources/static/images/thumbnail/thumbnail-4.jpg rename to src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-4.jpg diff --git a/src/main/resources/static/images/thumbnail/thumbnail-5.jpg b/src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-5.jpg similarity index 100% rename from src/main/resources/static/images/thumbnail/thumbnail-5.jpg rename to src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-5.jpg diff --git a/src/main/resources/static/images/thumbnail/thumbnail-6.jpg b/src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-6.jpg similarity index 100% rename from src/main/resources/static/images/thumbnail/thumbnail-6.jpg rename to src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-6.jpg diff --git a/src/main/resources/static/images/thumbnail/thumbnail-7.jpg b/src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-7.jpg similarity index 100% rename from src/main/resources/static/images/thumbnail/thumbnail-7.jpg rename to src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-7.jpg diff --git a/src/main/resources/static/images/thumbnail/thumbnail-8.jpg b/src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-8.jpg similarity index 100% rename from src/main/resources/static/images/thumbnail/thumbnail-8.jpg rename to src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-8.jpg diff --git a/src/main/resources/static/images/thumbnail/thumbnail-9.jpg b/src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-9.jpg similarity index 100% rename from src/main/resources/static/images/thumbnail/thumbnail-9.jpg rename to src/main/resources/static/halo-frontend/images/thumbnail/thumbnail-9.jpg diff --git a/src/main/resources/static/images/thumbnail/thumbnail.png b/src/main/resources/static/halo-frontend/images/thumbnail/thumbnail.png similarity index 100% rename from src/main/resources/static/images/thumbnail/thumbnail.png rename to src/main/resources/static/halo-frontend/images/thumbnail/thumbnail.png diff --git a/src/main/resources/static/js/comment.js b/src/main/resources/static/halo-frontend/js/comment.js similarity index 50% rename from src/main/resources/static/js/comment.js rename to src/main/resources/static/halo-frontend/js/comment.js index e8c113b6a..6fe515b39 100644 --- a/src/main/resources/static/js/comment.js +++ b/src/main/resources/static/halo-frontend/js/comment.js @@ -5,7 +5,7 @@ var s = new OwO({ position: 'down', width: '100%', maxHeight: '210px', - api: "/static/plugins/OwO/OwO.min.json" + api: "/static/halo-common/OwO/OwO.min.json" }); $(document).ready(function () { $(".comment-list-one-head").each(function (i) { @@ -22,56 +22,53 @@ $('#comment-submit').click(function () { var content = $("#commentContent"); var email = $("#commentAuthorEmail"); var url = $("#commentAuthorUrl"); - if (author.val() == '' || content.val() == '') { - $(".comment-message").html("请输入必填项!"); - $(".comment-message").fadeIn(1000); + var message = $(".comment-message"); + var submit = $("#comment-submit"); + if (author.val() === '' || content.val() === '') { + message.html("请输入必填项!"); + message.fadeIn(1000); setTimeout(function () { - $(".comment-message").fadeOut(1000); + message.fadeOut(1000); }, 1500); return; } $(this).attr("disabled", "disabled"); $(this).html("提交中..."); - $.ajax({ - type: 'POST', - url: '/newComment', - async: false, - data: { - 'postId': $('input[name=postId]').val(), - 'commentContent': formatContent(content.val()), - 'commentAuthor': author.val(), - 'commentAuthorEmail': email.val(), - 'commentAuthorUrl': url.val(), - 'commentAgent': navigator.userAgent, - 'commentParent': $('input[name=commentParent]').val() - }, - success: function (data) { - localStorage.setItem('author', author.val()); - localStorage.setItem('email', email.val()); - localStorage.setItem('url', url.val()); - if (data.code == 1) { - $('.comment-input-content').val(""); - $(".comment-message").html("" + data.msg + ""); - } else { - $(".comment-message").html("" + data.msg + ""); - } - $(".comment-message").fadeIn(1000); - setTimeout(function () { - $(".comment-message").fadeOut(1000); - $("#comment-submit").removeAttr("disabled"); - $("#comment-submit").html("提交"); - window.location.reload(); - }, 1500); + $.post('/newComment',{ + 'postId': $('input[name=postId]').val(), + 'commentContent': formatContent(content.val()), + 'commentAuthor': author.val(), + 'commentAuthorEmail': email.val(), + 'commentAuthorUrl': url.val(), + 'commentAgent': navigator.userAgent, + 'commentParent': $('input[name=commentParent]').val() + },function (data) { + localStorage.setItem('author', author.val()); + localStorage.setItem('email', email.val()); + localStorage.setItem('url', url.val()); + if (data.code === 1) { + $('.comment-input-content').val(""); + message.html("" + data.msg + ""); + } else { + message.html("" + data.msg + ""); } - }); + message.fadeIn(1000); + setTimeout(function () { + message.fadeOut(1000); + submit.removeAttr("disabled"); + submit.html("提交"); + window.location.reload(); + }, 1500); + },'JSON'); }); $('.comment-list-one-footer-reback').click(function () { + var commentContent = $('#commentContent'); var at = $(this).attr("at"); var commentParentAuthor = $('#comment-id-' + at).find(".comment-list-one-head-name").html(); $('#commentParent').val(at); - $('#commentContent').attr("placeholder", "@" + commentParentAuthor); + commentContent.attr("placeholder", "@" + commentParentAuthor); $(".comment-cancel-reply").show(); - $('#commentContent').focus(); + commentContent.focus(); }); $('.comment-cancel-reply').click(function () { $('#commentParent').val(0); @@ -83,9 +80,11 @@ $('.comment-cancel-reply').click(function () { * 加载头像 */ function loadAvatar() { - $(".comment-author-avatar").attr("src", "//gravatar.loli.net/avatar/" + md5(localStorage.getItem("email")) + "?s=256&d=" + avatarType); - if ($('input[name=commentAuthorEmail]').val() != '' && $('input[name=commentAuthorEmail]').val() != null) { - $(".comment-author-avatar").attr("src", "//gravatar.loli.net/avatar/" + md5($('input[name=commentAuthorEmail]').val()) + "?s=256&d=" + avatarType); + var avatar = $(".comment-author-avatar"); + var email = $('input[name=commentAuthorEmail]'); + avatar.attr("src", "//gravatar.loli.net/avatar/" + md5(localStorage.getItem("email")) + "?s=256&d=" + avatarType); + if (email.val() !== '' && email.val() !== null) { + avatar.attr("src", "//gravatar.loli.net/avatar/" + md5(email.val()) + "?s=256&d=" + avatarType); } } @@ -99,7 +98,7 @@ var parser = new UAParser(); function show_ua(string) { parser.setUA(string); var uua = parser.getResult(); - if (uua.os.version == 'x86_64') { + if (uua.os.version === 'x86_64') { uua.os.version = 'x64'; } var browser = uua.browser.name + ' ' + uua.browser.version; diff --git a/src/main/resources/static/halo-frontend/js/comment.min.js b/src/main/resources/static/halo-frontend/js/comment.min.js new file mode 100644 index 000000000..049bbbb2c --- /dev/null +++ b/src/main/resources/static/halo-frontend/js/comment.min.js @@ -0,0 +1 @@ +var s=new OwO({logo:"OωO表情",container:document.getElementsByClassName("OwO")[0],target:document.getElementsByClassName("comment-input-content")[0],position:"down",width:"100%",maxHeight:"210px",api:"/static/halo-common/OwO/OwO.min.json"});$(document).ready(function(){$(".comment-list-one-head").each(function(i){var uaInfo=$(this).children(".comment-ua-info").html();$(this).append(show_ua(uaInfo));});$("#commentAuthor").val(localStorage.getItem("author"));$("#commentAuthorEmail").val(localStorage.getItem("email"));$("#commentAuthorUrl").val(localStorage.getItem("url"));loadAvatar();});$("#comment-submit").click(function(){var author=$("#commentAuthor");var content=$("#commentContent");var email=$("#commentAuthorEmail");var url=$("#commentAuthorUrl");var message=$(".comment-message");var submit=$("#comment-submit");if(author.val()===""||content.val()===""){message.html("请输入必填项!");message.fadeIn(1000);setTimeout(function(){message.fadeOut(1000);},1500);return;}$(this).attr("disabled","disabled");$(this).html("提交中...");$.post("/newComment",{postId:$("input[name=postId]").val(),commentContent:formatContent(content.val()),commentAuthor:author.val(),commentAuthorEmail:email.val(),commentAuthorUrl:url.val(),commentAgent:navigator.userAgent,commentParent:$("input[name=commentParent]").val()},function(data){localStorage.setItem("author",author.val());localStorage.setItem("email",email.val());localStorage.setItem("url",url.val());if(data.code===1){$(".comment-input-content").val("");message.html(""+data.msg+"");}else{message.html(""+data.msg+"");}message.fadeIn(1000);setTimeout(function(){message.fadeOut(1000);submit.removeAttr("disabled");submit.html("提交");window.location.reload();},1500);},"JSON");});$(".comment-list-one-footer-reback").click(function(){var commentContent=$("#commentContent");var at=$(this).attr("at");var commentParentAuthor=$("#comment-id-"+at).find(".comment-list-one-head-name").html();$("#commentParent").val(at);commentContent.attr("placeholder","@"+commentParentAuthor);$(".comment-cancel-reply").show();commentContent.focus();});$(".comment-cancel-reply").click(function(){$("#commentParent").val(0);$("#commentContent").attr("placeholder","");$(".comment-cancel-reply").hide();});function loadAvatar(){var avatar=$(".comment-author-avatar");var email=$("input[name=commentAuthorEmail]");avatar.attr("src","//gravatar.loli.net/avatar/"+md5(localStorage.getItem("email"))+"?s=256&d="+avatarType);if(email.val()!==""&&email.val()!==null){avatar.attr("src","//gravatar.loli.net/avatar/"+md5(email.val())+"?s=256&d="+avatarType);}}var parser=new UAParser();function show_ua(string){parser.setUA(string);var uua=parser.getResult();if(uua.os.version==="x86_64"){uua.os.version="x64";}var browser=uua.browser.name+" "+uua.browser.version;var os=uua.os.name+" "+uua.os.version;return''+browser+''+os+"";}function formatContent(a){a=a.replace(/\r\n/g,"
        ");a=a.replace(/\n/g,"
        ");a=a.replace(/\s/g," ");return a;} \ No newline at end of file diff --git a/src/main/resources/static/plugins/activate-power-mode/activate-power-mode.js b/src/main/resources/static/halo-frontend/plugins/activate-power-mode/activate-power-mode.js similarity index 100% rename from src/main/resources/static/plugins/activate-power-mode/activate-power-mode.js rename to src/main/resources/static/halo-frontend/plugins/activate-power-mode/activate-power-mode.js diff --git a/src/main/resources/static/plugins/md5/md5.min.js b/src/main/resources/static/halo-frontend/plugins/md5/md5.min.js similarity index 100% rename from src/main/resources/static/plugins/md5/md5.min.js rename to src/main/resources/static/halo-frontend/plugins/md5/md5.min.js diff --git a/src/main/resources/static/plugins/ua-parser/ua-parser.min.js b/src/main/resources/static/halo-frontend/plugins/ua-parser/ua-parser.min.js similarity index 100% rename from src/main/resources/static/plugins/ua-parser/ua-parser.min.js rename to src/main/resources/static/halo-frontend/plugins/ua-parser/ua-parser.min.js diff --git a/src/main/resources/static/images/default-50x50.gif b/src/main/resources/static/images/default-50x50.gif deleted file mode 100755 index 2f5a14a56..000000000 Binary files a/src/main/resources/static/images/default-50x50.gif and /dev/null differ diff --git a/src/main/resources/static/images/icons.png b/src/main/resources/static/images/icons.png deleted file mode 100755 index d47bc1500..000000000 Binary files a/src/main/resources/static/images/icons.png and /dev/null differ diff --git a/src/main/resources/static/js/comment.min.js b/src/main/resources/static/js/comment.min.js deleted file mode 100644 index 367c2cd67..000000000 --- a/src/main/resources/static/js/comment.min.js +++ /dev/null @@ -1 +0,0 @@ -var s=new OwO({logo:"OωO表情",container:document.getElementsByClassName("OwO")[0],target:document.getElementsByClassName("comment-input-content")[0],position:"down",width:"100%",maxHeight:"210px",api:"/static/plugins/OwO/OwO.min.json"});$(document).ready(function(){$(".comment-list-one-head").each(function(i){var uaInfo=$(this).children(".comment-ua-info").html();$(this).append(show_ua(uaInfo));});$("#commentAuthor").val(localStorage.getItem("author"));$("#commentAuthorEmail").val(localStorage.getItem("email"));$("#commentAuthorUrl").val(localStorage.getItem("url"));loadAvatar();});$("#comment-submit").click(function(){var author=$("#commentAuthor");var content=$("#commentContent");var email=$("#commentAuthorEmail");var url=$("#commentAuthorUrl");if(author.val()==""||content.val()==""){$(".comment-message").html("请输入必填项!");$(".comment-message").fadeIn(1000);setTimeout(function(){$(".comment-message").fadeOut(1000);},1500);return;}$(this).attr("disabled","disabled");$(this).html("提交中...");$.ajax({type:"POST",url:"/newComment",async:false,data:{postId:$("input[name=postId]").val(),commentContent:formatContent(content.val()),commentAuthor:author.val(),commentAuthorEmail:email.val(),commentAuthorUrl:url.val(),commentAgent:navigator.userAgent,commentParent:$("input[name=commentParent]").val()},success:function(data){localStorage.setItem("author",author.val());localStorage.setItem("email",email.val());localStorage.setItem("url",url.val());if(data.code==1){$(".comment-input-content").val("");$(".comment-message").html(""+data.msg+"");}else{$(".comment-message").html(""+data.msg+"");}$(".comment-message").fadeIn(1000);setTimeout(function(){$(".comment-message").fadeOut(1000);$("#comment-submit").removeAttr("disabled");$("#comment-submit").html("提交");window.location.reload();},1500);}});});$(".comment-list-one-footer-reback").click(function(){var at=$(this).attr("at");var commentParentAuthor=$("#comment-id-"+at).find(".comment-list-one-head-name").html();$("#commentParent").val(at);$("#commentContent").attr("placeholder","@"+commentParentAuthor);$(".comment-cancel-reply").show();$("#commentContent").focus();});$(".comment-cancel-reply").click(function(){$("#commentParent").val(0);$("#commentContent").attr("placeholder","");$(".comment-cancel-reply").hide();});function loadAvatar(){$(".comment-author-avatar").attr("src","//gravatar.loli.net/avatar/"+md5(localStorage.getItem("email"))+"?s=256&d="+avatarType);if($("input[name=commentAuthorEmail]").val()!=""&&$("input[name=commentAuthorEmail]").val()!=null){$(".comment-author-avatar").attr("src","//gravatar.loli.net/avatar/"+md5($("input[name=commentAuthorEmail]").val())+"?s=256&d="+avatarType);}}var parser=new UAParser();function show_ua(string){parser.setUA(string);var uua=parser.getResult();if(uua.os.version=="x86_64"){uua.os.version="x64";}var browser=uua.browser.name+" "+uua.browser.version;var os=uua.os.name+" "+uua.os.version;return''+browser+''+os+"";}function formatContent(a){a=a.replace(/\r\n/g,"
        ");a=a.replace(/\n/g,"
        ");a=a.replace(/\s/g," ");return a;} \ No newline at end of file diff --git a/src/main/resources/static/js/halo.min.js b/src/main/resources/static/js/halo.min.js deleted file mode 100644 index 25e0ae72d..000000000 --- a/src/main/resources/static/js/halo.min.js +++ /dev/null @@ -1 +0,0 @@ -$.extend({halo:function(){}});$(document).ready(function(){if($(window).width()<1024){if($("body").hasClass("layout-boxed")){$("body").removeClass("layout-boxed");}if($("body").hasClass("sidebar-collapse")){$("body").removeClass("sidebar-collapse");}}initMenu();});$(document).on("pjax:clicked",function(){$(".content-wrapper").html("");});$(document).on("pjax:complete",function(){initMenu();});function initMenu(){var pathName=location.pathname;if(pathName=="/admin/posts/edit"){pathName="/admin/posts/new";}if(pathName=="/admin/category/edit"){pathName="/admin/category";}if(pathName=="/admin/tag/edit"){pathName="/admin/tag";}if(pathName=="/admin/page/edit"){pathName="/admin/page/new";}if(pathName=="/admin/page/links"){pathName="/admin/page";}if(pathName=="/admin/page/galleries"){pathName="/admin/page";}if(pathName=="/admin/menus/edit"){pathName="/admin/menus";}$(".sidebar-menu").children().each(function(){var li=$(this);li.find("a").each(function(){var href=$(this).attr("href");if(pathName==href){li.addClass("active");$(this).parent().addClass("active");}else{$(this).parent().removeClass("active");}});});}$.halo.prototype.showMsg=function(text,icon,hideAfter){if(heading==undefined){var heading="提示";}$.toast({text:text,heading:heading,icon:icon,showHideTransition:"fade",allowToastClose:true,hideAfter:hideAfter,stack:1,position:"top-center",textAlign:"left",loader:true,loaderBg:"#ffffff"});};$.halo.prototype.showMsgAndReload=function(text,icon,hideAfter){if(heading==undefined){var heading="提示";}$.toast({text:text,heading:heading,icon:icon,showHideTransition:"fade",allowToastClose:true,hideAfter:hideAfter,stack:1,position:"top-center",textAlign:"left",loader:true,loaderBg:"#ffffff",afterHidden:function(){window.location.reload();}});};$.halo.prototype.showMsgAndRedirect=function(text,icon,hideAfter,url){if(heading==undefined){var heading="提示";}$.toast({text:text,heading:heading,icon:icon,showHideTransition:"fade",allowToastClose:true,hideAfter:hideAfter,stack:1,position:"top-center",textAlign:"left",loader:true,loaderBg:"#ffffff",afterHidden:function(){window.location.href=url;}});};$.halo.prototype.showMsgAndParentRedirect=function(text,icon,hideAfter,url){if(heading==undefined){var heading="提示";}$.toast({text:text,heading:heading,icon:icon,showHideTransition:"fade",allowToastClose:true,hideAfter:hideAfter,stack:1,position:"top-center",textAlign:"left",loader:true,loaderBg:"#ffffff",afterHidden:function(){parent.location.href=url;}});};$.halo.prototype.formatContent=function(a){a=a.replace(/\r\n/g,"
        ");a=a.replace(/\n/g,"
        ");a=a.replace(/\s/g," ");return a;};$.halo.prototype.layerModal=function(url,title){layer.open({type:2,title:title,shadeClose:true,shade:0.5,maxmin:true,area:["90%","90%"],content:url,scrollbar:false});};function saveOptions(option){var param=$("#"+option).serialize();$.ajax({type:"post",url:"/admin/option/save",data:param,success:function(data){if(data.code==1){halo.showMsg(data.msg,"success",1000);}else{halo.showMsg(data.msg,"error",2000);}}});} \ No newline at end of file diff --git a/src/main/resources/static/js/login.js b/src/main/resources/static/js/login.js deleted file mode 100644 index b412965ba..000000000 --- a/src/main/resources/static/js/login.js +++ /dev/null @@ -1,55 +0,0 @@ -var halo = new $.halo(); -$(document).ready(function () { - $("#login-name").val(localStorage.getItem("loginName")); -}); - -function btn_login() { - $('#btn-login').button('loading'); - var name = $("#login-name").val(); - var pwd = $("#login-pwd").val(); - if (name == "" || pwd == "") { - halo.showMsg("请输入完整信息!", 'info', 2000); - $('#btn-login').button('reset'); - } else { - $.ajax({ - type: 'POST', - url: '/admin/getLogin', - async: false, - data: { - 'loginName': name, - 'loginPwd': pwd - }, - success: function (data) { - localStorage.setItem('loginName', $("#login-name").val()); - if (data.code == 1) { - halo.showMsgAndRedirect(data.msg, 'success', 1000, '/admin'); - } else { - $('.login-body').addClass('animate shake'); - $.toast({ - text: data.msg, - heading: heading, - icon: 'error', - showHideTransition: 'fade', - allowToastClose: true, - hideAfter: 2000, - stack: 1, - position: 'top-center', - textAlign: 'left', - loader: true, - loaderBg: '#ffffff', - afterHidden: function () { - $('.login-body').removeClass('animate shake'); - } - }); - $('#btn-login').button('reset'); - } - } - }); - } -} - -$(document).keydown(function (event) { - if (event.keyCode == 13) { - btn_login(); - } -}); diff --git a/src/main/resources/static/js/login.min.js b/src/main/resources/static/js/login.min.js deleted file mode 100644 index 88195e449..000000000 --- a/src/main/resources/static/js/login.min.js +++ /dev/null @@ -1 +0,0 @@ -var halo=new $.halo();$(document).ready(function(){$("#login-name").val(localStorage.getItem("loginName"));});function btn_login(){$("#btn-login").button("loading");var name=$("#login-name").val();var pwd=$("#login-pwd").val();if(name==""||pwd==""){halo.showMsg("请输入完整信息!","info",2000);$("#btn-login").button("reset");}else{$.ajax({type:"POST",url:"/admin/getLogin",async:false,data:{loginName:name,loginPwd:pwd},success:function(data){localStorage.setItem("loginName",$("#login-name").val());if(data.code==1){halo.showMsgAndRedirect(data.msg,"success",1000,"/admin");}else{$(".login-body").addClass("animate shake");$.toast({text:data.msg,heading:heading,icon:"error",showHideTransition:"fade",allowToastClose:true,hideAfter:2000,stack:1,position:"top-center",textAlign:"left",loader:true,loaderBg:"#ffffff",afterHidden:function(){$(".login-body").removeClass("animate shake");}});$("#btn-login").button("reset");}}});}}$(document).keydown(function(event){if(event.keyCode==13){btn_login();}}); \ No newline at end of file diff --git a/src/main/resources/static/plugins/OwO/OwO.min.css b/src/main/resources/static/plugins/OwO/OwO.min.css deleted file mode 100644 index d6f1e745a..000000000 --- a/src/main/resources/static/plugins/OwO/OwO.min.css +++ /dev/null @@ -1 +0,0 @@ -.OwO{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.OwO:hover .OwO-logo{color:#444}.OwO.OwO-open .OwO-logo{border-radius:0;border-bottom:none;color:#444}.OwO.OwO-open .OwO-body{display:block}.OwO.OwO-up .OwO-body{top:inherit;bottom:21px;border-radius:4px 4px 4px 0}.OwO.OwO-up .OwO-body .OwO-bar .OwO-packages li:nth-child(1){border-radius:0}.OwO.OwO-up.OwO-open .OwO-logo{border:1px solid #ddd;border-radius:0 0 4px 4px;border-top:none}.OwO .OwO-logo{cursor:pointer;height:22px;width:22px;display:inline-block;background:url(/static/plugins/OwO/images/smile.svg) -30px 50% no-repeat}.OwO .OwO-logo:hover span{display:inline-block;-webkit-animation:a 5s infinite ease-in-out;animation:a 5s infinite ease-in-out}.OwO .OwO-body{display:none;position:absolute;width:400px;background:#fff;border:1px solid #ddd;z-index:1;left:-14px;top:30px;border-radius:0 4px 4px 4px;box-shadow:0 3px 35px 3px rgba(0,64,128,.3)}.OwO .OwO-body:before{content:"";border-style:solid;border-width:0 8px 8px 8px;border-color:transparent transparent #fff transparent;height:0;position:absolute;left:22px;top:-8px;width:0;-webkit-transform:rotate(360deg);z-index:1;margin-left:-8px}.OwO .OwO-body .OwO-items{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:none;padding:10px;margin:0;overflow:scroll;font-size:0}.OwO .OwO-body .OwO-items .OwO-item{list-style-type:none;background:#f7f7f7;padding:5px 10px;border-radius:5px;display:inline-block;font-size:12px;line-height:14px;margin:0 10px 12px 0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.OwO .OwO-body .OwO-items .OwO-item:hover{background:#eee;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);-webkit-animation:a 5s infinite ease-in-out;animation:a 5s infinite ease-in-out}.OwO .OwO-body .OwO-items-emoji .OwO-item{font-size:20px;line-height:19px}.OwO .OwO-body .OwO-items-image .OwO-item{max-width:calc(25% - 10px);box-sizing:border-box}.OwO .OwO-body .OwO-items-image .OwO-item img{max-width:100%}.OwO .OwO-body .OwO-items-show{display:block}.OwO .OwO-body .OwO-bar{width:100%;height:30px;border-top:1px solid #ddd;background:#fff;border-radius:0 0 4px 4px;color:#444}.OwO .OwO-body .OwO-bar .OwO-packages{margin:0;padding:0;font-size:0}.OwO .OwO-body .OwO-bar .OwO-packages li{list-style-type:none;display:inline-block;line-height:30px;font-size:14px;padding:0 10px;cursor:pointer;margin-right:3px;margin-top: 0!important;margin-bottom: 0!important}.OwO .OwO-body .OwO-bar .OwO-packages li:nth-child(1){border-radius:0 0 0 3px}.OwO .OwO-body .OwO-bar .OwO-packages li:hover{background:#eee}.OwO .OwO-body .OwO-bar .OwO-packages .OwO-package-active{background:#eee;-webkit-transition:.3s;transition:.3s}@-webkit-keyframes a{2%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}4%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}6%{-webkit-transform:translateY(1.5px) rotate(-1.5deg);transform:translateY(1.5px) rotate(-1.5deg)}8%{-webkit-transform:translateY(-1.5px) rotate(-1.5deg);transform:translateY(-1.5px) rotate(-1.5deg)}10%{-webkit-transform:translateY(2.5px) rotate(1.5deg);transform:translateY(2.5px) rotate(1.5deg)}12%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}14%{-webkit-transform:translateY(-1.5px) rotate(1.5deg);transform:translateY(-1.5px) rotate(1.5deg)}16%{-webkit-transform:translateY(-.5px) rotate(-1.5deg);transform:translateY(-.5px) rotate(-1.5deg)}18%{-webkit-transform:translateY(.5px) rotate(-1.5deg);transform:translateY(.5px) rotate(-1.5deg)}20%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}22%{-webkit-transform:translateY(.5px) rotate(-1.5deg);transform:translateY(.5px) rotate(-1.5deg)}24%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}26%{-webkit-transform:translateY(.5px) rotate(.5deg);transform:translateY(.5px) rotate(.5deg)}28%{-webkit-transform:translateY(.5px) rotate(1.5deg);transform:translateY(.5px) rotate(1.5deg)}30%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}32%,34%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}36%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}38%{-webkit-transform:translateY(1.5px) rotate(-1.5deg);transform:translateY(1.5px) rotate(-1.5deg)}40%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}42%{-webkit-transform:translateY(2.5px) rotate(-1.5deg);transform:translateY(2.5px) rotate(-1.5deg)}44%{-webkit-transform:translateY(1.5px) rotate(.5deg);transform:translateY(1.5px) rotate(.5deg)}46%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}48%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}50%{-webkit-transform:translateY(.5px) rotate(.5deg);transform:translateY(.5px) rotate(.5deg)}52%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}54%{-webkit-transform:translateY(-1.5px) rotate(1.5deg);transform:translateY(-1.5px) rotate(1.5deg)}56%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}58%{-webkit-transform:translateY(.5px) rotate(2.5deg);transform:translateY(.5px) rotate(2.5deg)}60%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}62%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}64%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}66%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}68%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}70%{-webkit-transform:translateY(1.5px) rotate(.5deg);transform:translateY(1.5px) rotate(.5deg)}72%{-webkit-transform:translateY(2.5px) rotate(1.5deg);transform:translateY(2.5px) rotate(1.5deg)}74%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}76%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}78%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}80%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}82%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}84%{-webkit-transform:translateY(1.5px) rotate(2.5deg);transform:translateY(1.5px) rotate(2.5deg)}86%{-webkit-transform:translateY(-1.5px) rotate(-1.5deg);transform:translateY(-1.5px) rotate(-1.5deg)}88%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}90%{-webkit-transform:translateY(2.5px) rotate(-.5deg);transform:translateY(2.5px) rotate(-.5deg)}92%{-webkit-transform:translateY(.5px) rotate(-.5deg);transform:translateY(.5px) rotate(-.5deg)}94%{-webkit-transform:translateY(2.5px) rotate(.5deg);transform:translateY(2.5px) rotate(.5deg)}96%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}98%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}0%,to{-webkit-transform:translate(0) rotate(0);transform:translate(0) rotate(0)}}@keyframes a{2%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}4%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}6%{-webkit-transform:translateY(1.5px) rotate(-1.5deg);transform:translateY(1.5px) rotate(-1.5deg)}8%{-webkit-transform:translateY(-1.5px) rotate(-1.5deg);transform:translateY(-1.5px) rotate(-1.5deg)}10%{-webkit-transform:translateY(2.5px) rotate(1.5deg);transform:translateY(2.5px) rotate(1.5deg)}12%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}14%{-webkit-transform:translateY(-1.5px) rotate(1.5deg);transform:translateY(-1.5px) rotate(1.5deg)}16%{-webkit-transform:translateY(-.5px) rotate(-1.5deg);transform:translateY(-.5px) rotate(-1.5deg)}18%{-webkit-transform:translateY(.5px) rotate(-1.5deg);transform:translateY(.5px) rotate(-1.5deg)}20%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}22%{-webkit-transform:translateY(.5px) rotate(-1.5deg);transform:translateY(.5px) rotate(-1.5deg)}24%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}26%{-webkit-transform:translateY(.5px) rotate(.5deg);transform:translateY(.5px) rotate(.5deg)}28%{-webkit-transform:translateY(.5px) rotate(1.5deg);transform:translateY(.5px) rotate(1.5deg)}30%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}32%,34%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}36%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}38%{-webkit-transform:translateY(1.5px) rotate(-1.5deg);transform:translateY(1.5px) rotate(-1.5deg)}40%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}42%{-webkit-transform:translateY(2.5px) rotate(-1.5deg);transform:translateY(2.5px) rotate(-1.5deg)}44%{-webkit-transform:translateY(1.5px) rotate(.5deg);transform:translateY(1.5px) rotate(.5deg)}46%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}48%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}50%{-webkit-transform:translateY(.5px) rotate(.5deg);transform:translateY(.5px) rotate(.5deg)}52%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}54%{-webkit-transform:translateY(-1.5px) rotate(1.5deg);transform:translateY(-1.5px) rotate(1.5deg)}56%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}58%{-webkit-transform:translateY(.5px) rotate(2.5deg);transform:translateY(.5px) rotate(2.5deg)}60%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}62%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}64%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}66%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}68%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}70%{-webkit-transform:translateY(1.5px) rotate(.5deg);transform:translateY(1.5px) rotate(.5deg)}72%{-webkit-transform:translateY(2.5px) rotate(1.5deg);transform:translateY(2.5px) rotate(1.5deg)}74%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}76%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}78%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}80%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}82%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}84%{-webkit-transform:translateY(1.5px) rotate(2.5deg);transform:translateY(1.5px) rotate(2.5deg)}86%{-webkit-transform:translateY(-1.5px) rotate(-1.5deg);transform:translateY(-1.5px) rotate(-1.5deg)}88%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}90%{-webkit-transform:translateY(2.5px) rotate(-.5deg);transform:translateY(2.5px) rotate(-.5deg)}92%{-webkit-transform:translateY(.5px) rotate(-.5deg);transform:translateY(.5px) rotate(-.5deg)}94%{-webkit-transform:translateY(2.5px) rotate(.5deg);transform:translateY(2.5px) rotate(.5deg)}96%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}98%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}0%,to{-webkit-transform:translate(0) rotate(0);transform:translate(0) rotate(0)}} \ No newline at end of file diff --git a/src/main/resources/static/plugins/OwO/OwO.min.json b/src/main/resources/static/plugins/OwO/OwO.min.json deleted file mode 100644 index 542542e49..000000000 --- a/src/main/resources/static/plugins/OwO/OwO.min.json +++ /dev/null @@ -1,220 +0,0 @@ -{"颜文字": {"type": "emoticon","container": [ -{"icon": "OωO","text": "Author: DIYgod"}, -{"icon": "|´・ω・)ノ","text": "Hi"}, -{"icon": "ヾ(≧∇≦*)ゝ","text": "开心"}, -{"icon": "(☆ω☆)","text": "星星眼"}, -{"icon": "(╯‵□′)╯︵┴─┴","text": "掀桌"}, -{"icon": " ̄﹃ ̄","text": "流口水"}, -{"icon": "(*/ω\*)","text": "捂脸"}, -{"icon": "∠( ᐛ 」∠)_","text": "给跪"}, -{"icon": "(๑•̀ㅁ•́ฅ)","text": "Hi"}, -{"icon": "→_→","text": "斜眼"}, -{"icon": "୧(๑•̀⌄•́๑)૭","text": "加油"}, -{"icon": "٩(ˊᗜˋ*)و","text": "有木有WiFi"}, -{"icon": "(ノ°ο°)ノ","text": "前方高能预警"}, -{"icon": "(´இ皿இ`)","text": "我从未见过如此厚颜无耻之人"}, -{"icon": "⌇●﹏●⌇","text": "吓死宝宝惹"}, -{"icon": "(ฅ´ω`ฅ)","text": "已阅留爪"}, -{"icon": "(╯°A°)╯︵○○○","text": "去吧大师球"}, -{"icon": "φ( ̄∇ ̄o)","text": "太萌惹"}, -{"icon": "ヾ(´・ ・`。)ノ\"","text": "咦咦咦"}, -{"icon": "( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃","text": "气呼呼"}, -{"icon": "(ó﹏ò。)","text": "我受到了惊吓"}, -{"icon": "Σ(っ °Д °;)っ","text": "什么鬼"}, -{"icon": "( ,,´・ω・)ノ\"(´っω・`。)","text": "摸摸头"}, -{"icon": "╮(╯▽╰)╭ ","text": "无奈"}, -{"icon": "o(*////▽////*)q ","text": "脸红"}, -{"icon": ">﹏<","text": ""}, -{"icon": "( ๑´•ω•) \"(ㆆᴗㆆ)","text": ""}, -{"icon": "(。•ˇ‸ˇ•。)","text": ""}, -{"icon": "(๑•̀ω•́๑)","text": ""}, -{"icon": "(๑•́ ₃ •̀๑)","text": ""}, -{"icon": "(灬°ω°灬)","text": ""}, -{"icon": "(*^ω^*)","text": ""}, -{"icon": "✧*。٩(ˊωˋ*)و✧*。","text": ""}, -{"icon": "( ̄y▽ ̄)~*捂嘴偷笑","text": ""}, -{"icon": "(o`•ω•)ノ(ノД`)","text": ""}, -{"icon": "(⌒▽⌒)","text": ""}, -{"icon": "( ̄▽ ̄)","text": ""}, -{"icon": "(=・ω・=)","text": ""}, -{"icon": "(`・ω・´)","text": ""}, -{"icon": "(〜 ̄△ ̄)〜","text": ""}, -{"icon": "(・∀・)","text": ""}, -{"icon": "(°∀°)ノ","text": ""}, -{"icon": "( ̄3 ̄)","text": ""}, -{"icon": "╮( ̄▽ ̄)╭","text": ""}, -{"icon": "( ´_ゝ`)","text": ""}, -{"icon": "←_←","text": ""}, -{"icon": "→_→","text": ""}, -{"icon": "(<_<)","text": ""}, -{"icon": "(>_>)","text": ""}, -{"icon": "(;¬_¬)","text": ""}, -{"icon": "(\"▔□▔)","text": ""}, -{"icon": "(゚Д゚≡゚д゚)!?","text": ""}, -{"icon": "Σ(゚д゚;)","text": ""}, -{"icon": "Σ(  ̄□ ̄||)","text": ""}, -{"icon": "(´;ω;`)","text": ""}, -{"icon": "(/TДT)/","text": ""}, -{"icon": "(^・ω・^ )","text": ""}, -{"icon": "(。・ω・。)","text": ""}, -{"icon": "(● ̄(エ) ̄●)","text": ""}, -{"icon": "ε=ε=(ノ≧∇≦)ノ","text": ""}, -{"icon": "(´・_・`)","text": ""}, -{"icon": "(-_-#)","text": ""}, -{"icon": "( ̄へ ̄)","text": ""}, -{"icon": "( ̄ε(# ̄) Σ","text": ""}, -{"icon": "ヽ(`Д´)ノ","text": ""}, -{"icon": "(╯°口°)╯(┴—┴","text": ""}, -{"icon": "(#-_-)┯━┯","text": ""}, -{"icon": "_(:3」∠)_","text": ""}, -{"icon": "_(•̀ω•́ 」∠)_","text": ""}, -{"icon": "─=≡Σ((( つ•̀ω•́)つ","text": ""}, -{"icon": "(ಥ_ಥ)","text": ""}, -{"icon": "(๑•̀ㅂ•́)و✧","text": ""}, -{"icon": "(๑╹∀╹๑)","text": ""}, -{"icon": "눈_눈","text": ""}, -{"icon": "ᕦ(ò_óˇ)ᕤ","text": ""}, -{"icon": "(๑•ั็ω•็ั๑)","text": ""}, -{"icon": "( *・ω・)✄╰ひ╯","text": ""}, -{"icon": "~( ̄▽ ̄)C❀(捏菊花)","text": ""}, -{"icon": "(((┏(; ̄▽ ̄)┛装完逼就跑","text": ""} -]}, -"阿鲁": {"type": "image","container": [ -{"icon": "\"暗地观察\"","text": "暗地观察"}, -{"icon": "\"便便\"","text": "便便"}, -{"icon": "\"不出所料\"","text": "不出所料"}, -{"icon": "\"不高兴\"","text": "不高兴"}, -{"icon": "\"不说话\"","text": "不说话"}, -{"icon": "\"抽烟\"","text": "抽烟"}, -{"icon": "\"呲牙\"","text": "呲牙"}, -{"icon": "\"大囧\"","text": "大囧"}, -{"icon": "\"得意\"","text": "得意"}, -{"icon": "\"愤怒\"","text": "愤怒"}, -{"icon": "\"尴尬\"","text": "尴尬"}, -{"icon": "\"高兴\"","text": "高兴"}, -{"icon": "\"鼓掌\"","text": "鼓掌"}, -{"icon": "\"观察\"","text": "观察"}, -{"icon": "\"害羞\"","text": "害羞"}, -{"icon": "\"汗\"","text": "汗"}, -{"icon": "\"黑线\"","text": "黑线"}, -{"icon": "\"欢呼\"","text": "欢呼"}, -{"icon": "\"击掌\"","text": "击掌"}, -{"icon": "\"惊喜\"","text": "惊喜"}, -{"icon": "\"看不见\"","text": "看不见"}, -{"icon": "\"看热闹\"","text": "看热闹"}, -{"icon": "\"抠鼻\"","text": "抠鼻"}, -{"icon": "\"口水\"","text": "口水"}, -{"icon": "\"哭泣\"","text": "哭泣"}, -{"icon": "\"狂汗\"","text": "狂汗"}, -{"icon": "\"蜡烛\"","text": "蜡烛"}, -{"icon": "\"脸红\"","text": "脸红"}, -{"icon": "\"内伤\"","text": "内伤"}, -{"icon": "\"喷水\"","text": "喷水"}, -{"icon": "\"喷血\"","text": "喷血"}, -{"icon": "\"期待\"","text": "期待"}, -{"icon": "\"亲亲\"","text": "亲亲"}, -{"icon": "\"傻笑\"","text": "傻笑"}, -{"icon": "\"扇耳光\"","text": "扇耳光"}, -{"icon": "\"深思\"","text": "深思"}, -{"icon": "\"锁眉\"","text": "锁眉"}, -{"icon": "\"投降\"","text": "投降"}, -{"icon": "\"吐\"","text": "吐"}, -{"icon": "\"吐舌\"","text": "吐舌"}, -{"icon": "\"吐血倒地\"","text": "吐血倒地"}, -{"icon": "\"无奈\"","text": "无奈"}, -{"icon": "\"无所谓\"","text": "无所谓"}, -{"icon": "\"无语\"","text": "无语"}, -{"icon": "\"喜极而泣\"","text": "喜极而泣"}, -{"icon": "\"献花\"","text": "献花"}, -{"icon": "\"献黄瓜\"","text": "献黄瓜"}, -{"icon": "\"想一想\"","text": "想一想"}, -{"icon": "\"小怒\"","text": "小怒"}, -{"icon": "\"小眼睛\"","text": "小眼睛"}, -{"icon": "\"邪恶\"","text": "邪恶"}, -{"icon": "\"咽气\"","text": "咽气"}, -{"icon": "\"阴暗\"","text": "阴暗"}, -{"icon": "\"赞一个\"","text": "赞一个"}, -{"icon": "\"长草\"","text": "长草"}, -{"icon": "\"中刀\"","text": "中刀"}, -{"icon": "\"中枪\"","text": "中枪"}, -{"icon": "\"中指\"","text": "中指"}, -{"icon": "\"肿包\"","text": "肿包"}, -{"icon": "\"皱眉\"","text": "皱眉"}, -{"icon": "\"装大款\"","text": "装大款"}, -{"icon": "\"坐等\"","text": "坐等"} -]}, -"泡泡": {"type": "image","container": [ -{"icon": "\"啊\"","text": "啊"}, -{"icon": "\"爱心\"","text": "爱心"}, -{"icon": "\"鄙视\"","text": "鄙视"}, -{"icon": "\"便便\"","text": "便便"}, -{"icon": "\"不高兴\"","text": "不高兴"}, -{"icon": "\"彩虹\"","text": "彩虹"}, -{"icon": "\"茶杯\"","text": "茶杯"}, -{"icon": "\"大拇指\"","text": "大拇指"}, -{"icon": "\"蛋糕\"","text": "蛋糕"}, -{"icon": "\"灯泡\"","text": "灯泡"}, -{"icon": "\"乖\"","text": "乖"}, -{"icon": "\"哈哈\"","text": "哈哈"}, -{"icon": "\"汗\"","text": "汗"}, -{"icon": "\"呵呵\"","text": "呵呵"}, -{"icon": "\"黑线\"","text": "黑线"}, -{"icon": "\"红领巾\"","text": "红领巾"}, -{"icon": "\"呼\"","text": "呼"}, -{"icon": "\"花心\"","text": "花心"}, -{"icon": "\"滑稽\"","text": "滑稽"}, -{"icon": "\"惊哭\"","text": "惊哭"}, -{"icon": "\"惊讶\"","text": "惊讶"}, -{"icon": "\"开心\"","text": "开心"}, -{"icon": "\"酷\"","text": "酷"}, -{"icon": "\"狂汗\"","text": "狂汗"}, -{"icon": "\"蜡烛\"","text": "蜡烛"}, -{"icon": "\"懒得理\"","text": "懒得理"}, -{"icon": "\"泪\"","text": "泪"}, -{"icon": "\"冷\"","text": "冷"}, -{"icon": "\"礼物\"","text": "礼物"}, -{"icon": "\"玫瑰\"","text": "玫瑰"}, -{"icon": "\"勉强\"","text": "勉强"}, -{"icon": "\"你懂的\"","text": "你懂的"}, -{"icon": "\"怒\"","text": "怒"}, -{"icon": "\"喷\"","text": "喷"}, -{"icon": "\"钱\"","text": "钱"}, -{"icon": "\"钱币\"","text": "钱币"}, -{"icon": "\"弱\"","text": "弱"}, -{"icon": "\"三道杠\"","text": "三道杠"}, -{"icon": "\"沙发\"","text": "沙发"}, -{"icon": "\"生气\"","text": "生气"}, -{"icon": "\"胜利\"","text": "胜利"}, -{"icon": "\"手纸\"","text": "手纸"}, -{"icon": "\"睡觉\"","text": "睡觉"}, -{"icon": "\"酸爽\"","text": "酸爽"}, -{"icon": "\"太开心\"","text": "太开心"}, -{"icon": "\"太阳\"","text": "太阳"}, -{"icon": "\"吐\"","text": "吐"}, -{"icon": "\"吐舌\"","text": "吐舌"}, -{"icon": "\"挖鼻\"","text": "挖鼻"}, -{"icon": "\"委屈\"","text": "委屈"}, -{"icon": "\"捂嘴笑\"","text": "捂嘴笑"}, -{"icon": "\"犀利\"","text": "犀利"}, -{"icon": "\"香蕉\"","text": "香蕉"}, -{"icon": "\"小乖\"","text": "小乖"}, -{"icon": "\"小红脸\"","text": "小红脸"}, -{"icon": "\"笑尿\"","text": "笑尿"}, -{"icon": "\"笑眼\"","text": "笑眼"}, -{"icon": "\"心碎\"","text": "心碎"}, -{"icon": "\"星星月亮\"","text": "星星月亮"}, -{"icon": "\"呀咩爹\"","text": "呀咩爹"}, -{"icon": "\"药丸\"","text": "药丸"}, -{"icon": "\"咦\"","text": "咦"}, -{"icon": "\"疑问\"","text": "疑问"}, -{"icon": "\"阴险\"","text": "阴险"}, -{"icon": "\"音乐\"","text": "音乐"}, -{"icon": "\"真棒\"","text": "真棒"}, -{"icon": "\"nico\"","text": "nico"}, -{"icon": "\"OK\"","text": "OK"}, -{"icon": "\"what\"","text": "what"}, -{"icon": "\"吃瓜\"","text": "吃瓜"}, -{"icon": "\"吃翔\"","text": "吃翔"}, -{"icon": "\"嘚瑟\"","text": "嘚瑟"}, -{"icon": "\"惊恐\"","text": "惊恐"} -]}} \ No newline at end of file diff --git a/src/main/resources/static/plugins/colorpicker/css/bootstrap-colorpicker.css b/src/main/resources/static/plugins/colorpicker/css/bootstrap-colorpicker.css deleted file mode 100755 index 8ea1714f6..000000000 --- a/src/main/resources/static/plugins/colorpicker/css/bootstrap-colorpicker.css +++ /dev/null @@ -1,244 +0,0 @@ -/*! - * Bootstrap Colorpicker - Simple and customizable colorpicker component for Twitter Bootstrap. - * @package bootstrap-colorpicker - * @version v3.0.0-wip - * @license MIT - * @link https://farbelous.github.io/bootstrap-colorpicker/ - * @link https://github.com/farbelous/bootstrap-colorpicker.git - */ -.colorpicker-saturation { - width: 100px; - height: 100px; - background-image: url("data:image/png;base64,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"); - cursor: crosshair; - float: left; } - .colorpicker-saturation .colorpicker-guide { - display: block; - height: 5px; - width: 5px; - border: 1px solid #000; - border-radius: 5px; - position: absolute; - top: 0; - left: 0; - margin: -4px 0 0 -4px; } - .colorpicker-saturation .colorpicker-guide i { - display: block; - height: 5px; - width: 5px; - border: 1px solid #fff; - border-radius: 5px; } - -.colorpicker-hue, -.colorpicker-alpha { - width: 15px; - height: 100px; - float: left; - cursor: row-resize; - margin-left: 4px; - margin-bottom: 4px; } - -.colorpicker-hue .colorpicker-guide, -.colorpicker-alpha .colorpicker-guide { - display: block; - height: 1px; - background: #000; - border-top: 1px solid #fff; - position: absolute; - top: 0; - left: 0; - width: 100%; - margin-top: -1px; } - -.colorpicker-hue { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAMAAABw8qpSAAABLFBMVEXqFBb/ABH/ACL/ADH/AEH/AFD/AGD/AG7/AH7/AI3/AJ3/AKz/ALz/AMr/ANv/AOr/APr2AP/mAP/XAP/HAP+4AP+oAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8BAv8AEP8AH/8AL/8APv8ATv8AXP8Abf8Ae/8Ai/8Amv8Aqv8AuP8Ayf8A1/8A5/8A9/8A//gA/+kA/9kA/8oA/7oA/6wA/5sA/40A/30A/24A/14A/1AA/z8A/zEA/yEA/xEB/wMN/wAd/wAs/wA8/wBK/wBb/wBp/wB5/wCI/wCY/wCm/wC3/wDF/wDV/wDk/wD1/wD/+gD/7AD/3AD/zAD/vgD/rQD/nwD/jgD/gAD/cAD/YgD/UQD/QwD/MgD/JAD/FAD4Eg42qAedAAAAh0lEQVR4XgXAg3EDAAAAwI9to7Zt27a1/w49BASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTS1tHXo1KVbj159+g0YNGTYiFFjxk2YNGXajFlz5i1YtGTZilVr1m3YtGXbjl179h04dOTYiVNnzl24dOXajVt37j149OTZi1dv3n349OXbj19//wOxE1dQ8reGAAAAAElFTkSuQmCC"); } - -.colorpicker-alpha { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAQAAAAVxWkcAAABr0lEQVR4Xo2VwU0DQQxF7dmRuNIFlzlSAR3QAaXQQdIBJVABFXDcOVAAd67cjJLR07dkhcSrkZKfb/t7bG88rFo3B5gZPMNycItu2xloGV7MWHzM9zuzFWCkmA0nK6AszCUJDW6+mG6R03ncw5v8EMTEvZ2O3AliYjpslblc0RF9LmZYWxURU6aKytWZYsoWCAe+xwOZp1GsEukGiIkYxcQCHck99+gRgB7JncyIB5SGEhP3Yh5P6JwX+u6AnYot104d8DJT7uH7M9JH6OZbimj0vfMVaYnJIZFJDBW9kHlerL2C6JV4mSt7uuo2N57RxnZ+usQjn0R1jwBJBrNO3evJpVYUWsJ/E3UiXRlv24/7YZ04xmEdWlzcKS+B/eapeyMvFd2k0+hRk/T0AmTW8h69s2sjYMsdPntECiILhAeIMZAeH4QvUwfn6ijC0tTV+fT9ky8jM9nK2g7Ly1VjSpKYq6IvsAm7MtNu1orEqa/K3KNvgMFdhfquPfJmp2dbh0/8Gzb6Y22ViaNr6n5410zXdngVhbu6XqdOtWOuin5hjABGp4a2uotZ71MVCfwDBt2/v37yo6AAAAAASUVORK5CYII="); - display: none; } - -.colorpicker-saturation, -.colorpicker-hue, -.colorpicker-alpha { - background-size: contain; } - -.colorpicker { - position: absolute; - top: 100%; - left: 0; - display: none; - float: left; - font-size: inherit; - color: inherit; - text-align: left; - list-style: none; - background-color: #ffffff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - padding: 4px; - min-width: 130px; - margin-top: 1px; - border-radius: 4px; - z-index: 1055; } - -.colorpicker:before, -.colorpicker:after { - display: table; - content: ""; - line-height: 0; } - -.colorpicker:after { - clear: both; } - -.colorpicker:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: rgba(0, 0, 0, 0.2); - position: absolute; - top: -7px; - left: 6px; } - -.colorpicker:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - position: absolute; - top: -6px; - left: 7px; } - -.colorpicker div { - position: relative; } - -.colorpicker.colorpicker-with-alpha { - min-width: 140px; } - -.colorpicker.colorpicker-with-alpha .colorpicker-alpha { - display: block; } - -.colorpicker-bar { - height: 15px; - margin: 5px 0 0 0; - clear: both; - text-align: center; - font-size: 10px; - line-height: normal; } - -.colorpicker-bar-horizontal { - height: 15px; - margin: 0 0 4px 0; - float: left; - width: 100px; } - -.colorpicker-element .input-group-addon i, -.colorpicker-element .add-on i { - display: inline-block; - cursor: pointer; - height: 16px; - vertical-align: text-top; - width: 16px; } - -.colorpicker.colorpicker-inline { - position: relative; - display: inline-block; - float: none; - z-index: auto; - vertical-align: text-bottom; } - -.colorpicker.colorpicker-horizontal { - width: 110px; - min-width: 110px; - height: auto; } - -.colorpicker.colorpicker-horizontal .colorpicker-saturation { - margin-bottom: 4px; } - -.colorpicker.colorpicker-horizontal .colorpicker-bar { - width: 100px; } - -.colorpicker.colorpicker-horizontal .colorpicker-hue, -.colorpicker.colorpicker-horizontal .colorpicker-alpha { - width: 100px; - height: 15px; - float: left; - cursor: col-resize; - margin-left: 0px; - margin-bottom: 4px; } - -.colorpicker.colorpicker-horizontal .colorpicker-hue .colorpicker-guide, -.colorpicker.colorpicker-horizontal .colorpicker-alpha .colorpicker-guide { - display: block; - height: 15px; - background: #ffffff; - position: absolute; - top: 0; - left: 0; - width: 1px; - border: none; - margin-top: 0; } - -.colorpicker.colorpicker-horizontal .colorpicker-hue { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAABCAMAAAAfBfuPAAABLFBMVEXqFBb/ABH/ACL/ADH/AEH/AFD/AGD/AG7/AH7/AI3/AJ3/AKz/ALz/AMr/ANv/AOr/APr2AP/mAP/XAP/HAP+4AP+oAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8BAv8AEP8AH/8AL/8APv8ATv8AXP8Abf8Ae/8Ai/8Amv8Aqv8AuP8Ayf8A1/8A5/8A9/8A//gA/+kA/9kA/8oA/7oA/6wA/5sA/40A/30A/24A/14A/1AA/z8A/zEA/yEA/xEB/wMN/wAd/wAs/wA8/wBK/wBb/wBp/wB5/wCI/wCY/wCm/wC3/wDF/wDV/wDk/wD1/wD/+gD/7AD/3AD/zAD/vgD/rQD/nwD/jgD/gAD/cAD/YgD/UQD/QwD/MgD/JAD/FAD4Eg42qAedAAAAbUlEQVR4XgXAghEDsbxtlrZt27ax/w49ACAYQTGcICmaYTleECVZUTXdMC1Wm93hdLk9Xp8/EAyFI9FYPJFMpTPZXL5QLJUr1Vq90Wy1O91efzAcjSfT2XyxXK03293+cDydL9fb/fF8vT/f3x+LfRNXARMbCAAAAABJRU5ErkJggg=="); } - -.colorpicker.colorpicker-horizontal .colorpicker-alpha { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAKCAQAAADoFTP1AAAB9ElEQVR4XoWTQW4VMRBEu9qWEimL7DhEMp8NF+ASnJJLcAQgE1bcgBUSkYKUuHCrZ9pjeqSU5Yn9LPu7umJQBIIv+k7vIOrtK66L4lmr3pVOrOv3otp619KZ0/KjdNI79L52Uo09FBQWrU0vfe5trezU+hLsoUKd3Repovte+0vbq/7Lj5XbaHECKasR9G4MPlbp+gzZxd6koPEJCkAYC5SjcOTAIIOK90Dja1IfIZ8Z+zAY9jm3b5Ia+MT5sFcqRJrR2AYYA8Kua5BzYRrFPNmD4PQMegGJMOffJJUsWiI3nCHZZjInNdffLWOufzbc3JaboCAVxwmnRHbhLSPwRJ4wU0BRSc6HkECYYVw95nMKgJOcylxrJttE5Ibzf9Xq9GPvP+WX3MiV/MGHfRu/SentRQrfG1GzsIrytdNXucSRKxQNIGHM9YhGFQJcdjNcBZvfJayuYe4Sia1CzwW+19mWOhe37HsxJWKwbu/jluEU15QzAQjAqCEbhMJc78GYV2E0kooHDubUImWkTOhGpgv8PoT8DJG/bzxna4BZ0eOFSOaLADGeSpFsg5AzeaDZIDQQXjZ4y/8ryfzUXBwdELRjTjCNvOeT0rNlrJz90vwy6N9pXXQEluX0inElpPWokSdiLCfiNJJjMKQ8Qsh8GEKQKMo/eiHrNbI9UksAAAAASUVORK5CYII="); } - -.colorpicker-right:before { - left: auto; - right: 6px; } - -.colorpicker-right:after { - left: auto; - right: 7px; } - -.colorpicker-no-arrow:before { - border-right: 0; - border-left: 0; } - -.colorpicker-no-arrow:after { - border-right: 0; - border-left: 0; } - -.colorpicker.colorpicker-visible, -.colorpicker-alpha.colorpicker-visible, -.colorpicker-saturation.colorpicker-visible, -.colorpicker-hue.colorpicker-visible, -.colorpicker-bar.colorpicker-visible { - display: block; } - -.colorpicker.colorpicker-hidden, -.colorpicker-alpha.colorpicker-hidden, -.colorpicker-saturation.colorpicker-hidden, -.colorpicker-hue.colorpicker-hidden, -.colorpicker-bar.colorpicker-hidden { - display: none; } - -.colorpicker-inline.colorpicker-visible { - display: inline-block; } - -/** EXTENSIONS **/ -.colorpicker-preview { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAQAAAAVxWkcAAABr0lEQVR4Xo2VwU0DQQxF7dmRuNIFlzlSAR3QAaXQQdIBJVABFXDcOVAAd67cjJLR07dkhcSrkZKfb/t7bG88rFo3B5gZPMNycItu2xloGV7MWHzM9zuzFWCkmA0nK6AszCUJDW6+mG6R03ncw5v8EMTEvZ2O3AliYjpslblc0RF9LmZYWxURU6aKytWZYsoWCAe+xwOZp1GsEukGiIkYxcQCHck99+gRgB7JncyIB5SGEhP3Yh5P6JwX+u6AnYot104d8DJT7uH7M9JH6OZbimj0vfMVaYnJIZFJDBW9kHlerL2C6JV4mSt7uuo2N57RxnZ+usQjn0R1jwBJBrNO3evJpVYUWsJ/E3UiXRlv24/7YZ04xmEdWlzcKS+B/eapeyMvFd2k0+hRk/T0AmTW8h69s2sjYMsdPntECiILhAeIMZAeH4QvUwfn6ijC0tTV+fT9ky8jM9nK2g7Ly1VjSpKYq6IvsAm7MtNu1orEqa/K3KNvgMFdhfquPfJmp2dbh0/8Gzb6Y22ViaNr6n5410zXdngVhbu6XqdOtWOuin5hjABGp4a2uotZ71MVCfwDBt2/v37yo6AAAAAASUVORK5CYII="); - background-position: 0 100%; } - -.colorpicker-preview div { - position: relative; - width: 100%; - height: 100%; } - -.colorpicker-swatch { - cursor: pointer; - float: left; - height: 12px; - width: 12px; } - -.colorpicker-swatch + .colorpicker-swatch { - margin-left: 2px; } - -/*# sourceMappingURL=bootstrap-colorpicker.css.map */ diff --git a/src/main/resources/static/plugins/colorpicker/css/bootstrap-colorpicker.css.map b/src/main/resources/static/plugins/colorpicker/css/bootstrap-colorpicker.css.map deleted file mode 100755 index fd026a790..000000000 --- a/src/main/resources/static/plugins/colorpicker/css/bootstrap-colorpicker.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["colorpicker.scss"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH;EACA,aAAA;EACA,cAAA;EAXA,o8KAAA;EAaA,kBAAA;EACA,YAAA,EAmBA;EAxBA;IAOA,eAAA;IACA,YAAA;IACA,WAAA;IACA,uBAAA;IAbA,mBAcA;IACA,mBAAA;IACA,OAAA;IACA,QAAA;IACA,sBAAA,EAQA;IAvBA;MAiBA,eAAA;MACA,YAAA;MACA,WAAA;MACA,uBAAA;MAvBA,mBAwBA,EACA;;AAIA;;EAEA,YAAA;EACA,cAAA;EACA,YAAA;EACA,mBAAA;EACA,iBAAA;EACA,mBAAA,EACA;;AAEA;;EAEA,eAAA;EACA,YAAA;EACA,iBAAA;EACA,2BAAA;EACA,mBAAA;EACA,OAAA;EACA,QAAA;EACA,YAAA;EACA,iBAAA,EACA;;AAEA;EA1DA,gtBAAA,EA4DA;;AAEA;EA9DA,4rBAAA;EAgEA,cAAA,EACA;;AAEA;;;EAGA,yBAAA,EACA;;AAEA;EACA,mBAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,YAAA;EACA,mBAAA;EACA,eAAA;EACA,iBAAA;EACA,iBAAA;EACA,0BAAA;EACA,6BAAA;EACA,sCAAA;EACA,oDAAA;UAAA,4CAAA;EACA,aAAA;EACA,iBAAA;EACA,gBAAA;EAnFA,mBAoFA;EACA,cAAA,EACA;;AAEA;;EAEA,eAAA;EACA,YAAA;EACA,eAAA,EACA;;AAEA;EACA,YAAA,EACA;;AAEA;EACA,YAAA;EACA,sBAAA;EACA,mCAAA;EACA,oCAAA;EACA,8BAAA;EACA,wCAAA;EACA,mBAAA;EACA,UAAA;EACA,UAAA,EACA;;AAEA;EACA,YAAA;EACA,sBAAA;EACA,mCAAA;EACA,oCAAA;EACA,iCAAA;EACA,mBAAA;EACA,UAAA;EACA,UAAA,EACA;;AAEA;EAEA,mBAAA,EACA;;AAGA;EACA,iBAAA,EACA;;AAEA;EACA,eAAA,EACA;;AAEA;EACA,aAAA;EACA,kBAAA;EACA,YAAA;EACA,mBAAA;EACA,gBAAA;EACA,oBAAA,EACA;;AAEA;EACA,aAAA;EACA,kBAAA;EACA,YAAA;EACA,aAAA,EACA;;AAEA;;EAEA,sBAAA;EACA,gBAAA;EACA,aAAA;EACA,yBAAA;EACA,YAAA,EACA;;AAEA;EACA,mBAAA;EACA,sBAAA;EACA,YAAA;EACA,cAAA;EACA,4BAAA,EACA;;AAEA;EACA,aAAA;EACA,iBAAA;EACA,aAAA,EACA;;AAEA;EACA,mBAAA,EACA;;AAEA;EACA,aAAA,EACA;;AAEA;;EAEA,aAAA;EACA,aAAA;EACA,YAAA;EACA,mBAAA;EACA,iBAAA;EACA,mBAAA,EACA;;AAEA;;EAEA,eAAA;EACA,aAAA;EACA,oBAAA;EACA,mBAAA;EACA,OAAA;EACA,QAAA;EACA,WAAA;EACA,aAAA;EACA,cAAA,EACA;;AAEA;EApNA,grBAAA,EAsNA;;AAEA;EAxNA,wxBAAA,EA0NA;;AAEA;EACA,WAAA;EACA,WAAA,EACA;;AAEA;EACA,WAAA;EACA,WAAA,EACA;;AAEA;EACA,gBAAA;EACA,eAAA,EACA;;AAEA;EACA,gBAAA;EACA,eAAA,EACA;;AAEA;;;;;EAMA,eAAA,EACA;;AAGA;;;;;EAMA,cAAA,EACA;;AAGA;EACA,sBAAA,EACA;;AAEA,kBAAA;AAEA;EA1QA,4rBAAA;EA4QA,4BAAA,EACA;;AAEA;EACA,mBAAA;EACA,YAAA;EACA,aAAA,EACA;;AAEA;EACA,gBAAA;EACA,YAAA;EACA,aAAA;EACA,YAAA,EACA;;AAEA;EACA,iBAAA,EACA","file":"bootstrap-colorpicker.css","sourcesContent":["@mixin bgImg($imgBase64) {\n background-image: url(\"#{$imgBase64}\");\n}\n\n@mixin borderRadius($size) {\n -webkit-border-radius: $size;\n -moz-border-radius: $size;\n border-radius: $size;\n}\n\n.colorpicker-saturation {\n width: 100px;\n height: 100px;\n @include bgImg('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAQAAADa613fAAAP9klEQVR4XnRWC47rNgwcKjlA0bv2VL1Qi/YELRav7203iS1ppqZoiXCAhuBHVLI74xFtG3/Hz2joIOjRGuR5eMYuRn9YA1fds859KX8ZvczLr9/pImiR3Rqky9/wlajRIdVE/1Rufeu/0No3/ASgBZAJUkwgi0iCaEatekJJoEqiTQncd67/gyOfRCZshTed0Nl8LbLj8D6qxtoq9/7kJz/aH/3Xfu8VwI5+AUH8DxE7gUyiIpZ5LwiGzUqE3CScJsCDQHAsvBnxWpkbC0QMHmBp6latWS0bnvrCN/x1+xPfce+Ij0GAyeAGGz15sOiax2UylPhKrFaMPnVWClwepKh07hdhkVDsK2uoyEIySergjdbY2VBtV8VLr8Mf9mF/4wMb7kR8FOhzFWZZe7HIZD9JRIbee28eJKBweTB6TwjYkAgWaUmtDveGw1Wx3zZ76YlPPfQd/+gTTUFkiGiJ+NQAszU1EPT/QJEgufolAMPkNU4CVOyUIBLg4xglEZHGQnTFOFV0VaulYddBhA986ge/7N/yQi/3flFgwfQq2ibLnTDBRl9TmUHyJASPV/eoN0UISIr+ICQKIFV4EpljSjV1uFVUq9hRtet5e9gXvuyHPW0zMhQxWaoBBa9Tg8vsCEhww23Smd0CKjIkmPIoxWrUBDgJqFCyESF43ctQxLUoHN7Q1KyVhqrNNm3cy2vMyQNPVKjc29Rh5SSU+giWdRJHkLnQG71FQEuNyNGBTDdBQQAKCuGiEUS/jcyGbkMPq931OIzb/dUPGuVlG7f+slqkO5NAAlzTMdcq0NkzmsEBmAQkbI+pSHbiqnuWIA6lijhvqwIxMyWxMGZiPU669XJE1tADDTs2HWpwKxuqdnTpOiOR42xlzLtm3pXGel3xd8/oTs8Xy0MV8GM1RlsC2Y3Wy3wut3M+2mEVux0Gt9fhzTWyLvGiiJYaqY5DWRFIwAiQ5r6gB9GpQihJw4I9j5Mkscj3BnzGjBhv8xna5P1Jo428o6IOPY5KFZtVOkEKqUjqQY9Gi+jrIOFwJUDzRtA9xyoIrGGmkNRmxVAnZoK+TkUIeUYni5wEzgOG5iZX5HCr2JyQNqdk++G0rgb1ochSIGutTj4P7F0PuRUAolmh5sCzAHn1BYyaADh6bgFeoBx6vst091CEvcSLWBBpqGq384jZ5llVHSwEShLx+D4d0mU3D5eEAJQ9KEhOZUYnDENV2qKgmIlQhWfdvcoXYaegPp/n1oKIOgYFqxrzQSciqNhv/5FqPpy6b0UcX2vf13DfWySRSEgkEYlEJJGQSyKJSEQSCYlEEpHexIVO3XOevffze2a+PfPv9x1rne1c3b3Mmlmz9mE++zuzngfnw/E+Dlc4LL4NwHdFy7u3KGPVmZ6/4eeMoDyre3i/KHADIHYO04w9zO0mAotuKnrc7XaPjvu66bNe5cDT7RlPepEnfS2X8dF1/utDvD+OwGDBxEgQywLCvIMYWBY+DShwAAORAdv9PswhDAqOUCi5+71AbFcDMR4xBDNfhySKXPXZ1+Vub+Q1Ltf5z7eC0AjVldHI26rIFdKIAyYBJCFVUhVDwttAnM52B3Ect1TFQXzJ0z33lOuib/QO8g+CuO0gKBRU80A8hkeJ0b1KRQWmFQVSh8mf3lpUpNaRulzN5NArrmKKGMijXgzk7w5ijdFVgT8f1IdFNjVWjDWicUYWEEMmSFDtILdzHW5XueHp7p+yuS54ep5/c5BE2Gw/gWPNYU4/PZaak2VGEsFjSbOf8irea6KQgojGCk0KxZY31tWWgzwayF8N5KYyo3VADVicWWrhwzr3ZqIOa5xW5zbqMPPMiyDURHDIHQTeWq7KFXcQPOqzPOL5Ov/iIDEDy7DHEwx0PTgjO8SS0fOEHcZNMt+XKEFMj8Q4QUSvPu6HPuvd4N9/x12RPwcIVRCAakSOUzHgsUSMFWYzDQ+PiOJqAOuYc9jh5TecnA+xHfFyOYhebeTH89P80wrCJzUjlsx7euIV0g4zQFUSiBPioIWBACFC7GgDj8P91ZSJOQmQP74MAnQo8H5RIe8kZ0kBcQCMAlEpRDiKROBxbR0ksdhWFq0gR9q9uQzkDzuIFQSPqAgRCAsCaVNF2ZAAhxvtzcqcnDk6tpXxSsayqXLIgSOb6zqeH+fvO0i9XEu5EVV+OZehRZJ6BGTeaRhCkTzVIZeAzaWGAFfErIPogQI5CuR3HQQx7DzBB16R3s7e0MBUPedjWutgG/JUTPqMeAQNEiytJRnJearWUgdwFNxN7rtBoECuj/O3BMHaTIxQ0a4GctireElTJHJvLTaalih5kvBCGMvkdESUMAdCFaI4yG8SpDfRWAptqkAJUwCG6B7lOREFSZBqKs57MEHqVJEBwHa2lp0OiKtiQ18gx9P89QrSXyc0vObBM4vPmBADqJZLAo/yzK7qPSZstCy+fDSZlhrm+Zkyjsf5q2otdC14zkLjHLf0me9wjNqQo0B1a6wBJRaIEgC2Qw9oby/cRHA+xHCQy/xlB1HVSV3Y/5yVhsc7dBi2UoIWCMcbELZWgxNCGUZ5y4ceBaLlE8dAfrEosrYT+z8ya3sxXndFBxuQivNGEHFCbLGBlBLKGYHZoeoQpcjtMn/uICPefcxecpuDOEemg9S/44cflZPIlWolyHkLrEpgbS9IQRlAgZgi0WDjsEiPh+PN/Fkogq4GdzPtarlRGW2tJwEK1RMTEvdVdmhAKHO1pdUuGQsVcX+rSfGzDbwGyE8NRPQc83HCaOkTZwPqABZBdFq8zAN1gue0FPO8wYUFBE1WkMwVzM1iQ4BItFh+H36Qy/yJg0DRQICmBl+tbKUC5cCj3yXI+SUFBS78ZAcBtHt+e9lBuiqpTNh9zTvIjzuIWxVYGQJpAZY+VWS3QKh84iSZbwuIdiDpc4KztQa/sjhMaDJEJDSZ8mZ+kCBdC0JpKVNQzZdKu+EsOeFCosrngVAkDS/uy6iGnW7UxmMpkB8FyFKo6iQW8z1HuBdMu1pdkZdB8jWTjlFtNaiJRYniIDcD+eECMqFLS9ED6DgxzCMKnRD3HYYA2uMCJUh70OK8G0EUnJV8lqe8nj84QdqLhdoJskNlEw1ivajM8LtPBhIeN99LESXI9xcQIHFQudHngZjUhXOQeGlUYmAddh5pxMhzV0M1vMAtMFIVmfp6fq+DgEWefjQVenstaqUy3bJQAiVlEihDghCDINFQg8oUhoQPkO8SBEM7SFQ72VYBwPuE7k8uYF5LNwg/TEd2zkuKjIIhTiJRlYrDfNS1QL7DYUcbcCyKJNwOwucVCVSwBBj/DwghXA2hQtACgCBBPprfXkAIFIYRXhONQARFU00Tsh6LEmmQUbkTImMi9me5qaHDIeBgHeRbdxAIqAJBCDSoCNVQglrciqX/ZCD9RRP6rgpBvhmKAFhg2ForBLXBYPtUjj7vCHPe8SXbYAY47gHB9mKeqjjIg/53fmMD0fR9Bug7SFcHI6EA1OC/E8QTL4NgBSGiCiyTChnI1zcQxmyfRZGM6w701KRybDvsIK3LWDx6mxGkcglEZQLkawnCdppZ6sgCh8trWWBUQaUWCEOlOs7HAenFE45QSu9RQQDAqchXNxDq4orQR44qRIFUQvM+mRJuB6GDEixgCbSBQGXghEEbdn1P/zO/QhAWCsWsmRhLa2VFkSZIgSVKmgEQhvk6K8YKMRZl7Dwg4amOUYvFBfLlE4RasOCB5S9PXKq0AqGDMiYIReXF0mYctITWBmqR5F38X5Y7yJfeCtKBzNbWYm5XpsMpf3dRZD3jPDesvdVCOs6KYQXIFw1E4fcE8dHWOepZBXpLJcACWUZVMRZbfvgXR4Ak8A7VVSKSVuu9p6/mFxyE7cOWavtLp952O8huK83+gmHzHaAsVXLgAvl8gPCvHzAFsM8GNXGKPH5cmN02sXTLa8QdKRXMzHv67/k5A9k1UIx36UH/VlWWtuKssNiRapB6BaLXl6MA+ayDcNS3v/sYXgCL620F1kk8QhKAEOvKu4DvajDO5zkHc4fBg76anyEIIcamBPex5EK8AoVHhMW7QAqWrYD1204CJB1hCfOAV/PTBPH0zBmJmsZZKCEaAmdqm4zMcYxYLN0JuHThIAjirAnp3px7TRgD+ZSD/K92M1CNIgbC8Ex7FkSEIlQEEUQEQQQBRBABEUQQEQTx3X0Evap9AhP39jL5OvuzAWuvbDaTTDIzX2aypUCJ0i7nAigoQAk9gUIUSxXEoCFyyVIuL9ZQcMZoArnwr4D0OLS8jGNGTgGnsZQWMYrcOARoIReAALBeWhf+RUCAIEsECFQHLkwR5zj4JW3t5WOUU5djvgQIawD53EDsctmYz8xGaZGPBUR3qNkiGwqDICUYIFpqBgRaayCfFiAWR2wWvoobmzxdF8N5kyxXmvap/sgGcLF/aoBosbG+lE395R8zCA4BqUYgOgYq+HtvBrT0LK15X8lZwx5f9klCX0rdgXzIIGbdhXMqZtHzJhuptEjmsFc4KzmN5IFPtfM7gWw2kPczSIqQSPUDYKYBMamsBCpKphW0iA5H8AbMDPJOQYjLZg1Vk4G49GlCYNYAkdOd0kwRQ8FCyAHydgLZ6Z2AqrVtjDUQ7hCEmrkEooDAsB2YnBCvkBpZ6yBvJpCd7Mn5zJ6C4QF2BUQPgHEIGUrGnHzQ8rlMekBeTyAzwDJksxwM4+w3BY02B8mIl0CmFRm+ZscxAuSnvwqQsECTIGSV6FEoJFTygVuzB5xAsKqBvAQE3+nkVoJDI1BJIaPBWik7ZSu5NIp5A3mRQaTFvLgkO9fVgEgMqqeVfb+p55tijWH+Kea71ubq4v8Sl8089sZKbKEZNq+VUfISJJF7j79WrbYgS994ZEf+nIz0pNFRWqapSmK6P45i3OQuItIiPDyg6RnxZ4D0g+CFPxAzluoRsWsaA6I6JOqVWCisDvJ0BgHTzMSRgMi0vmi8R+sR6tg/XUh7kCc7kMRqSNkTBDx0OkAUegFcMazciBXNpm798R6klXap/WZz49TQwBHqEcj4oCToUPjUuP9lfxcbyKMAwT6bTf1qqIIQDl3i5oCERNmVm0wgW4A8BGRxMX3hWh8bEV5Rvfp4DS5F3djWH2ztDNWKW7OBjgjIwsDWaKRknJjqMsh9QCa1p608lLovFkBE969DYtYelSzwSRcg535vAsFeNU9SzRCYZb4LDmxmFQKkwYGM+5y/G7b1uxMIylLdyE5yxIyYsoXWhQIpzQhYPi3JkJoKkB9+BxD0OMuyOEBe36DgyPSrxscmATldgKj8PxrkA/kA5PYMgkrocwIQ6GSRGmF0VaNqBKQZ5FYDEZSDzFTzq9mBQjAayE1A+ryDTzcQZe0Ibbxj7EwpAmTrJwEimZR9CCPtODhzxuNtY19Zd2Lf/fjCTnEiDAOg62j1utb/dv9mZ/aHCj4AyOHbsW3/As0BTzIgeJU7AAAAAElFTkSuQmCC');\n cursor: crosshair;\n float: left;\n .colorpicker-guide {\n display: block;\n height: 5px;\n width: 5px;\n border: 1px solid #000;\n @include borderRadius(5px);\n position: absolute;\n top: 0;\n left: 0;\n margin: -4px 0 0 -4px;\n i {\n display: block;\n height: 5px;\n width: 5px;\n border: 1px solid #fff;\n @include borderRadius(5px);\n }\n }\n}\n\n.colorpicker-hue,\n.colorpicker-alpha {\n width: 15px;\n height: 100px;\n float: left;\n cursor: row-resize;\n margin-left: 4px;\n margin-bottom: 4px;\n}\n\n.colorpicker-hue .colorpicker-guide,\n.colorpicker-alpha .colorpicker-guide {\n display: block;\n height: 1px;\n background: #000;\n border-top: 1px solid #fff;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n margin-top: -1px;\n}\n\n.colorpicker-hue {\n @include bgImg('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAMAAABw8qpSAAABLFBMVEXqFBb/ABH/ACL/ADH/AEH/AFD/AGD/AG7/AH7/AI3/AJ3/AKz/ALz/AMr/ANv/AOr/APr2AP/mAP/XAP/HAP+4AP+oAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8BAv8AEP8AH/8AL/8APv8ATv8AXP8Abf8Ae/8Ai/8Amv8Aqv8AuP8Ayf8A1/8A5/8A9/8A//gA/+kA/9kA/8oA/7oA/6wA/5sA/40A/30A/24A/14A/1AA/z8A/zEA/yEA/xEB/wMN/wAd/wAs/wA8/wBK/wBb/wBp/wB5/wCI/wCY/wCm/wC3/wDF/wDV/wDk/wD1/wD/+gD/7AD/3AD/zAD/vgD/rQD/nwD/jgD/gAD/cAD/YgD/UQD/QwD/MgD/JAD/FAD4Eg42qAedAAAAh0lEQVR4XgXAg3EDAAAAwI9to7Zt27a1/w49BASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTS1tHXo1KVbj159+g0YNGTYiFFjxk2YNGXajFlz5i1YtGTZilVr1m3YtGXbjl179h04dOTYiVNnzl24dOXajVt37j149OTZi1dv3n349OXbj19//wOxE1dQ8reGAAAAAElFTkSuQmCC');\n}\n\n.colorpicker-alpha {\n @include bgImg('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAQAAAAVxWkcAAABr0lEQVR4Xo2VwU0DQQxF7dmRuNIFlzlSAR3QAaXQQdIBJVABFXDcOVAAd67cjJLR07dkhcSrkZKfb/t7bG88rFo3B5gZPMNycItu2xloGV7MWHzM9zuzFWCkmA0nK6AszCUJDW6+mG6R03ncw5v8EMTEvZ2O3AliYjpslblc0RF9LmZYWxURU6aKytWZYsoWCAe+xwOZp1GsEukGiIkYxcQCHck99+gRgB7JncyIB5SGEhP3Yh5P6JwX+u6AnYot104d8DJT7uH7M9JH6OZbimj0vfMVaYnJIZFJDBW9kHlerL2C6JV4mSt7uuo2N57RxnZ+usQjn0R1jwBJBrNO3evJpVYUWsJ/E3UiXRlv24/7YZ04xmEdWlzcKS+B/eapeyMvFd2k0+hRk/T0AmTW8h69s2sjYMsdPntECiILhAeIMZAeH4QvUwfn6ijC0tTV+fT9ky8jM9nK2g7Ly1VjSpKYq6IvsAm7MtNu1orEqa/K3KNvgMFdhfquPfJmp2dbh0/8Gzb6Y22ViaNr6n5410zXdngVhbu6XqdOtWOuin5hjABGp4a2uotZ71MVCfwDBt2/v37yo6AAAAAASUVORK5CYII=');\n display: none;\n}\n\n.colorpicker-saturation,\n.colorpicker-hue,\n.colorpicker-alpha {\n background-size: contain;\n}\n\n.colorpicker {\n position: absolute;\n top: 100%;\n left: 0;\n display: none;\n float: left;\n font-size: inherit;\n color: inherit;\n text-align: left;\n list-style: none;\n background-color: #ffffff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n padding: 4px;\n min-width: 130px;\n margin-top: 1px;\n @include borderRadius(4px);\n z-index: 1055;\n}\n\n.colorpicker:before,\n.colorpicker:after {\n display: table;\n content: \"\";\n line-height: 0;\n}\n\n.colorpicker:after {\n clear: both;\n}\n\n.colorpicker:before {\n content: '';\n display: inline-block;\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-bottom: 7px solid #ccc;\n border-bottom-color: rgba(0, 0, 0, 0.2);\n position: absolute;\n top: -7px;\n left: 6px;\n}\n\n.colorpicker:after {\n content: '';\n display: inline-block;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #ffffff;\n position: absolute;\n top: -6px;\n left: 7px;\n}\n\n.colorpicker {\n div {\n position: relative;\n }\n}\n\n.colorpicker.colorpicker-with-alpha {\n min-width: 140px;\n}\n\n.colorpicker.colorpicker-with-alpha .colorpicker-alpha {\n display: block;\n}\n\n.colorpicker-bar {\n height: 15px;\n margin: 5px 0 0 0;\n clear: both;\n text-align: center;\n font-size: 10px;\n line-height: normal;\n}\n\n.colorpicker-bar-horizontal {\n height: 15px;\n margin: 0 0 4px 0;\n float: left;\n width: 100px;\n}\n\n.colorpicker-element .input-group-addon i,\n.colorpicker-element .add-on i {\n display: inline-block;\n cursor: pointer;\n height: 16px;\n vertical-align: text-top;\n width: 16px;\n}\n\n.colorpicker.colorpicker-inline {\n position: relative;\n display: inline-block;\n float: none;\n z-index: auto;\n vertical-align: text-bottom;\n}\n\n.colorpicker.colorpicker-horizontal {\n width: 110px;\n min-width: 110px;\n height: auto;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-saturation {\n margin-bottom: 4px;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-bar {\n width: 100px;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue,\n.colorpicker.colorpicker-horizontal .colorpicker-alpha {\n width: 100px;\n height: 15px;\n float: left;\n cursor: col-resize;\n margin-left: 0px;\n margin-bottom: 4px;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue .colorpicker-guide,\n.colorpicker.colorpicker-horizontal .colorpicker-alpha .colorpicker-guide {\n display: block;\n height: 15px;\n background: #ffffff;\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n border: none;\n margin-top: 0;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue {\n @include bgImg('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAABCAMAAAAfBfuPAAABLFBMVEXqFBb/ABH/ACL/ADH/AEH/AFD/AGD/AG7/AH7/AI3/AJ3/AKz/ALz/AMr/ANv/AOr/APr2AP/mAP/XAP/HAP+4AP+oAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8BAv8AEP8AH/8AL/8APv8ATv8AXP8Abf8Ae/8Ai/8Amv8Aqv8AuP8Ayf8A1/8A5/8A9/8A//gA/+kA/9kA/8oA/7oA/6wA/5sA/40A/30A/24A/14A/1AA/z8A/zEA/yEA/xEB/wMN/wAd/wAs/wA8/wBK/wBb/wBp/wB5/wCI/wCY/wCm/wC3/wDF/wDV/wDk/wD1/wD/+gD/7AD/3AD/zAD/vgD/rQD/nwD/jgD/gAD/cAD/YgD/UQD/QwD/MgD/JAD/FAD4Eg42qAedAAAAbUlEQVR4XgXAghEDsbxtlrZt27ax/w49ACAYQTGcICmaYTleECVZUTXdMC1Wm93hdLk9Xp8/EAyFI9FYPJFMpTPZXL5QLJUr1Vq90Wy1O91efzAcjSfT2XyxXK03293+cDydL9fb/fF8vT/f3x+LfRNXARMbCAAAAABJRU5ErkJggg==');\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-alpha {\n @include bgImg('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAKCAQAAADoFTP1AAAB9ElEQVR4XoWTQW4VMRBEu9qWEimL7DhEMp8NF+ASnJJLcAQgE1bcgBUSkYKUuHCrZ9pjeqSU5Yn9LPu7umJQBIIv+k7vIOrtK66L4lmr3pVOrOv3otp619KZ0/KjdNI79L52Uo09FBQWrU0vfe5trezU+hLsoUKd3Repovte+0vbq/7Lj5XbaHECKasR9G4MPlbp+gzZxd6koPEJCkAYC5SjcOTAIIOK90Dja1IfIZ8Z+zAY9jm3b5Ia+MT5sFcqRJrR2AYYA8Kua5BzYRrFPNmD4PQMegGJMOffJJUsWiI3nCHZZjInNdffLWOufzbc3JaboCAVxwmnRHbhLSPwRJ4wU0BRSc6HkECYYVw95nMKgJOcylxrJttE5Ibzf9Xq9GPvP+WX3MiV/MGHfRu/SentRQrfG1GzsIrytdNXucSRKxQNIGHM9YhGFQJcdjNcBZvfJayuYe4Sia1CzwW+19mWOhe37HsxJWKwbu/jluEU15QzAQjAqCEbhMJc78GYV2E0kooHDubUImWkTOhGpgv8PoT8DJG/bzxna4BZ0eOFSOaLADGeSpFsg5AzeaDZIDQQXjZ4y/8ryfzUXBwdELRjTjCNvOeT0rNlrJz90vwy6N9pXXQEluX0inElpPWokSdiLCfiNJJjMKQ8Qsh8GEKQKMo/eiHrNbI9UksAAAAASUVORK5CYII=');\n}\n\n.colorpicker-right:before {\n left: auto;\n right: 6px;\n}\n\n.colorpicker-right:after {\n left: auto;\n right: 7px;\n}\n\n.colorpicker-no-arrow:before {\n border-right: 0;\n border-left: 0;\n}\n\n.colorpicker-no-arrow:after {\n border-right: 0;\n border-left: 0;\n}\n\n.colorpicker,\n.colorpicker-alpha,\n.colorpicker-saturation,\n.colorpicker-hue,\n.colorpicker-bar {\n &.colorpicker-visible {\n display: block;\n }\n}\n\n.colorpicker,\n.colorpicker-alpha,\n.colorpicker-saturation,\n.colorpicker-hue,\n.colorpicker-bar {\n &.colorpicker-hidden {\n display: none;\n }\n}\n\n.colorpicker-inline.colorpicker-visible {\n display: inline-block;\n}\n\n/** EXTENSIONS **/\n\n.colorpicker-preview {\n @include bgImg('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAQAAAAVxWkcAAABr0lEQVR4Xo2VwU0DQQxF7dmRuNIFlzlSAR3QAaXQQdIBJVABFXDcOVAAd67cjJLR07dkhcSrkZKfb/t7bG88rFo3B5gZPMNycItu2xloGV7MWHzM9zuzFWCkmA0nK6AszCUJDW6+mG6R03ncw5v8EMTEvZ2O3AliYjpslblc0RF9LmZYWxURU6aKytWZYsoWCAe+xwOZp1GsEukGiIkYxcQCHck99+gRgB7JncyIB5SGEhP3Yh5P6JwX+u6AnYot104d8DJT7uH7M9JH6OZbimj0vfMVaYnJIZFJDBW9kHlerL2C6JV4mSt7uuo2N57RxnZ+usQjn0R1jwBJBrNO3evJpVYUWsJ/E3UiXRlv24/7YZ04xmEdWlzcKS+B/eapeyMvFd2k0+hRk/T0AmTW8h69s2sjYMsdPntECiILhAeIMZAeH4QvUwfn6ijC0tTV+fT9ky8jM9nK2g7Ly1VjSpKYq6IvsAm7MtNu1orEqa/K3KNvgMFdhfquPfJmp2dbh0/8Gzb6Y22ViaNr6n5410zXdngVhbu6XqdOtWOuin5hjABGp4a2uotZ71MVCfwDBt2/v37yo6AAAAAASUVORK5CYII=');\n background-position: 0 100%;\n}\n\n.colorpicker-preview div {\n position: relative;\n width: 100%;\n height: 100%;\n}\n\n.colorpicker-swatch {\n cursor: pointer;\n float: left;\n height: 12px;\n width: 12px;\n}\n\n.colorpicker-swatch + .colorpicker-swatch {\n margin-left: 2px;\n}\n"]} \ No newline at end of file diff --git a/src/main/resources/static/plugins/colorpicker/css/bootstrap-colorpicker.min.css b/src/main/resources/static/plugins/colorpicker/css/bootstrap-colorpicker.min.css deleted file mode 100755 index af15d38c6..000000000 --- a/src/main/resources/static/plugins/colorpicker/css/bootstrap-colorpicker.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Bootstrap Colorpicker - Simple and customizable colorpicker component for Twitter Bootstrap. - * @package bootstrap-colorpicker - * @version v3.0.0-wip - * @license MIT - * @link https://farbelous.github.io/bootstrap-colorpicker/ - * @link https://github.com/farbelous/bootstrap-colorpicker.git - */.colorpicker-saturation{width:100px;height:100px;background-image:url(data:image/png;base64,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);cursor:crosshair;float:left}.colorpicker-saturation .colorpicker-guide{display:block;height:5px;width:5px;border:1px solid #000;border-radius:5px;position:absolute;top:0;left:0;margin:-4px 0 0 -4px}.colorpicker-saturation .colorpicker-guide i{display:block;height:5px;width:5px;border:1px solid #fff;border-radius:5px}.colorpicker-alpha,.colorpicker-hue{width:15px;height:100px;float:left;cursor:row-resize;margin-left:4px;margin-bottom:4px}.colorpicker-alpha .colorpicker-guide,.colorpicker-hue .colorpicker-guide{display:block;height:1px;background:#000;border-top:1px solid #fff;position:absolute;top:0;left:0;width:100%;margin-top:-1px}.colorpicker-hue{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAMAAABw8qpSAAABLFBMVEXqFBb/ABH/ACL/ADH/AEH/AFD/AGD/AG7/AH7/AI3/AJ3/AKz/ALz/AMr/ANv/AOr/APr2AP/mAP/XAP/HAP+4AP+oAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8BAv8AEP8AH/8AL/8APv8ATv8AXP8Abf8Ae/8Ai/8Amv8Aqv8AuP8Ayf8A1/8A5/8A9/8A//gA/+kA/9kA/8oA/7oA/6wA/5sA/40A/30A/24A/14A/1AA/z8A/zEA/yEA/xEB/wMN/wAd/wAs/wA8/wBK/wBb/wBp/wB5/wCI/wCY/wCm/wC3/wDF/wDV/wDk/wD1/wD/+gD/7AD/3AD/zAD/vgD/rQD/nwD/jgD/gAD/cAD/YgD/UQD/QwD/MgD/JAD/FAD4Eg42qAedAAAAh0lEQVR4XgXAg3EDAAAAwI9to7Zt27a1/w49BASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTS1tHXo1KVbj159+g0YNGTYiFFjxk2YNGXajFlz5i1YtGTZilVr1m3YtGXbjl179h04dOTYiVNnzl24dOXajVt37j149OTZi1dv3n349OXbj19//wOxE1dQ8reGAAAAAElFTkSuQmCC)}.colorpicker-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAQAAAAVxWkcAAABr0lEQVR4Xo2VwU0DQQxF7dmRuNIFlzlSAR3QAaXQQdIBJVABFXDcOVAAd67cjJLR07dkhcSrkZKfb/t7bG88rFo3B5gZPMNycItu2xloGV7MWHzM9zuzFWCkmA0nK6AszCUJDW6+mG6R03ncw5v8EMTEvZ2O3AliYjpslblc0RF9LmZYWxURU6aKytWZYsoWCAe+xwOZp1GsEukGiIkYxcQCHck99+gRgB7JncyIB5SGEhP3Yh5P6JwX+u6AnYot104d8DJT7uH7M9JH6OZbimj0vfMVaYnJIZFJDBW9kHlerL2C6JV4mSt7uuo2N57RxnZ+usQjn0R1jwBJBrNO3evJpVYUWsJ/E3UiXRlv24/7YZ04xmEdWlzcKS+B/eapeyMvFd2k0+hRk/T0AmTW8h69s2sjYMsdPntECiILhAeIMZAeH4QvUwfn6ijC0tTV+fT9ky8jM9nK2g7Ly1VjSpKYq6IvsAm7MtNu1orEqa/K3KNvgMFdhfquPfJmp2dbh0/8Gzb6Y22ViaNr6n5410zXdngVhbu6XqdOtWOuin5hjABGp4a2uotZ71MVCfwDBt2/v37yo6AAAAAASUVORK5CYII=);display:none}.colorpicker-alpha,.colorpicker-hue,.colorpicker-saturation{background-size:contain}.colorpicker{position:absolute;top:100%;left:0;display:none;float:left;font-size:inherit;color:inherit;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);padding:4px;min-width:130px;margin-top:1px;border-radius:4px;z-index:1055}.colorpicker:after,.colorpicker:before{display:table;content:"";line-height:0}.colorpicker:after{clear:both}.colorpicker:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);position:absolute;top:-7px;left:6px}.colorpicker:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:7px}.colorpicker div{position:relative}.colorpicker.colorpicker-with-alpha{min-width:140px}.colorpicker.colorpicker-with-alpha .colorpicker-alpha{display:block}.colorpicker-bar{height:15px;margin:5px 0 0 0;clear:both;text-align:center;font-size:10px;line-height:normal}.colorpicker-bar-horizontal{height:15px;margin:0 0 4px 0;float:left;width:100px}.colorpicker-element .add-on i,.colorpicker-element .input-group-addon i{display:inline-block;cursor:pointer;height:16px;vertical-align:text-top;width:16px}.colorpicker.colorpicker-inline{position:relative;display:inline-block;float:none;z-index:auto;vertical-align:text-bottom}.colorpicker.colorpicker-horizontal{width:110px;min-width:110px;height:auto}.colorpicker.colorpicker-horizontal .colorpicker-saturation{margin-bottom:4px}.colorpicker.colorpicker-horizontal .colorpicker-bar{width:100px}.colorpicker.colorpicker-horizontal .colorpicker-alpha,.colorpicker.colorpicker-horizontal .colorpicker-hue{width:100px;height:15px;float:left;cursor:col-resize;margin-left:0;margin-bottom:4px}.colorpicker.colorpicker-horizontal .colorpicker-alpha .colorpicker-guide,.colorpicker.colorpicker-horizontal .colorpicker-hue .colorpicker-guide{display:block;height:15px;background:#fff;position:absolute;top:0;left:0;width:1px;border:none;margin-top:0}.colorpicker.colorpicker-horizontal .colorpicker-hue{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAABCAMAAAAfBfuPAAABLFBMVEXqFBb/ABH/ACL/ADH/AEH/AFD/AGD/AG7/AH7/AI3/AJ3/AKz/ALz/AMr/ANv/AOr/APr2AP/mAP/XAP/HAP+4AP+oAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8BAv8AEP8AH/8AL/8APv8ATv8AXP8Abf8Ae/8Ai/8Amv8Aqv8AuP8Ayf8A1/8A5/8A9/8A//gA/+kA/9kA/8oA/7oA/6wA/5sA/40A/30A/24A/14A/1AA/z8A/zEA/yEA/xEB/wMN/wAd/wAs/wA8/wBK/wBb/wBp/wB5/wCI/wCY/wCm/wC3/wDF/wDV/wDk/wD1/wD/+gD/7AD/3AD/zAD/vgD/rQD/nwD/jgD/gAD/cAD/YgD/UQD/QwD/MgD/JAD/FAD4Eg42qAedAAAAbUlEQVR4XgXAghEDsbxtlrZt27ax/w49ACAYQTGcICmaYTleECVZUTXdMC1Wm93hdLk9Xp8/EAyFI9FYPJFMpTPZXL5QLJUr1Vq90Wy1O91efzAcjSfT2XyxXK03293+cDydL9fb/fF8vT/f3x+LfRNXARMbCAAAAABJRU5ErkJggg==)}.colorpicker.colorpicker-horizontal .colorpicker-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAKCAQAAADoFTP1AAAB9ElEQVR4XoWTQW4VMRBEu9qWEimL7DhEMp8NF+ASnJJLcAQgE1bcgBUSkYKUuHCrZ9pjeqSU5Yn9LPu7umJQBIIv+k7vIOrtK66L4lmr3pVOrOv3otp619KZ0/KjdNI79L52Uo09FBQWrU0vfe5trezU+hLsoUKd3Repovte+0vbq/7Lj5XbaHECKasR9G4MPlbp+gzZxd6koPEJCkAYC5SjcOTAIIOK90Dja1IfIZ8Z+zAY9jm3b5Ia+MT5sFcqRJrR2AYYA8Kua5BzYRrFPNmD4PQMegGJMOffJJUsWiI3nCHZZjInNdffLWOufzbc3JaboCAVxwmnRHbhLSPwRJ4wU0BRSc6HkECYYVw95nMKgJOcylxrJttE5Ibzf9Xq9GPvP+WX3MiV/MGHfRu/SentRQrfG1GzsIrytdNXucSRKxQNIGHM9YhGFQJcdjNcBZvfJayuYe4Sia1CzwW+19mWOhe37HsxJWKwbu/jluEU15QzAQjAqCEbhMJc78GYV2E0kooHDubUImWkTOhGpgv8PoT8DJG/bzxna4BZ0eOFSOaLADGeSpFsg5AzeaDZIDQQXjZ4y/8ryfzUXBwdELRjTjCNvOeT0rNlrJz90vwy6N9pXXQEluX0inElpPWokSdiLCfiNJJjMKQ8Qsh8GEKQKMo/eiHrNbI9UksAAAAASUVORK5CYII=)}.colorpicker-right:before{left:auto;right:6px}.colorpicker-right:after{left:auto;right:7px}.colorpicker-no-arrow:before{border-right:0;border-left:0}.colorpicker-no-arrow:after{border-right:0;border-left:0}.colorpicker-alpha.colorpicker-visible,.colorpicker-bar.colorpicker-visible,.colorpicker-hue.colorpicker-visible,.colorpicker-saturation.colorpicker-visible,.colorpicker.colorpicker-visible{display:block}.colorpicker-alpha.colorpicker-hidden,.colorpicker-bar.colorpicker-hidden,.colorpicker-hue.colorpicker-hidden,.colorpicker-saturation.colorpicker-hidden,.colorpicker.colorpicker-hidden{display:none}.colorpicker-inline.colorpicker-visible{display:inline-block}.colorpicker-preview{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAQAAAAVxWkcAAABr0lEQVR4Xo2VwU0DQQxF7dmRuNIFlzlSAR3QAaXQQdIBJVABFXDcOVAAd67cjJLR07dkhcSrkZKfb/t7bG88rFo3B5gZPMNycItu2xloGV7MWHzM9zuzFWCkmA0nK6AszCUJDW6+mG6R03ncw5v8EMTEvZ2O3AliYjpslblc0RF9LmZYWxURU6aKytWZYsoWCAe+xwOZp1GsEukGiIkYxcQCHck99+gRgB7JncyIB5SGEhP3Yh5P6JwX+u6AnYot104d8DJT7uH7M9JH6OZbimj0vfMVaYnJIZFJDBW9kHlerL2C6JV4mSt7uuo2N57RxnZ+usQjn0R1jwBJBrNO3evJpVYUWsJ/E3UiXRlv24/7YZ04xmEdWlzcKS+B/eapeyMvFd2k0+hRk/T0AmTW8h69s2sjYMsdPntECiILhAeIMZAeH4QvUwfn6ijC0tTV+fT9ky8jM9nK2g7Ly1VjSpKYq6IvsAm7MtNu1orEqa/K3KNvgMFdhfquPfJmp2dbh0/8Gzb6Y22ViaNr6n5410zXdngVhbu6XqdOtWOuin5hjABGp4a2uotZ71MVCfwDBt2/v37yo6AAAAAASUVORK5CYII=);background-position:0 100%}.colorpicker-preview div{position:relative;width:100%;height:100%}.colorpicker-swatch{cursor:pointer;float:left;height:12px;width:12px}.colorpicker-swatch+.colorpicker-swatch{margin-left:2px} -/*# sourceMappingURL=bootstrap-colorpicker.min.css.map */ diff --git a/src/main/resources/static/plugins/colorpicker/css/bootstrap-colorpicker.min.css.map b/src/main/resources/static/plugins/colorpicker/css/bootstrap-colorpicker.min.css.map deleted file mode 100755 index 8343fe652..000000000 --- a/src/main/resources/static/plugins/colorpicker/css/bootstrap-colorpicker.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["bootstrap-colorpicker.css","bootstrap-colorpicker.css"],"names":[],"mappings":"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","file":"bootstrap-colorpicker.min.css","sourcesContent":["/*!\n * Bootstrap Colorpicker - Simple and customizable colorpicker component for Twitter Bootstrap.\n * @package bootstrap-colorpicker\n * @version v3.0.0-wip\n * @license MIT\n * @link https://farbelous.github.io/bootstrap-colorpicker/\n * @link https://github.com/farbelous/bootstrap-colorpicker.git\n */\n.colorpicker-saturation {\n width: 100px;\n height: 100px;\n background-image: url(\"data:image/png;base64,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\");\n cursor: crosshair;\n float: left; }\n .colorpicker-saturation .colorpicker-guide {\n display: block;\n height: 5px;\n width: 5px;\n border: 1px solid #000;\n border-radius: 5px;\n position: absolute;\n top: 0;\n left: 0;\n margin: -4px 0 0 -4px; }\n .colorpicker-saturation .colorpicker-guide i {\n display: block;\n height: 5px;\n width: 5px;\n border: 1px solid #fff;\n border-radius: 5px; }\n\n.colorpicker-hue,\n.colorpicker-alpha {\n width: 15px;\n height: 100px;\n float: left;\n cursor: row-resize;\n margin-left: 4px;\n margin-bottom: 4px; }\n\n.colorpicker-hue .colorpicker-guide,\n.colorpicker-alpha .colorpicker-guide {\n display: block;\n height: 1px;\n background: #000;\n border-top: 1px solid #fff;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n margin-top: -1px; }\n\n.colorpicker-hue {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAMAAABw8qpSAAABLFBMVEXqFBb/ABH/ACL/ADH/AEH/AFD/AGD/AG7/AH7/AI3/AJ3/AKz/ALz/AMr/ANv/AOr/APr2AP/mAP/XAP/HAP+4AP+oAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8BAv8AEP8AH/8AL/8APv8ATv8AXP8Abf8Ae/8Ai/8Amv8Aqv8AuP8Ayf8A1/8A5/8A9/8A//gA/+kA/9kA/8oA/7oA/6wA/5sA/40A/30A/24A/14A/1AA/z8A/zEA/yEA/xEB/wMN/wAd/wAs/wA8/wBK/wBb/wBp/wB5/wCI/wCY/wCm/wC3/wDF/wDV/wDk/wD1/wD/+gD/7AD/3AD/zAD/vgD/rQD/nwD/jgD/gAD/cAD/YgD/UQD/QwD/MgD/JAD/FAD4Eg42qAedAAAAh0lEQVR4XgXAg3EDAAAAwI9to7Zt27a1/w49BASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTS1tHXo1KVbj159+g0YNGTYiFFjxk2YNGXajFlz5i1YtGTZilVr1m3YtGXbjl179h04dOTYiVNnzl24dOXajVt37j149OTZi1dv3n349OXbj19//wOxE1dQ8reGAAAAAElFTkSuQmCC\"); }\n\n.colorpicker-alpha {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAQAAAAVxWkcAAABr0lEQVR4Xo2VwU0DQQxF7dmRuNIFlzlSAR3QAaXQQdIBJVABFXDcOVAAd67cjJLR07dkhcSrkZKfb/t7bG88rFo3B5gZPMNycItu2xloGV7MWHzM9zuzFWCkmA0nK6AszCUJDW6+mG6R03ncw5v8EMTEvZ2O3AliYjpslblc0RF9LmZYWxURU6aKytWZYsoWCAe+xwOZp1GsEukGiIkYxcQCHck99+gRgB7JncyIB5SGEhP3Yh5P6JwX+u6AnYot104d8DJT7uH7M9JH6OZbimj0vfMVaYnJIZFJDBW9kHlerL2C6JV4mSt7uuo2N57RxnZ+usQjn0R1jwBJBrNO3evJpVYUWsJ/E3UiXRlv24/7YZ04xmEdWlzcKS+B/eapeyMvFd2k0+hRk/T0AmTW8h69s2sjYMsdPntECiILhAeIMZAeH4QvUwfn6ijC0tTV+fT9ky8jM9nK2g7Ly1VjSpKYq6IvsAm7MtNu1orEqa/K3KNvgMFdhfquPfJmp2dbh0/8Gzb6Y22ViaNr6n5410zXdngVhbu6XqdOtWOuin5hjABGp4a2uotZ71MVCfwDBt2/v37yo6AAAAAASUVORK5CYII=\");\n display: none; }\n\n.colorpicker-saturation,\n.colorpicker-hue,\n.colorpicker-alpha {\n background-size: contain; }\n\n.colorpicker {\n position: absolute;\n top: 100%;\n left: 0;\n display: none;\n float: left;\n font-size: inherit;\n color: inherit;\n text-align: left;\n list-style: none;\n background-color: #ffffff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n padding: 4px;\n min-width: 130px;\n margin-top: 1px;\n border-radius: 4px;\n z-index: 1055; }\n\n.colorpicker:before,\n.colorpicker:after {\n display: table;\n content: \"\";\n line-height: 0; }\n\n.colorpicker:after {\n clear: both; }\n\n.colorpicker:before {\n content: '';\n display: inline-block;\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-bottom: 7px solid #ccc;\n border-bottom-color: rgba(0, 0, 0, 0.2);\n position: absolute;\n top: -7px;\n left: 6px; }\n\n.colorpicker:after {\n content: '';\n display: inline-block;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #ffffff;\n position: absolute;\n top: -6px;\n left: 7px; }\n\n.colorpicker div {\n position: relative; }\n\n.colorpicker.colorpicker-with-alpha {\n min-width: 140px; }\n\n.colorpicker.colorpicker-with-alpha .colorpicker-alpha {\n display: block; }\n\n.colorpicker-bar {\n height: 15px;\n margin: 5px 0 0 0;\n clear: both;\n text-align: center;\n font-size: 10px;\n line-height: normal; }\n\n.colorpicker-bar-horizontal {\n height: 15px;\n margin: 0 0 4px 0;\n float: left;\n width: 100px; }\n\n.colorpicker-element .input-group-addon i,\n.colorpicker-element .add-on i {\n display: inline-block;\n cursor: pointer;\n height: 16px;\n vertical-align: text-top;\n width: 16px; }\n\n.colorpicker.colorpicker-inline {\n position: relative;\n display: inline-block;\n float: none;\n z-index: auto;\n vertical-align: text-bottom; }\n\n.colorpicker.colorpicker-horizontal {\n width: 110px;\n min-width: 110px;\n height: auto; }\n\n.colorpicker.colorpicker-horizontal .colorpicker-saturation {\n margin-bottom: 4px; }\n\n.colorpicker.colorpicker-horizontal .colorpicker-bar {\n width: 100px; }\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue,\n.colorpicker.colorpicker-horizontal .colorpicker-alpha {\n width: 100px;\n height: 15px;\n float: left;\n cursor: col-resize;\n margin-left: 0px;\n margin-bottom: 4px; }\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue .colorpicker-guide,\n.colorpicker.colorpicker-horizontal .colorpicker-alpha .colorpicker-guide {\n display: block;\n height: 15px;\n background: #ffffff;\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n border: none;\n margin-top: 0; }\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAABCAMAAAAfBfuPAAABLFBMVEXqFBb/ABH/ACL/ADH/AEH/AFD/AGD/AG7/AH7/AI3/AJ3/AKz/ALz/AMr/ANv/AOr/APr2AP/mAP/XAP/HAP+4AP+oAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8BAv8AEP8AH/8AL/8APv8ATv8AXP8Abf8Ae/8Ai/8Amv8Aqv8AuP8Ayf8A1/8A5/8A9/8A//gA/+kA/9kA/8oA/7oA/6wA/5sA/40A/30A/24A/14A/1AA/z8A/zEA/yEA/xEB/wMN/wAd/wAs/wA8/wBK/wBb/wBp/wB5/wCI/wCY/wCm/wC3/wDF/wDV/wDk/wD1/wD/+gD/7AD/3AD/zAD/vgD/rQD/nwD/jgD/gAD/cAD/YgD/UQD/QwD/MgD/JAD/FAD4Eg42qAedAAAAbUlEQVR4XgXAghEDsbxtlrZt27ax/w49ACAYQTGcICmaYTleECVZUTXdMC1Wm93hdLk9Xp8/EAyFI9FYPJFMpTPZXL5QLJUr1Vq90Wy1O91efzAcjSfT2XyxXK03293+cDydL9fb/fF8vT/f3x+LfRNXARMbCAAAAABJRU5ErkJggg==\"); }\n\n.colorpicker.colorpicker-horizontal .colorpicker-alpha {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAKCAQAAADoFTP1AAAB9ElEQVR4XoWTQW4VMRBEu9qWEimL7DhEMp8NF+ASnJJLcAQgE1bcgBUSkYKUuHCrZ9pjeqSU5Yn9LPu7umJQBIIv+k7vIOrtK66L4lmr3pVOrOv3otp619KZ0/KjdNI79L52Uo09FBQWrU0vfe5trezU+hLsoUKd3Repovte+0vbq/7Lj5XbaHECKasR9G4MPlbp+gzZxd6koPEJCkAYC5SjcOTAIIOK90Dja1IfIZ8Z+zAY9jm3b5Ia+MT5sFcqRJrR2AYYA8Kua5BzYRrFPNmD4PQMegGJMOffJJUsWiI3nCHZZjInNdffLWOufzbc3JaboCAVxwmnRHbhLSPwRJ4wU0BRSc6HkECYYVw95nMKgJOcylxrJttE5Ibzf9Xq9GPvP+WX3MiV/MGHfRu/SentRQrfG1GzsIrytdNXucSRKxQNIGHM9YhGFQJcdjNcBZvfJayuYe4Sia1CzwW+19mWOhe37HsxJWKwbu/jluEU15QzAQjAqCEbhMJc78GYV2E0kooHDubUImWkTOhGpgv8PoT8DJG/bzxna4BZ0eOFSOaLADGeSpFsg5AzeaDZIDQQXjZ4y/8ryfzUXBwdELRjTjCNvOeT0rNlrJz90vwy6N9pXXQEluX0inElpPWokSdiLCfiNJJjMKQ8Qsh8GEKQKMo/eiHrNbI9UksAAAAASUVORK5CYII=\"); }\n\n.colorpicker-right:before {\n left: auto;\n right: 6px; }\n\n.colorpicker-right:after {\n left: auto;\n right: 7px; }\n\n.colorpicker-no-arrow:before {\n border-right: 0;\n border-left: 0; }\n\n.colorpicker-no-arrow:after {\n border-right: 0;\n border-left: 0; }\n\n.colorpicker.colorpicker-visible,\n.colorpicker-alpha.colorpicker-visible,\n.colorpicker-saturation.colorpicker-visible,\n.colorpicker-hue.colorpicker-visible,\n.colorpicker-bar.colorpicker-visible {\n display: block; }\n\n.colorpicker.colorpicker-hidden,\n.colorpicker-alpha.colorpicker-hidden,\n.colorpicker-saturation.colorpicker-hidden,\n.colorpicker-hue.colorpicker-hidden,\n.colorpicker-bar.colorpicker-hidden {\n display: none; }\n\n.colorpicker-inline.colorpicker-visible {\n display: inline-block; }\n\n/** EXTENSIONS **/\n.colorpicker-preview {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAQAAAAVxWkcAAABr0lEQVR4Xo2VwU0DQQxF7dmRuNIFlzlSAR3QAaXQQdIBJVABFXDcOVAAd67cjJLR07dkhcSrkZKfb/t7bG88rFo3B5gZPMNycItu2xloGV7MWHzM9zuzFWCkmA0nK6AszCUJDW6+mG6R03ncw5v8EMTEvZ2O3AliYjpslblc0RF9LmZYWxURU6aKytWZYsoWCAe+xwOZp1GsEukGiIkYxcQCHck99+gRgB7JncyIB5SGEhP3Yh5P6JwX+u6AnYot104d8DJT7uH7M9JH6OZbimj0vfMVaYnJIZFJDBW9kHlerL2C6JV4mSt7uuo2N57RxnZ+usQjn0R1jwBJBrNO3evJpVYUWsJ/E3UiXRlv24/7YZ04xmEdWlzcKS+B/eapeyMvFd2k0+hRk/T0AmTW8h69s2sjYMsdPntECiILhAeIMZAeH4QvUwfn6ijC0tTV+fT9ky8jM9nK2g7Ly1VjSpKYq6IvsAm7MtNu1orEqa/K3KNvgMFdhfquPfJmp2dbh0/8Gzb6Y22ViaNr6n5410zXdngVhbu6XqdOtWOuin5hjABGp4a2uotZ71MVCfwDBt2/v37yo6AAAAAASUVORK5CYII=\");\n background-position: 0 100%; }\n\n.colorpicker-preview div {\n position: relative;\n width: 100%;\n height: 100%; }\n\n.colorpicker-swatch {\n cursor: pointer;\n float: left;\n height: 12px;\n width: 12px; }\n\n.colorpicker-swatch + .colorpicker-swatch {\n margin-left: 2px; }\n\n/*# sourceMappingURL=bootstrap-colorpicker.css.map */\n","/*!\n * Bootstrap Colorpicker - Simple and customizable colorpicker component for Twitter Bootstrap.\n * @package bootstrap-colorpicker\n * @version v3.0.0-wip\n * @license MIT\n * @link https://farbelous.github.io/bootstrap-colorpicker/\n * @link https://github.com/farbelous/bootstrap-colorpicker.git\n */\n.colorpicker-saturation {\n width: 100px;\n height: 100px;\n background-image: url(\"data:image/png;base64,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\");\n cursor: crosshair;\n float: left; }\n .colorpicker-saturation .colorpicker-guide {\n display: block;\n height: 5px;\n width: 5px;\n border: 1px solid #000;\n border-radius: 5px;\n position: absolute;\n top: 0;\n left: 0;\n margin: -4px 0 0 -4px; }\n .colorpicker-saturation .colorpicker-guide i {\n display: block;\n height: 5px;\n width: 5px;\n border: 1px solid #fff;\n border-radius: 5px; }\n\n.colorpicker-hue,\n.colorpicker-alpha {\n width: 15px;\n height: 100px;\n float: left;\n cursor: row-resize;\n margin-left: 4px;\n margin-bottom: 4px; }\n\n.colorpicker-hue .colorpicker-guide,\n.colorpicker-alpha .colorpicker-guide {\n display: block;\n height: 1px;\n background: #000;\n border-top: 1px solid #fff;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n margin-top: -1px; }\n\n.colorpicker-hue {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAMAAABw8qpSAAABLFBMVEXqFBb/ABH/ACL/ADH/AEH/AFD/AGD/AG7/AH7/AI3/AJ3/AKz/ALz/AMr/ANv/AOr/APr2AP/mAP/XAP/HAP+4AP+oAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8BAv8AEP8AH/8AL/8APv8ATv8AXP8Abf8Ae/8Ai/8Amv8Aqv8AuP8Ayf8A1/8A5/8A9/8A//gA/+kA/9kA/8oA/7oA/6wA/5sA/40A/30A/24A/14A/1AA/z8A/zEA/yEA/xEB/wMN/wAd/wAs/wA8/wBK/wBb/wBp/wB5/wCI/wCY/wCm/wC3/wDF/wDV/wDk/wD1/wD/+gD/7AD/3AD/zAD/vgD/rQD/nwD/jgD/gAD/cAD/YgD/UQD/QwD/MgD/JAD/FAD4Eg42qAedAAAAh0lEQVR4XgXAg3EDAAAAwI9to7Zt27a1/w49BASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTS1tHXo1KVbj159+g0YNGTYiFFjxk2YNGXajFlz5i1YtGTZilVr1m3YtGXbjl179h04dOTYiVNnzl24dOXajVt37j149OTZi1dv3n349OXbj19//wOxE1dQ8reGAAAAAElFTkSuQmCC\"); }\n\n.colorpicker-alpha {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAQAAAAVxWkcAAABr0lEQVR4Xo2VwU0DQQxF7dmRuNIFlzlSAR3QAaXQQdIBJVABFXDcOVAAd67cjJLR07dkhcSrkZKfb/t7bG88rFo3B5gZPMNycItu2xloGV7MWHzM9zuzFWCkmA0nK6AszCUJDW6+mG6R03ncw5v8EMTEvZ2O3AliYjpslblc0RF9LmZYWxURU6aKytWZYsoWCAe+xwOZp1GsEukGiIkYxcQCHck99+gRgB7JncyIB5SGEhP3Yh5P6JwX+u6AnYot104d8DJT7uH7M9JH6OZbimj0vfMVaYnJIZFJDBW9kHlerL2C6JV4mSt7uuo2N57RxnZ+usQjn0R1jwBJBrNO3evJpVYUWsJ/E3UiXRlv24/7YZ04xmEdWlzcKS+B/eapeyMvFd2k0+hRk/T0AmTW8h69s2sjYMsdPntECiILhAeIMZAeH4QvUwfn6ijC0tTV+fT9ky8jM9nK2g7Ly1VjSpKYq6IvsAm7MtNu1orEqa/K3KNvgMFdhfquPfJmp2dbh0/8Gzb6Y22ViaNr6n5410zXdngVhbu6XqdOtWOuin5hjABGp4a2uotZ71MVCfwDBt2/v37yo6AAAAAASUVORK5CYII=\");\n display: none; }\n\n.colorpicker-saturation,\n.colorpicker-hue,\n.colorpicker-alpha {\n background-size: contain; }\n\n.colorpicker {\n position: absolute;\n top: 100%;\n left: 0;\n display: none;\n float: left;\n font-size: inherit;\n color: inherit;\n text-align: left;\n list-style: none;\n background-color: #ffffff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n padding: 4px;\n min-width: 130px;\n margin-top: 1px;\n border-radius: 4px;\n z-index: 1055; }\n\n.colorpicker:before,\n.colorpicker:after {\n display: table;\n content: \"\";\n line-height: 0; }\n\n.colorpicker:after {\n clear: both; }\n\n.colorpicker:before {\n content: '';\n display: inline-block;\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-bottom: 7px solid #ccc;\n border-bottom-color: rgba(0, 0, 0, 0.2);\n position: absolute;\n top: -7px;\n left: 6px; }\n\n.colorpicker:after {\n content: '';\n display: inline-block;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #ffffff;\n position: absolute;\n top: -6px;\n left: 7px; }\n\n.colorpicker div {\n position: relative; }\n\n.colorpicker.colorpicker-with-alpha {\n min-width: 140px; }\n\n.colorpicker.colorpicker-with-alpha .colorpicker-alpha {\n display: block; }\n\n.colorpicker-bar {\n height: 15px;\n margin: 5px 0 0 0;\n clear: both;\n text-align: center;\n font-size: 10px;\n line-height: normal; }\n\n.colorpicker-bar-horizontal {\n height: 15px;\n margin: 0 0 4px 0;\n float: left;\n width: 100px; }\n\n.colorpicker-element .input-group-addon i,\n.colorpicker-element .add-on i {\n display: inline-block;\n cursor: pointer;\n height: 16px;\n vertical-align: text-top;\n width: 16px; }\n\n.colorpicker.colorpicker-inline {\n position: relative;\n display: inline-block;\n float: none;\n z-index: auto;\n vertical-align: text-bottom; }\n\n.colorpicker.colorpicker-horizontal {\n width: 110px;\n min-width: 110px;\n height: auto; }\n\n.colorpicker.colorpicker-horizontal .colorpicker-saturation {\n margin-bottom: 4px; }\n\n.colorpicker.colorpicker-horizontal .colorpicker-bar {\n width: 100px; }\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue,\n.colorpicker.colorpicker-horizontal .colorpicker-alpha {\n width: 100px;\n height: 15px;\n float: left;\n cursor: col-resize;\n margin-left: 0px;\n margin-bottom: 4px; }\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue .colorpicker-guide,\n.colorpicker.colorpicker-horizontal .colorpicker-alpha .colorpicker-guide {\n display: block;\n height: 15px;\n background: #ffffff;\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n border: none;\n margin-top: 0; }\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAABCAMAAAAfBfuPAAABLFBMVEXqFBb/ABH/ACL/ADH/AEH/AFD/AGD/AG7/AH7/AI3/AJ3/AKz/ALz/AMr/ANv/AOr/APr2AP/mAP/XAP/HAP+4AP+oAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8BAv8AEP8AH/8AL/8APv8ATv8AXP8Abf8Ae/8Ai/8Amv8Aqv8AuP8Ayf8A1/8A5/8A9/8A//gA/+kA/9kA/8oA/7oA/6wA/5sA/40A/30A/24A/14A/1AA/z8A/zEA/yEA/xEB/wMN/wAd/wAs/wA8/wBK/wBb/wBp/wB5/wCI/wCY/wCm/wC3/wDF/wDV/wDk/wD1/wD/+gD/7AD/3AD/zAD/vgD/rQD/nwD/jgD/gAD/cAD/YgD/UQD/QwD/MgD/JAD/FAD4Eg42qAedAAAAbUlEQVR4XgXAghEDsbxtlrZt27ax/w49ACAYQTGcICmaYTleECVZUTXdMC1Wm93hdLk9Xp8/EAyFI9FYPJFMpTPZXL5QLJUr1Vq90Wy1O91efzAcjSfT2XyxXK03293+cDydL9fb/fF8vT/f3x+LfRNXARMbCAAAAABJRU5ErkJggg==\"); }\n\n.colorpicker.colorpicker-horizontal .colorpicker-alpha {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAKCAQAAADoFTP1AAAB9ElEQVR4XoWTQW4VMRBEu9qWEimL7DhEMp8NF+ASnJJLcAQgE1bcgBUSkYKUuHCrZ9pjeqSU5Yn9LPu7umJQBIIv+k7vIOrtK66L4lmr3pVOrOv3otp619KZ0/KjdNI79L52Uo09FBQWrU0vfe5trezU+hLsoUKd3Repovte+0vbq/7Lj5XbaHECKasR9G4MPlbp+gzZxd6koPEJCkAYC5SjcOTAIIOK90Dja1IfIZ8Z+zAY9jm3b5Ia+MT5sFcqRJrR2AYYA8Kua5BzYRrFPNmD4PQMegGJMOffJJUsWiI3nCHZZjInNdffLWOufzbc3JaboCAVxwmnRHbhLSPwRJ4wU0BRSc6HkECYYVw95nMKgJOcylxrJttE5Ibzf9Xq9GPvP+WX3MiV/MGHfRu/SentRQrfG1GzsIrytdNXucSRKxQNIGHM9YhGFQJcdjNcBZvfJayuYe4Sia1CzwW+19mWOhe37HsxJWKwbu/jluEU15QzAQjAqCEbhMJc78GYV2E0kooHDubUImWkTOhGpgv8PoT8DJG/bzxna4BZ0eOFSOaLADGeSpFsg5AzeaDZIDQQXjZ4y/8ryfzUXBwdELRjTjCNvOeT0rNlrJz90vwy6N9pXXQEluX0inElpPWokSdiLCfiNJJjMKQ8Qsh8GEKQKMo/eiHrNbI9UksAAAAASUVORK5CYII=\"); }\n\n.colorpicker-right:before {\n left: auto;\n right: 6px; }\n\n.colorpicker-right:after {\n left: auto;\n right: 7px; }\n\n.colorpicker-no-arrow:before {\n border-right: 0;\n border-left: 0; }\n\n.colorpicker-no-arrow:after {\n border-right: 0;\n border-left: 0; }\n\n.colorpicker.colorpicker-visible,\n.colorpicker-alpha.colorpicker-visible,\n.colorpicker-saturation.colorpicker-visible,\n.colorpicker-hue.colorpicker-visible,\n.colorpicker-bar.colorpicker-visible {\n display: block; }\n\n.colorpicker.colorpicker-hidden,\n.colorpicker-alpha.colorpicker-hidden,\n.colorpicker-saturation.colorpicker-hidden,\n.colorpicker-hue.colorpicker-hidden,\n.colorpicker-bar.colorpicker-hidden {\n display: none; }\n\n.colorpicker-inline.colorpicker-visible {\n display: inline-block; }\n\n/** EXTENSIONS **/\n.colorpicker-preview {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAQAAAAVxWkcAAABr0lEQVR4Xo2VwU0DQQxF7dmRuNIFlzlSAR3QAaXQQdIBJVABFXDcOVAAd67cjJLR07dkhcSrkZKfb/t7bG88rFo3B5gZPMNycItu2xloGV7MWHzM9zuzFWCkmA0nK6AszCUJDW6+mG6R03ncw5v8EMTEvZ2O3AliYjpslblc0RF9LmZYWxURU6aKytWZYsoWCAe+xwOZp1GsEukGiIkYxcQCHck99+gRgB7JncyIB5SGEhP3Yh5P6JwX+u6AnYot104d8DJT7uH7M9JH6OZbimj0vfMVaYnJIZFJDBW9kHlerL2C6JV4mSt7uuo2N57RxnZ+usQjn0R1jwBJBrNO3evJpVYUWsJ/E3UiXRlv24/7YZ04xmEdWlzcKS+B/eapeyMvFd2k0+hRk/T0AmTW8h69s2sjYMsdPntECiILhAeIMZAeH4QvUwfn6ijC0tTV+fT9ky8jM9nK2g7Ly1VjSpKYq6IvsAm7MtNu1orEqa/K3KNvgMFdhfquPfJmp2dbh0/8Gzb6Y22ViaNr6n5410zXdngVhbu6XqdOtWOuin5hjABGp4a2uotZ71MVCfwDBt2/v37yo6AAAAAASUVORK5CYII=\");\n background-position: 0 100%; }\n\n.colorpicker-preview div {\n position: relative;\n width: 100%;\n height: 100%; }\n\n.colorpicker-swatch {\n cursor: pointer;\n float: left;\n height: 12px;\n width: 12px; }\n\n.colorpicker-swatch + .colorpicker-swatch {\n margin-left: 2px; }\n\n/*# sourceMappingURL=bootstrap-colorpicker.css.map */\n"]} \ No newline at end of file diff --git a/src/main/resources/static/plugins/colorpicker/js/bootstrap-colorpicker.js b/src/main/resources/static/plugins/colorpicker/js/bootstrap-colorpicker.js deleted file mode 100755 index d1e680a62..000000000 --- a/src/main/resources/static/plugins/colorpicker/js/bootstrap-colorpicker.js +++ /dev/null @@ -1,3932 +0,0 @@ -/*! - * Bootstrap Colorpicker - Simple and customizable colorpicker component for Twitter Bootstrap. - * @package bootstrap-colorpicker - * @version v3.0.0-wip - * @license MIT - * @link https://farbelous.github.io/bootstrap-colorpicker/ - * @link https://github.com/farbelous/bootstrap-colorpicker.git - */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(require("jQuery")); - else if(typeof define === 'function' && define.amd) - define("bootstrap-colorpicker", ["jQuery"], factory); - else if(typeof exports === 'object') - exports["bootstrap-colorpicker"] = factory(require("jQuery")); - else - root["bootstrap-colorpicker"] = factory(root["jQuery"]); -})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 3); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { - -module.exports = __WEBPACK_EXTERNAL_MODULE_0__; - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _jquery = __webpack_require__(0); - -var _jquery2 = _interopRequireDefault(_jquery); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * Colorpicker extension class. - */ -var Extension = function () { - /** - * @param {Colorpicker} colorpicker - * @param {Object} options - */ - function Extension(colorpicker) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - _classCallCheck(this, Extension); - - /** - * @type {Colorpicker} - */ - this.colorpicker = colorpicker; - /** - * @type {Object} - */ - this.options = options; - - if (!(this.colorpicker.element && this.colorpicker.element.length)) { - throw new Error('Extension: this.colorpicker.element is not valid'); - } - - this.colorpicker.element.on('colorpickerCreate.colorpicker-ext', _jquery2.default.proxy(this.onCreate, this)); - this.colorpicker.element.on('colorpickerDestroy.colorpicker-ext', _jquery2.default.proxy(this.onDestroy, this)); - this.colorpicker.element.on('colorpickerUpdate.colorpicker-ext', _jquery2.default.proxy(this.onUpdate, this)); - this.colorpicker.element.on('colorpickerChange.colorpicker-ext', _jquery2.default.proxy(this.onChange, this)); - this.colorpicker.element.on('colorpickerInvalid.colorpicker-ext', _jquery2.default.proxy(this.onInvalid, this)); - this.colorpicker.element.on('colorpickerShow.colorpicker-ext', _jquery2.default.proxy(this.onShow, this)); - this.colorpicker.element.on('colorpickerHide.colorpicker-ext', _jquery2.default.proxy(this.onHide, this)); - this.colorpicker.element.on('colorpickerEnable.colorpicker-ext', _jquery2.default.proxy(this.onEnable, this)); - this.colorpicker.element.on('colorpickerDisable.colorpicker-ext', _jquery2.default.proxy(this.onDisable, this)); - } - - /** - * Function called every time a new color needs to be created. - * Return false to skip this resolver and continue with other extensions' ones - * or return anything else to consider the color resolved. - * - * @param {Color|String|*} color - * @return {Color|String|*} - */ - - - _createClass(Extension, [{ - key: 'resolveColor', - value: function resolveColor(color) { - return false; - } - - /** - * @listens colorpickerCreate - * @param {Event} event - */ - - }, { - key: 'onCreate', - value: function onCreate(event) {} - // to be extended - - - /** - * @listens colorpickerDestroy - * @param {Event} event - */ - - }, { - key: 'onDestroy', - value: function onDestroy(event) { - this.colorpicker.element.off('.colorpicker-ext'); - } - - /** - * @listens colorpickerUpdate - * @param {Event} event - */ - - }, { - key: 'onUpdate', - value: function onUpdate(event) {} - // to be extended - - - /** - * @listens colorpickerChange - * @param {Event} event - */ - - }, { - key: 'onChange', - value: function onChange(event) {} - // to be extended - - - /** - * @listens colorpickerInvalid - * @param {Event} event - */ - - }, { - key: 'onInvalid', - value: function onInvalid(event) {} - // to be extended - - - /** - * @listens colorpickerHide - * @param {Event} event - */ - - }, { - key: 'onHide', - value: function onHide(event) {} - // to be extended - - - /** - * @listens colorpickerShow - * @param {Event} event - */ - - }, { - key: 'onShow', - value: function onShow(event) {} - // to be extended - - - /** - * @listens colorpickerDisable - * @param {Event} event - */ - - }, { - key: 'onDisable', - value: function onDisable(event) {} - // to be extended - - - /** - * @listens colorpickerEnable - * @param {Event} event - */ - - }, { - key: 'onEnable', - value: function onEnable(event) { - // to be extended - } - }]); - - return Extension; -}(); - -exports.default = Extension; - -/***/ }), -/* 2 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _Extension2 = __webpack_require__(1); - -var _Extension3 = _interopRequireDefault(_Extension2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var defaults = { - /** - * Key-value pairs defining a color alias and its CSS color representation. - * - * They can also be just an array of values. In that case, no special names are used, only the real colors. - * - * @type {Object|Array} - * @default null - * @example - * { - * 'black': '#000000', - * 'white': '#ffffff', - * 'red': '#FF0000', - * 'default': '#777777', - * 'primary': '#337ab7', - * 'success': '#5cb85c', - * 'info': '#5bc0de', - * 'warning': '#f0ad4e', - * 'danger': '#d9534f' - * } - * - * @example ['#f0ad4e', '#337ab7', '#5cb85c'] - */ - colors: null, - /** - * If true, the when a color swatch is selected the name (alias) will be used as input value, - * otherwise the swatch real color value will be used. - * - * @type {boolean} - * @default true - */ - namesAsValues: true -}; - -var Palette = function (_Extension) { - _inherits(Palette, _Extension); - - _createClass(Palette, [{ - key: 'colors', - - - /** - * @returns {Object|Array} - */ - get: function get() { - return this.options.colors; - } - }]); - - function Palette(colorpicker) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - _classCallCheck(this, Palette); - - var _this = _possibleConstructorReturn(this, (Palette.__proto__ || Object.getPrototypeOf(Palette)).call(this, colorpicker, Object.assign({}, defaults, options))); - - if (!Array.isArray(_this.options.colors) && _typeof(_this.options.colors) !== 'object') { - _this.options.colors = null; - } - return _this; - } - - /** - * @returns {int} - */ - - - _createClass(Palette, [{ - key: 'getLength', - value: function getLength() { - if (!this.options.colors) { - return 0; - } - - if (Array.isArray(this.options.colors)) { - return this.options.colors.length; - } - - if (_typeof(this.options.colors) === 'object') { - return Object.keys(this.options.colors).length; - } - - return 0; - } - }, { - key: 'resolveColor', - value: function resolveColor(color) { - if (this.getLength() <= 0) { - return false; - } - - if (Array.isArray(this.options.colors)) { - if (this.options.colors.indexOf(color) >= 0) { - return color; - } - if (this.options.colors.indexOf(color.toUpperCase()) >= 0) { - return color.toUpperCase(); - } - if (this.options.colors.indexOf(color.toLowerCase()) >= 0) { - return color.toLowerCase(); - } - return false; - } - - if (_typeof(this.options.colors) !== 'object') { - return false; - } - - if (!this.options.namesAsValues) { - return this.getValue(color, false); - } - return this.getName(color, this.getName('#' + color, this.getValue(color, false))); - } - - /** - * Given a color value, returns the corresponding color name or defaultValue. - * - * @param {String} value - * @param {*} defaultValue - * @returns {*} - */ - - }, { - key: 'getName', - value: function getName(value) { - var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - if (!(typeof value === 'string') || !this.options.colors) { - return defaultValue; - } - for (var name in this.options.colors) { - if (!this.options.colors.hasOwnProperty(name)) { - continue; - } - if (this.options.colors[name].toLowerCase() === value.toLowerCase()) { - return name; - } - } - return defaultValue; - } - - /** - * Given a color name, returns the corresponding color value or defaultValue. - * - * @param {String} name - * @param {*} defaultValue - * @returns {*} - */ - - }, { - key: 'getValue', - value: function getValue(name) { - var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - if (!(typeof name === 'string') || !this.options.colors) { - return defaultValue; - } - if (this.options.colors.hasOwnProperty(name)) { - return this.options.colors[name]; - } - return defaultValue; - } - }]); - - return Palette; -}(_Extension3.default); - -exports.default = Palette; - -/***/ }), -/* 3 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _Colorpicker = __webpack_require__(4); - -var _Colorpicker2 = _interopRequireDefault(_Colorpicker); - -var _jquery = __webpack_require__(0); - -var _jquery2 = _interopRequireDefault(_jquery); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var plugin = 'colorpicker'; - -_jquery2.default[plugin] = _Colorpicker2.default; - -_jquery2.default.fn[plugin] = function (option) { - var apiArgs = Array.prototype.slice.call(arguments, 1), - isSingleElement = this.length === 1, - returnValue = null; - - var $jq = this.each(function () { - var $this = (0, _jquery2.default)(this), - inst = $this.data(plugin), - options = (typeof option === 'undefined' ? 'undefined' : _typeof(option)) === 'object' ? option : {}; - - if (!inst) { - inst = new _Colorpicker2.default(this, options); - $this.data(plugin, inst); - } - - if (typeof option === 'string') { - if (option === 'colorpicker') { - returnValue = inst; - } else if (_jquery2.default.isFunction(inst[option])) { - returnValue = inst[option].apply(inst, apiArgs); - } else { - // its a property ? - if (apiArgs.length) { - // set property - inst[option] = apiArgs[0]; - } - returnValue = inst[option]; - } - } else { - returnValue = $this; - } - }); - - return isSingleElement ? returnValue : $jq; -}; - -_jquery2.default.fn[plugin].constructor = _Colorpicker2.default; - -/***/ }), -/* 4 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _Color = __webpack_require__(5); - -var _Color2 = _interopRequireDefault(_Color); - -var _Extension = __webpack_require__(1); - -var _Extension2 = _interopRequireDefault(_Extension); - -var _options = __webpack_require__(7); - -var _options2 = _interopRequireDefault(_options); - -var _extensions = __webpack_require__(8); - -var _extensions2 = _interopRequireDefault(_extensions); - -var _jquery = __webpack_require__(0); - -var _jquery2 = _interopRequireDefault(_jquery); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var colorPickerIdCounter = 0; - -/** - * Colorpicker widget class - */ - -var Colorpicker = function () { - _createClass(Colorpicker, [{ - key: 'color', - - - /** - * color getter - * - * @type {Color|null} - */ - get: function get() { - return this.element.data('color'); - } - - /** - * color setter - * - * @ignore - * @param {Color|null} value - */ - , - set: function set(value) { - this.element.data('color', value); - } - - /** - * @fires colorpickerCreate - * @param {Object|String} element - * @param {Object} options - * @constructor - */ - - }], [{ - key: 'Color', - - /** - * Color class - * - * @static - * @type {Color} - */ - get: function get() { - return _Color2.default; - } - - /** - * Extension class - * - * @static - * @type {Extension} - */ - - }, { - key: 'Extension', - get: function get() { - return _Extension2.default; - } - - /** - * Colorpicker bundled extension classes - * - * @static - * @type {{Extension}} - */ - - }, { - key: 'Extensions', - get: function get() { - return _extensions2.default; - } - }]); - - function Colorpicker(element, options) { - var _this = this; - - _classCallCheck(this, Colorpicker); - - colorPickerIdCounter += 1; - /** - * The colorpicker instance number - * @type {number} - */ - this.id = colorPickerIdCounter; - - /** - * @type {*|jQuery} - */ - this.element = (0, _jquery2.default)(element).addClass('colorpicker-element'); - this.element.attr('data-colorpicker-id', this.id); - - /** - * @type {defaults} - */ - this.options = Object.assign({}, _options2.default, options, this.element.data()); - - /** - * @type {Extension[]} - */ - this.extensions = []; - - if (!Array.isArray(this.options.extensions)) { - this.options.extensions = []; - } - - /** - * @type {*|jQuery} - */ - this.component = this.options.component; - this.component = this.component !== false ? this.element.find(this.component) : false; - if (this.component && this.component.length === 0) { - this.component = false; - } - - /** - * @type {*|jQuery} - */ - this.container = this.options.container === true ? this.element : this.options.container; - this.container = this.container !== false ? (0, _jquery2.default)(this.container) : false; - - /** - * @type {*|String} - * @private - */ - this.currentSlider = null; - - /** - * @type {{left: number, top: number}} - * @private - */ - this.mousePointer = { - left: 0, - top: 0 - }; - - /** - * Latest external event - * - * @type {{name: String, e: *}} - * @private - */ - this.lastEvent = { - name: null, - e: null - }; - - // Is the element an input? Should we search inside for any input? - /** - * @type {*|jQuery} - */ - this.input = this.element.is('input') ? this.element : this.options.input ? this.element.find(this.options.input) : false; - - if (this.input && this.input.length === 0) { - this.input = false; - } - - if (this.options.debug) { - this.options.extensions.push({ name: 'Debugger' }); - } - - // Register extensions - this.options.extensions.forEach(function (ext) { - _this.addExtension(ext.name, _extensions2.default[ext.name.toLowerCase()], ext); - }); - - var colorValue = this.options.color !== false ? this.options.color : this.getValue(); - - this.color = colorValue ? this.createColor(colorValue) : false; - - if (this.options.format === false) { - // If format is false, use the first parsed one from now on - this.options.format = this.color.format; - } - - /** - * @type {boolean} - * @private - */ - this.disabled = false; - - // Setup picker - var $picker = this.picker = (0, _jquery2.default)(this.options.template); - - if (this.options.customClass) { - $picker.addClass(this.options.customClass); - } - if (this.options.inline) { - $picker.addClass('colorpicker-inline colorpicker-visible'); - } else { - $picker.addClass('colorpicker-hidden'); - } - if (this.options.horizontal) { - $picker.addClass('colorpicker-horizontal'); - } - - if ((this.options.useAlpha || this.hasColor() && this.color.hasTransparency()) && this.options.useAlpha !== false) { - this.options.useAlpha = true; - $picker.addClass('colorpicker-with-alpha'); - } - - if (this.options.align === 'right') { - $picker.addClass('colorpicker-right'); - } - if (this.options.inline === true) { - $picker.addClass('colorpicker-no-arrow'); - } - - // Prevent closing the colorpicker when clicking on itself - $picker.on('mousedown.colorpicker touchstart.colorpicker', _jquery2.default.proxy(function (e) { - if (e.target === e.currentTarget) { - e.preventDefault(); - } - }, this)); - - // Bind click/tap events on the sliders - $picker.find('.colorpicker-saturation, .colorpicker-hue, .colorpicker-alpha').on('mousedown.colorpicker touchstart.colorpicker', _jquery2.default.proxy(this._mousedown, this)); - - $picker.appendTo(this.container ? this.container : (0, _jquery2.default)('body')); - - // Bind other events - if (this.hasInput()) { - this.input.on({ - 'keyup.colorpicker': _jquery2.default.proxy(this._keyup, this) - }); - this.input.on({ - 'change.colorpicker': _jquery2.default.proxy(this._change, this) - }); - if (this.component === false) { - this.element.on({ - 'focus.colorpicker': _jquery2.default.proxy(this.show, this) - }); - } - if (this.options.inline === false) { - this.element.on({ - 'focusout.colorpicker': _jquery2.default.proxy(this.hide, this) - }); - } - } - - if (this.component !== false) { - this.component.on({ - 'click.colorpicker': _jquery2.default.proxy(this.show, this) - }); - } - - if (this.hasInput() === false && this.component === false && !this.element.has('.colorpicker')) { - this.element.on({ - 'click.colorpicker': _jquery2.default.proxy(this.show, this) - }); - } - - // for HTML5 input[type='color'] - if (this.hasInput() && this.component !== false && this.input.attr('type') === 'color') { - this.input.on({ - 'click.colorpicker': _jquery2.default.proxy(this.show, this), - 'focus.colorpicker': _jquery2.default.proxy(this.show, this) - }); - } - - // Update if there is a color option - this.update(this.options.color !== false); - - (0, _jquery2.default)(_jquery2.default.proxy(function () { - /** - * (Colorpicker) When the Colorpicker instance has been created and the DOM is ready. - * - * @event colorpickerCreate - */ - this.element.trigger({ - type: 'colorpickerCreate', - colorpicker: this, - color: this.color - }); - }, this)); - } - - /** - * Creates and registers the given extension - * - * @param {String|Extension} extensionName - * @param {Extension} ExtensionClass - * @param {Object} [config] - * @returns {Extension} - */ - - - _createClass(Colorpicker, [{ - key: 'addExtension', - value: function addExtension(extensionName, ExtensionClass) { - var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - var ext = extensionName instanceof _Extension2.default ? extensionName : new ExtensionClass(this, config); - - this.extensions.push(ext); - return ext; - } - - /** - * Destroys the current instance - * - * @fires colorpickerDestroy - */ - - }, { - key: 'destroy', - value: function destroy() { - this.picker.remove(); - this.element.removeData('colorpicker', 'color').off('.colorpicker'); - if (this.hasInput()) { - this.input.off('.colorpicker'); - } - if (this.component !== false) { - this.component.off('.colorpicker'); - } - this.element.removeClass('colorpicker-element'); - - /** - * (Colorpicker) When the instance is destroyed with all events unbound. - * - * @event colorpickerDestroy - */ - this.element.trigger({ - type: 'colorpickerDestroy', - colorpicker: this, - color: this.color - }); - } - - /** - * Returns true if the current color object is an instance of Color, false otherwise. - * @returns {boolean} - */ - - }, { - key: 'hasColor', - value: function hasColor() { - return this.color instanceof _Color2.default; - } - - /** - * @returns {*|String|Color} - */ - - }, { - key: 'toInputColorString', - - - /** - * Formatted color string, with the formatting options applied - * (e.g. useHashPrefix) - * @returns {String} - */ - value: function toInputColorString() { - var str = this.toCssColorString(); - - if (!str) { - return str; - } - - if (this.options.useHashPrefix === false) { - str = str.replace(/^#/g, ''); - } - - return this._resolveColor(str); - } - - /** - * Formatted color string, suitable for CSS - * @returns {String} - */ - - }, { - key: 'toCssColorString', - value: function toCssColorString() { - if (!this.hasColor()) { - return ''; - } - return this.color.toString(this.format); - } - - /** - * If the widget is not inside a container or inline, rearranges its position relative to its element offset. - * - * @param {Event} [e] - * @private - * @returns {boolean} Returns false if the widget is inside a container or inline, true otherwise - */ - - }, { - key: '_reposition', - value: function _reposition(e) { - this.lastEvent.name = 'reposition'; - this.lastEvent.e = e; - - if (this.options.inline !== false || this.options.container) { - return false; - } - var type = this.container && this.container[0] !== window.document.body ? 'position' : 'offset'; - var element = this.component || this.element; - var offset = element[type](); - - if (this.options.align === 'right') { - offset.left -= this.picker.outerWidth() - element.outerWidth(); - } - this.picker.css({ - top: offset.top + element.outerHeight(), - left: offset.left - }); - return true; - } - - /** - * Shows the colorpicker widget if hidden. - * If the input is disabled this call will be ignored. - * - * @fires colorpickerShow - * @param {Event} [e] - * @returns {boolean} True if was hidden and afterwards visible, false if nothing happened. - */ - - }, { - key: 'show', - value: function show(e) { - this.lastEvent.name = 'show'; - this.lastEvent.e = e; - - if (this.isVisible() || this.isDisabled()) { - // Don't show the widget if it's already visible or it is disabled - return false; - } - this.picker.addClass('colorpicker-visible').removeClass('colorpicker-hidden'); - - this._reposition(e); - (0, _jquery2.default)(window).on('resize.colorpicker', _jquery2.default.proxy(this._reposition, this)); - - if (e && (!this.hasInput() || this.input.attr('type') === 'color')) { - if (e.stopPropagation && e.preventDefault) { - e.stopPropagation(); - e.preventDefault(); - } - } - if ((this.component || !this.input) && this.options.inline === false) { - (0, _jquery2.default)(window.document).on({ - 'mousedown.colorpicker': _jquery2.default.proxy(this.hide, this) - }); - } - - /** - * (Colorpicker) When show() is called and the widget can be shown. - * - * @event colorpickerShow - */ - this.element.trigger({ - type: 'colorpickerShow', - colorpicker: this, - color: this.color - }); - - return true; - } - - /** - * Hides the colorpicker widget. - * Hide is prevented when it is triggered by an event whose target element has been clicked/touched. - * - * @fires colorpickerHide - * @param {Event} [e] - * @returns {boolean} True if was visible and afterwards hidden, false if nothing happened. - */ - - }, { - key: 'hide', - value: function hide(e) { - this.lastEvent.name = 'hide'; - this.lastEvent.e = e; - - if (this.isHidden()) { - // Do not trigger if already hidden - return false; - } - if (typeof e !== 'undefined' && e.target) { - // Prevent hide if triggered by an event and an element inside the colorpicker has been clicked/touched - if ((0, _jquery2.default)(e.currentTarget).parents('.colorpicker').length > 0 || (0, _jquery2.default)(e.target).parents('.colorpicker').length > 0) { - return false; - } - } - this.picker.addClass('colorpicker-hidden').removeClass('colorpicker-visible'); - (0, _jquery2.default)(window).off('resize.colorpicker', this._reposition); - (0, _jquery2.default)(window.document).off({ - 'mousedown.colorpicker': this.hide - }); - - /** - * (Colorpicker) When hide() is called and the widget can be hidden. - * - * @event colorpickerHide - */ - this.element.trigger({ - type: 'colorpickerHide', - colorpicker: this, - color: this.color - }); - return true; - } - - /** - * Returns true if the colorpicker element has the colorpicker-visible class and not the colorpicker-hidden one. - * False otherwise. - * - * @returns {boolean} - */ - - }, { - key: 'isVisible', - value: function isVisible() { - return this.picker.hasClass('colorpicker-visible') && !this.picker.hasClass('colorpicker-hidden'); - } - - /** - * Returns true if the colorpicker element has the colorpicker-hidden class and not the colorpicker-visible one. - * False otherwise. - * - * @returns {boolean} - */ - - }, { - key: 'isHidden', - value: function isHidden() { - return this.picker.hasClass('colorpicker-hidden') && !this.picker.hasClass('colorpicker-visible'); - } - - /** - * If the input element is present, it updates the value with the current color object color string. - * If value is set, this method fires a "change" event on the input element. - * - * @fires change - * @private - */ - - }, { - key: '_updateInput', - value: function _updateInput() { - if (this.hasInput()) { - var val = this.toInputColorString(); - - if (val === this.input.prop('value')) { - // No need to set value or trigger any event if nothing changed - return; - } - - this.input.prop('value', val ? val : ''); - - /** - * (Input) Triggered on the input element when a new color is selected. - * - * @event change - */ - this.input.trigger({ - type: 'change', - colorpicker: this, - color: this.color, - value: val - }); - } - } - - /** - * Changes the color adjustment bars using the current color object information. - * @private - */ - - }, { - key: '_updatePicker', - value: function _updatePicker() { - if (!this.hasColor()) { - return; - } - - var vertical = this.options.horizontal === false, - sl = vertical ? this.options.sliders : this.options.slidersHorz; - - var saturationGuide = this.picker.find('.colorpicker-saturation .colorpicker-guide'), - hueGuide = this.picker.find('.colorpicker-hue .colorpicker-guide'), - alphaGuide = this.picker.find('.colorpicker-alpha .colorpicker-guide'); - - var hsva = this.color.hsvaRatio; - - if (hueGuide.length) { - hueGuide.css(vertical ? 'top' : 'left', (vertical ? sl.hue.maxTop : sl.hue.maxLeft) * (1 - hsva.h)); - } - - if (alphaGuide.length) { - alphaGuide.css(vertical ? 'top' : 'left', (vertical ? sl.alpha.maxTop : sl.alpha.maxLeft) * (1 - hsva.a)); - } - - if (saturationGuide.length) { - saturationGuide.css({ - 'top': sl.saturation.maxTop - hsva.v * sl.saturation.maxTop, - 'left': hsva.s * sl.saturation.maxLeft - }); - } - - this.picker.find('.colorpicker-saturation').css('backgroundColor', this.color.getHueOnlyCopy().toHexString()); // we only need hue - - this.picker.find('.colorpicker-alpha').css('backgroundColor', this.color.toString('hex6')); // we don't need alpha - } - - /** - * If the component element is present, its background color is updated - * @private - */ - - }, { - key: '_updateComponent', - value: function _updateComponent() { - if (!this.hasColor()) { - return; - } - - if (this.component !== false) { - var icn = this.component.find('i').eq(0); - - if (icn.length > 0) { - icn.css({ - 'backgroundColor': this.toCssColorString() - }); - } else { - this.component.css({ - 'backgroundColor': this.toCssColorString() - }); - } - } - } - - /** - * @private - * @returns {boolean} - */ - - }, { - key: '_shouldUpdate', - value: function _shouldUpdate() { - return this.hasColor() && this.getValue(false) !== false; - } - - /** - * Updated the component color, the input value and the widget if a color is present. - * - * If force is true, it is updated anyway. - * - * @fires colorpickerUpdate - * @param {boolean} [force] - */ - - }, { - key: 'update', - value: function update() { - var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - if (this._shouldUpdate() || force === true) { - // Update only if the current value (from input or data) is not empty - this._updateComponent(); - - // Do not update input when autoInputFallback is disabled and last event is keyup. - var preventInputUpdate = this.options.autoInputFallback !== true && - // this.isInvalidColor() || // prevent also on invalid color (on create, leaves invalid colors) - this.lastEvent.name === 'keyup'; - - if (!preventInputUpdate) { - this._updateInput(); - } - - this._updatePicker(); - - /** - * (Colorpicker) Fired when the widget is updated. - * - * @event colorpickerUpdate - */ - this.element.trigger({ - type: 'colorpickerUpdate', - colorpicker: this, - color: this.color - }); - } - } - - /** - * Returns the color string from the input value or the 'data-color' attribute of the input or element. - * If empty, it returns the defaultValue parameter. - * - * @param {String|*} [defaultValue] - * @returns {String|*} - */ - - }, { - key: 'getValue', - value: function getValue() { - var defaultValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - - defaultValue = typeof defaultValue === 'undefined' ? this.fallbackColor : defaultValue; - var candidates = [], - val = false; - - if (this.hasInput()) { - candidates.push(this.input.val()); - candidates.push(this.input.data('color')); - } - candidates.push(this.element.data('color')); - - candidates.map(function (item) { - if (item && val === false) { - val = item; - } - }); - - val = val === false ? defaultValue : val; - - if (val instanceof _Color2.default) { - return val.toString(this.format); - } - - return val; - } - - /** - * Sets the color manually - * - * @fires colorpickerChange - * @param {String|Color} val - */ - - }, { - key: 'setValue', - value: function setValue(val) { - if (this.hasColor() && this.color.equals(val)) { - // equal color object - return; - } - - var color = val ? this.createColor(val) : false; - - if (!this.hasColor() && !color) { - // color was empty and the new one too - return; - } - - // force update if color is changed to empty - var shouldForceUpdate = this.hasColor() && !color; - - this.color = color; - - /** - * (Colorpicker) When the color is set programmatically with setValue(). - * - * @event colorpickerChange - */ - this.element.trigger({ - type: 'colorpickerChange', - colorpicker: this, - color: this.color, - value: val - }); - - // force update if color has changed to empty - this.update(shouldForceUpdate); - } - - /** - * Creates a new color using the widget instance options (fallbackColor, format). - * - * @fires colorpickerInvalid - * @param {*} val - * @param {boolean} useFallback - * @returns {Color} - */ - - }, { - key: 'createColor', - value: function createColor(val) { - var useFallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - var color = new _Color2.default(this._resolveColor(val), { format: this.format }); - - if (!color.isValid()) { - var invalidColor = color, - fallback = void 0; - - if (useFallback) { - fallback = this.fallbackColor instanceof _Color2.default && this.fallbackColor.isValid() ? this.fallbackColor : this._resolveColor(this.fallbackColor); - - color = new _Color2.default(fallback, { format: this.format }); - - if (!color.isValid() && useFallback) { - throw new Error('The fallback color is invalid.'); - } - } - - color.previous = invalidColor; - - /** - * (Colorpicker) Fired when the color is invalid and the fallback color is going to be used. - * - * @event colorpickerInvalid - */ - this.element.trigger({ - type: 'colorpickerInvalid', - colorpicker: this, - color: color, - value: val - }); - } - - if (!this.isAlphaEnabled() && color.hasTransparency()) { - // Alpha is disabled - color.setAlpha(1); - } - - if (!this.hasColor()) { - // No previous color, so no need to compare - return color; - } - - var hsva = color.hsvaRatio; - var prevHsva = this.color.hsvaRatio; - - if (hsva.s === 0 && hsva.h === 0 && prevHsva.h !== 0) { - // Hue was set to 0 because saturation was 0, use previous hue, since it was not meant to change... - color.setHueRatio(prevHsva.h); - } - - if (!this.isAlphaEnabled() && color.hasTransparency()) { - // Alpha is disabled - color.setAlpha(1); - } - - return color; - } - - /** - * Checks if there is a color object, that it is valid and it is not a fallback - * @returns {boolean} - */ - - }, { - key: 'isInvalidColor', - value: function isInvalidColor() { - return !this.hasColor() || !this.color.isValid() || !!this.color.previous; - } - - /** - * Returns true if the useAlpha option is exactly true, false otherwise - * @returns {boolean} - */ - - }, { - key: 'isAlphaEnabled', - value: function isAlphaEnabled() { - return this.options.useAlpha === true; - } - - /** - * Resolves a color, in case is not in a standard format (e.g. a custom color alias) - * - * @private - * @param {String|*} color - * @returns {String|*|null} - */ - - }, { - key: '_resolveColor', - value: function _resolveColor(color) { - var extResolvedColor = false; - - _jquery2.default.each(this.extensions, function (name, ext) { - if (extResolvedColor !== false) { - // skip if resolved - return; - } - extResolvedColor = ext.resolveColor(color); - }); - - if (extResolvedColor !== false) { - color = extResolvedColor; - } - - return color; - } - - /** - * Returns true if the widget has an associated input element, false otherwise - * @returns {boolean} - */ - - }, { - key: 'hasInput', - value: function hasInput() { - return this.input !== false; - } - - /** - * Returns true if this instance is disabled - * @returns {boolean} - */ - - }, { - key: 'isDisabled', - value: function isDisabled() { - return this.disabled === true; - } - - /** - * Disables the widget and the input if any - * - * @fires colorpickerDisable - * @returns {boolean} - */ - - }, { - key: 'disable', - value: function disable() { - if (this.hasInput()) { - this.input.prop('disabled', true); - } - this.disabled = true; - - /** - * (Colorpicker) When the widget has been disabled. - * - * @event colorpickerDisable - */ - this.element.trigger({ - type: 'colorpickerDisable', - colorpicker: this, - color: this.color - }); - return true; - } - - /** - * Enables the widget and the input if any - * - * @fires colorpickerEnable - * @returns {boolean} - */ - - }, { - key: 'enable', - value: function enable() { - if (this.hasInput()) { - this.input.prop('disabled', false); - } - this.disabled = false; - - /** - * (Colorpicker) When the widget has been enabled. - * - * @event colorpickerEnable - */ - this.element.trigger({ - type: 'colorpickerEnable', - colorpicker: this, - color: this.color - }); - return true; - } - - /** - * Function triggered when clicking in one of the color adjustment bars - * - * @private - * @fires mousemove - * @param {Event} e - * @returns {boolean} - */ - - }, { - key: '_mousedown', - value: function _mousedown(e) { - this.lastEvent.name = 'mousedown'; - this.lastEvent.e = e; - - if (!e.pageX && !e.pageY && e.originalEvent && e.originalEvent.touches) { - e.pageX = e.originalEvent.touches[0].pageX; - e.pageY = e.originalEvent.touches[0].pageY; - } - e.stopPropagation(); - e.preventDefault(); - - var target = (0, _jquery2.default)(e.target); - - // detect the slider and set the limits and callbacks - var zone = target.closest('div'); - var sl = this.options.horizontal ? this.options.slidersHorz : this.options.sliders; - - if (!zone.is('.colorpicker')) { - if (zone.is('.colorpicker-saturation')) { - this.currentSlider = _jquery2.default.extend({}, sl.saturation); - } else if (zone.is('.colorpicker-hue')) { - this.currentSlider = _jquery2.default.extend({}, sl.hue); - } else if (zone.is('.colorpicker-alpha')) { - this.currentSlider = _jquery2.default.extend({}, sl.alpha); - } else { - return false; - } - var offset = zone.offset(); - // reference to guide's style - - this.currentSlider.guide = zone.find('.colorpicker-guide')[0].style; - this.currentSlider.left = e.pageX - offset.left; - this.currentSlider.top = e.pageY - offset.top; - this.mousePointer = { - left: e.pageX, - top: e.pageY - }; - - /** - * (window.document) Triggered on mousedown for the document object, - * so the color adjustment guide is moved to the clicked position. - * - * @event mousemove - */ - (0, _jquery2.default)(window.document).on({ - 'mousemove.colorpicker': _jquery2.default.proxy(this._mousemove, this), - 'touchmove.colorpicker': _jquery2.default.proxy(this._mousemove, this), - 'mouseup.colorpicker': _jquery2.default.proxy(this._mouseup, this), - 'touchend.colorpicker': _jquery2.default.proxy(this._mouseup, this) - }).trigger('mousemove'); - } - return false; - } - - /** - * Function triggered when dragging a guide inside one of the color adjustment bars. - * - * @private - * @param {Event} e - * @returns {boolean} - */ - - }, { - key: '_mousemove', - value: function _mousemove(e) { - this.lastEvent.name = 'mousemove'; - this.lastEvent.e = e; - - var color = !this.hasColor() ? this.createColor(this.fallbackColor) : this.color.getCopy(); - - if (!e.pageX && !e.pageY && e.originalEvent && e.originalEvent.touches) { - e.pageX = e.originalEvent.touches[0].pageX; - e.pageY = e.originalEvent.touches[0].pageY; - } - e.stopPropagation(); - e.preventDefault(); - var left = Math.max(0, Math.min(this.currentSlider.maxLeft, this.currentSlider.left + ((e.pageX || this.mousePointer.left) - this.mousePointer.left))); - var top = Math.max(0, Math.min(this.currentSlider.maxTop, this.currentSlider.top + ((e.pageY || this.mousePointer.top) - this.mousePointer.top))); - - this.currentSlider.guide.left = left + 'px'; - this.currentSlider.guide.top = top + 'px'; - if (this.currentSlider.callLeft) { - color[this.currentSlider.callLeft].call(color, left / this.currentSlider.maxLeft); - } - if (this.currentSlider.callTop) { - color[this.currentSlider.callTop].call(color, top / this.currentSlider.maxTop); - } - - this.setValue(color); - return false; - } - - /** - * Function triggered when releasing the click in one of the color adjustment bars. - * - * @private - * @param {Event} e - * @returns {boolean} - */ - - }, { - key: '_mouseup', - value: function _mouseup(e) { - this.lastEvent.name = 'mouseup'; - this.lastEvent.e = e; - - e.stopPropagation(); - e.preventDefault(); - (0, _jquery2.default)(window.document).off({ - 'mousemove.colorpicker': this._mousemove, - 'touchmove.colorpicker': this._mousemove, - 'mouseup.colorpicker': this._mouseup, - 'touchend.colorpicker': this._mouseup - }); - return false; - } - - /** - * Function triggered when the input has changed, so the colorpicker gets updated. - * - * @private - * @param {Event} e - * @returns {boolean} - */ - - }, { - key: '_change', - value: function _change(e) { - this.lastEvent.name = 'change'; - this.lastEvent.e = e; - - var val = this.input.val(); - - if (val !== this.toInputColorString()) { - this.setValue(val); - } - } - - /** - * Function triggered after a keyboard key has been released. - * - * @private - * @param {Event} e - * @returns {boolean} - */ - - }, { - key: '_keyup', - value: function _keyup(e) { - this.lastEvent.name = 'keyup'; - this.lastEvent.e = e; - - var val = this.input.val(); - - if (val !== this.toInputColorString()) { - this.setValue(val); - } - } - }, { - key: 'fallbackColor', - get: function get() { - return this.options.fallbackColor ? this.options.fallbackColor : this.hasColor() ? this.color : '#000'; - } - }, { - key: 'format', - get: function get() { - if (this.options.format) { - return this.options.format; - } - - if (this.hasColor() && this.color.hasTransparency() && this.color.format.match(/^hex/)) { - return this.options.enableHex8 ? 'hex8' : this.isAlphaEnabled() ? 'rgba' : 'hex'; - } - - if (this.hasColor()) { - return this.color.format; - } - - return null; - } - }]); - - return Colorpicker; -}(); - -exports.default = Colorpicker; - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _tinycolor2 = __webpack_require__(6); - -var _tinycolor3 = _interopRequireDefault(_tinycolor2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -function unwrapColor(color) { - if (color instanceof _tinycolor3.default) { - return { - r: color._r, - g: color._g, - b: color._b, - a: color._a - }; - } - return color; -} - -/** - * Sanitizes a format string, so it is compatible with tinycolor, - * or returns the same value if it is not a string. - * - * @param {String} format - * @returns {String|*} - * @private - */ -function getCompatibleFormat(format) { - if (format instanceof String || typeof format === 'string') { - return format.replace(/a$/gi, ''); - } - - return format; -} - -/** - * Color manipulation class that extends the tinycolor library class. - */ - -var Color = function (_tinycolor) { - _inherits(Color, _tinycolor); - - _createClass(Color, [{ - key: 'id', - - /** - * Identifier of the color instance. - * - * @type {int} - * @readonly - */ - get: function get() { - return this._tc_id; - } - - /** - * Format of the parsed color. - * - * @type {String} - * @readonly - */ - - }, { - key: 'format', - get: function get() { - return this._format; - } - - /** - * All options of the current instance. - * - * @type {{format: String, gradientType: String}} - * @readonly - */ - - }, { - key: 'options', - get: function get() { - return { - format: this._format, - gradientType: this._gradientType - }; - } - - /** - * @returns {{h, s, v, a}} - */ - - }, { - key: 'hsva', - get: function get() { - return this.toHsv(); - } - - /** - * @returns {{h, s, v, a}} - */ - - }, { - key: 'hsvaRatio', - get: function get() { - var hsv = this.hsva; - - return { - h: hsv.h / 360, - s: hsv.s, - v: hsv.v, - a: hsv.a - }; - } - - /** - * foo bar - * @param {Color|*} color - * @param {{format}} [options] - * @constructor - */ - - }]); - - function Color(color) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { format: null }; - - _classCallCheck(this, Color); - - if (options.format) { - options.format = getCompatibleFormat(options.format); - } - - /** - * @type {Color|*} - */ - var _this = _possibleConstructorReturn(this, (Color.__proto__ || Object.getPrototypeOf(Color)).call(this, unwrapColor(color), options)); - - _this._originalInput = color; // keep real original color - /** - * Hue backup to not lose the information when saturation is 0. - * @type {number} - */ - _this._hbak = _this.hsva.h; - /** - * If set, it contains a reference to a previous color that caused the creation of this one. - * @type {Color} - */ - _this.previous = null; - return _this; - } - - /** - * Compares a color object with this one and returns true if it is equal or false if not. - * - * @param {Color} color - * @returns {boolean} - */ - - - _createClass(Color, [{ - key: 'equals', - value: function equals(color) { - if (!(color instanceof _tinycolor3.default)) { - return false; - } - return this._r === color._r && this._g === color._g && this._b === color._b && this._a === color._a && this._roundA === color._roundA && this._format === color._format && this._gradientType === color._gradientType && this._ok === color._ok; - } - - /** - * Imports all variables of the given color to this instance, excepting `_tc_id`. - * @param {Color} color - */ - - }, { - key: 'importColor', - value: function importColor(color) { - if (!(color instanceof _tinycolor3.default)) { - throw new Error('Color.importColor: The color argument is not an instance of tinycolor.'); - } - this._originalInput = color._originalInput; - this._r = color._r; - this._g = color._g; - this._b = color._b; - this._a = color._a; - this._roundA = color._roundA; - this._format = getCompatibleFormat(color._format); - this._gradientType = color._gradientType; - this._ok = color._ok; - // omit .previous and ._tc_id import - } - - /** - * Imports the _r, _g, _b, _a, _hbak and _ok variables of the given color to this instance. - * @param {Color} color - */ - - }, { - key: 'importRgb', - value: function importRgb(color) { - if (!color instanceof Color) { - throw new Error('Color.importColor: The color argument is not an instance of tinycolor.'); - } - this._r = color._r; - this._g = color._g; - this._b = color._b; - this._a = color._a; - this._ok = color._ok; - this._hbak = color._hbak; - } - - /** - * @param {{h,s,v,a}} hsv - */ - - }, { - key: 'importHsv', - value: function importHsv(hsv) { - this._hbak = hsv.h; - this.importRgb(new Color(hsv, this.options)); - } - - /** - * @returns {Color} - */ - - }, { - key: 'getCopy', - value: function getCopy() { - return new Color(this.hsva, this.options); - } - - /** - * @returns {Color} - */ - - }, { - key: 'getHueOnlyCopy', - value: function getHueOnlyCopy() { - return new Color({ h: this._hbak ? this._hbak : this.hsva.h, s: 100, v: 100 }, this.options); - } - - /** - * @returns {Color} - */ - - }, { - key: 'getOpaqueCopy', - value: function getOpaqueCopy() { - return new Color(Object.assign({}, this.hsva, { a: 1 }), this.options); - } - - /** - * @param {number} h Degrees from 0 to 360 - */ - - }, { - key: 'setHue', - value: function setHue(h) { - this.importHsv(Object.assign({}, this.hsva, { h: h })); - } - - /** - * @param {number} s Percent from 0 o 100 - */ - - }, { - key: 'setSaturation', - value: function setSaturation(s) { - this.importHsv(Object.assign({}, this.hsva, { s: s })); - } - - /** - * @param {number} v Percent from 0 o 100 - */ - - }, { - key: 'setBrightness', - value: function setBrightness(v) { - this.importHsv(Object.assign({}, this.hsva, { v: v })); - } - - /** - * @param {number} h Ratio from 0.0 to 1.0 - */ - - }, { - key: 'setHueRatio', - value: function setHueRatio(h) { - if (h === 0) { - return; - } - this.setHue((1 - h) * 360); - } - - /** - * @param {number} s Ratio from 0.0 to 1.0 - */ - - }, { - key: 'setSaturationRatio', - value: function setSaturationRatio(s) { - this.setSaturation(s); - } - - /** - * @param {number} v Ratio from 0.0 to 1.0 - */ - - }, { - key: 'setBrightnessRatio', - value: function setBrightnessRatio(v) { - this.setBrightness(1 - v); - } - - /** - * @param {number} a Ratio from 0.0 to 1.0 - */ - - }, { - key: 'setAlphaRatio', - value: function setAlphaRatio(a) { - this.setAlpha(1 - a); - } - - /** - * @returns {boolean} - */ - - }, { - key: 'isTransparent', - value: function isTransparent() { - return this._a === 0; - } - - /** - * @returns {boolean} - */ - - }, { - key: 'hasTransparency', - value: function hasTransparency() { - return this._a !== 1; - } - - /** - * @param {string|null} [format] One of "rgb", "prgb", "hex"/"hex6", "hex3", "hex8", "hsl", "hsv"/"hsb", "name" - * @returns {String} - */ - - }, { - key: 'toString', - value: function toString() { - var format = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - - format = format ? getCompatibleFormat(format) : this.format; - - var colorStr = _get(Color.prototype.__proto__ || Object.getPrototypeOf(Color.prototype), 'toString', this).call(this, format); - - if (colorStr && colorStr.match(/^#[0-9a-f]{3,8}$/i)) { - // Support transparent for hex formats - if (this.isTransparent() && this._r === 0 && this._g === 0 && this._b === 0) { - return 'transparent'; - } - } - - return colorStr; - } - }]); - - return Color; -}(_tinycolor3.default); - -exports.default = Color; - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_RESULT__;// TinyColor v1.4.1 -// https://github.com/bgrins/TinyColor -// Brian Grinstead, MIT License - -(function(Math) { - -var trimLeft = /^\s+/, - trimRight = /\s+$/, - tinyCounter = 0, - mathRound = Math.round, - mathMin = Math.min, - mathMax = Math.max, - mathRandom = Math.random; - -function tinycolor (color, opts) { - - color = (color) ? color : ''; - opts = opts || { }; - - // If input is already a tinycolor, return itself - if (color instanceof tinycolor) { - return color; - } - // If we are called as a function, call using new instead - if (!(this instanceof tinycolor)) { - return new tinycolor(color, opts); - } - - var rgb = inputToRGB(color); - this._originalInput = color, - this._r = rgb.r, - this._g = rgb.g, - this._b = rgb.b, - this._a = rgb.a, - this._roundA = mathRound(100*this._a) / 100, - this._format = opts.format || rgb.format; - this._gradientType = opts.gradientType; - - // Don't let the range of [0,255] come back in [0,1]. - // Potentially lose a little bit of precision here, but will fix issues where - // .5 gets interpreted as half of the total, instead of half of 1 - // If it was supposed to be 128, this was already taken care of by `inputToRgb` - if (this._r < 1) { this._r = mathRound(this._r); } - if (this._g < 1) { this._g = mathRound(this._g); } - if (this._b < 1) { this._b = mathRound(this._b); } - - this._ok = rgb.ok; - this._tc_id = tinyCounter++; -} - -tinycolor.prototype = { - isDark: function() { - return this.getBrightness() < 128; - }, - isLight: function() { - return !this.isDark(); - }, - isValid: function() { - return this._ok; - }, - getOriginalInput: function() { - return this._originalInput; - }, - getFormat: function() { - return this._format; - }, - getAlpha: function() { - return this._a; - }, - getBrightness: function() { - //http://www.w3.org/TR/AERT#color-contrast - var rgb = this.toRgb(); - return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000; - }, - getLuminance: function() { - //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef - var rgb = this.toRgb(); - var RsRGB, GsRGB, BsRGB, R, G, B; - RsRGB = rgb.r/255; - GsRGB = rgb.g/255; - BsRGB = rgb.b/255; - - if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);} - if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);} - if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);} - return (0.2126 * R) + (0.7152 * G) + (0.0722 * B); - }, - setAlpha: function(value) { - this._a = boundAlpha(value); - this._roundA = mathRound(100*this._a) / 100; - return this; - }, - toHsv: function() { - var hsv = rgbToHsv(this._r, this._g, this._b); - return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a }; - }, - toHsvString: function() { - var hsv = rgbToHsv(this._r, this._g, this._b); - var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100); - return (this._a == 1) ? - "hsv(" + h + ", " + s + "%, " + v + "%)" : - "hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")"; - }, - toHsl: function() { - var hsl = rgbToHsl(this._r, this._g, this._b); - return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a }; - }, - toHslString: function() { - var hsl = rgbToHsl(this._r, this._g, this._b); - var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100); - return (this._a == 1) ? - "hsl(" + h + ", " + s + "%, " + l + "%)" : - "hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")"; - }, - toHex: function(allow3Char) { - return rgbToHex(this._r, this._g, this._b, allow3Char); - }, - toHexString: function(allow3Char) { - return '#' + this.toHex(allow3Char); - }, - toHex8: function(allow4Char) { - return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char); - }, - toHex8String: function(allow4Char) { - return '#' + this.toHex8(allow4Char); - }, - toRgb: function() { - return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a }; - }, - toRgbString: function() { - return (this._a == 1) ? - "rgb(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" : - "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")"; - }, - toPercentageRgb: function() { - return { r: mathRound(bound01(this._r, 255) * 100) + "%", g: mathRound(bound01(this._g, 255) * 100) + "%", b: mathRound(bound01(this._b, 255) * 100) + "%", a: this._a }; - }, - toPercentageRgbString: function() { - return (this._a == 1) ? - "rgb(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" : - "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")"; - }, - toName: function() { - if (this._a === 0) { - return "transparent"; - } - - if (this._a < 1) { - return false; - } - - return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false; - }, - toFilter: function(secondColor) { - var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a); - var secondHex8String = hex8String; - var gradientType = this._gradientType ? "GradientType = 1, " : ""; - - if (secondColor) { - var s = tinycolor(secondColor); - secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a); - } - - return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")"; - }, - toString: function(format) { - var formatSet = !!format; - format = format || this._format; - - var formattedString = false; - var hasAlpha = this._a < 1 && this._a >= 0; - var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "hex4" || format === "hex8" || format === "name"); - - if (needsAlphaFormat) { - // Special case for "transparent", all other non-alpha formats - // will return rgba when there is transparency. - if (format === "name" && this._a === 0) { - return this.toName(); - } - return this.toRgbString(); - } - if (format === "rgb") { - formattedString = this.toRgbString(); - } - if (format === "prgb") { - formattedString = this.toPercentageRgbString(); - } - if (format === "hex" || format === "hex6") { - formattedString = this.toHexString(); - } - if (format === "hex3") { - formattedString = this.toHexString(true); - } - if (format === "hex4") { - formattedString = this.toHex8String(true); - } - if (format === "hex8") { - formattedString = this.toHex8String(); - } - if (format === "name") { - formattedString = this.toName(); - } - if (format === "hsl") { - formattedString = this.toHslString(); - } - if (format === "hsv") { - formattedString = this.toHsvString(); - } - - return formattedString || this.toHexString(); - }, - clone: function() { - return tinycolor(this.toString()); - }, - - _applyModification: function(fn, args) { - var color = fn.apply(null, [this].concat([].slice.call(args))); - this._r = color._r; - this._g = color._g; - this._b = color._b; - this.setAlpha(color._a); - return this; - }, - lighten: function() { - return this._applyModification(lighten, arguments); - }, - brighten: function() { - return this._applyModification(brighten, arguments); - }, - darken: function() { - return this._applyModification(darken, arguments); - }, - desaturate: function() { - return this._applyModification(desaturate, arguments); - }, - saturate: function() { - return this._applyModification(saturate, arguments); - }, - greyscale: function() { - return this._applyModification(greyscale, arguments); - }, - spin: function() { - return this._applyModification(spin, arguments); - }, - - _applyCombination: function(fn, args) { - return fn.apply(null, [this].concat([].slice.call(args))); - }, - analogous: function() { - return this._applyCombination(analogous, arguments); - }, - complement: function() { - return this._applyCombination(complement, arguments); - }, - monochromatic: function() { - return this._applyCombination(monochromatic, arguments); - }, - splitcomplement: function() { - return this._applyCombination(splitcomplement, arguments); - }, - triad: function() { - return this._applyCombination(triad, arguments); - }, - tetrad: function() { - return this._applyCombination(tetrad, arguments); - } -}; - -// If input is an object, force 1 into "1.0" to handle ratios properly -// String input requires "1.0" as input, so 1 will be treated as 1 -tinycolor.fromRatio = function(color, opts) { - if (typeof color == "object") { - var newColor = {}; - for (var i in color) { - if (color.hasOwnProperty(i)) { - if (i === "a") { - newColor[i] = color[i]; - } - else { - newColor[i] = convertToPercentage(color[i]); - } - } - } - color = newColor; - } - - return tinycolor(color, opts); -}; - -// Given a string or object, convert that input to RGB -// Possible string inputs: -// -// "red" -// "#f00" or "f00" -// "#ff0000" or "ff0000" -// "#ff000000" or "ff000000" -// "rgb 255 0 0" or "rgb (255, 0, 0)" -// "rgb 1.0 0 0" or "rgb (1, 0, 0)" -// "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1" -// "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1" -// "hsl(0, 100%, 50%)" or "hsl 0 100% 50%" -// "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1" -// "hsv(0, 100%, 100%)" or "hsv 0 100% 100%" -// -function inputToRGB(color) { - - var rgb = { r: 0, g: 0, b: 0 }; - var a = 1; - var s = null; - var v = null; - var l = null; - var ok = false; - var format = false; - - if (typeof color == "string") { - color = stringInputToObject(color); - } - - if (typeof color == "object") { - if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) { - rgb = rgbToRgb(color.r, color.g, color.b); - ok = true; - format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; - } - else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) { - s = convertToPercentage(color.s); - v = convertToPercentage(color.v); - rgb = hsvToRgb(color.h, s, v); - ok = true; - format = "hsv"; - } - else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) { - s = convertToPercentage(color.s); - l = convertToPercentage(color.l); - rgb = hslToRgb(color.h, s, l); - ok = true; - format = "hsl"; - } - - if (color.hasOwnProperty("a")) { - a = color.a; - } - } - - a = boundAlpha(a); - - return { - ok: ok, - format: color.format || format, - r: mathMin(255, mathMax(rgb.r, 0)), - g: mathMin(255, mathMax(rgb.g, 0)), - b: mathMin(255, mathMax(rgb.b, 0)), - a: a - }; -} - - -// Conversion Functions -// -------------------- - -// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from: -// - -// `rgbToRgb` -// Handle bounds / percentage checking to conform to CSS color spec -// -// *Assumes:* r, g, b in [0, 255] or [0, 1] -// *Returns:* { r, g, b } in [0, 255] -function rgbToRgb(r, g, b){ - return { - r: bound01(r, 255) * 255, - g: bound01(g, 255) * 255, - b: bound01(b, 255) * 255 - }; -} - -// `rgbToHsl` -// Converts an RGB color value to HSL. -// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1] -// *Returns:* { h, s, l } in [0,1] -function rgbToHsl(r, g, b) { - - r = bound01(r, 255); - g = bound01(g, 255); - b = bound01(b, 255); - - var max = mathMax(r, g, b), min = mathMin(r, g, b); - var h, s, l = (max + min) / 2; - - if(max == min) { - h = s = 0; // achromatic - } - else { - var d = max - min; - s = l > 0.5 ? d / (2 - max - min) : d / (max + min); - switch(max) { - case r: h = (g - b) / d + (g < b ? 6 : 0); break; - case g: h = (b - r) / d + 2; break; - case b: h = (r - g) / d + 4; break; - } - - h /= 6; - } - - return { h: h, s: s, l: l }; -} - -// `hslToRgb` -// Converts an HSL color value to RGB. -// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100] -// *Returns:* { r, g, b } in the set [0, 255] -function hslToRgb(h, s, l) { - var r, g, b; - - h = bound01(h, 360); - s = bound01(s, 100); - l = bound01(l, 100); - - function hue2rgb(p, q, t) { - if(t < 0) t += 1; - if(t > 1) t -= 1; - if(t < 1/6) return p + (q - p) * 6 * t; - if(t < 1/2) return q; - if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; - return p; - } - - if(s === 0) { - r = g = b = l; // achromatic - } - else { - var q = l < 0.5 ? l * (1 + s) : l + s - l * s; - var p = 2 * l - q; - r = hue2rgb(p, q, h + 1/3); - g = hue2rgb(p, q, h); - b = hue2rgb(p, q, h - 1/3); - } - - return { r: r * 255, g: g * 255, b: b * 255 }; -} - -// `rgbToHsv` -// Converts an RGB color value to HSV -// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1] -// *Returns:* { h, s, v } in [0,1] -function rgbToHsv(r, g, b) { - - r = bound01(r, 255); - g = bound01(g, 255); - b = bound01(b, 255); - - var max = mathMax(r, g, b), min = mathMin(r, g, b); - var h, s, v = max; - - var d = max - min; - s = max === 0 ? 0 : d / max; - - if(max == min) { - h = 0; // achromatic - } - else { - switch(max) { - case r: h = (g - b) / d + (g < b ? 6 : 0); break; - case g: h = (b - r) / d + 2; break; - case b: h = (r - g) / d + 4; break; - } - h /= 6; - } - return { h: h, s: s, v: v }; -} - -// `hsvToRgb` -// Converts an HSV color value to RGB. -// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100] -// *Returns:* { r, g, b } in the set [0, 255] - function hsvToRgb(h, s, v) { - - h = bound01(h, 360) * 6; - s = bound01(s, 100); - v = bound01(v, 100); - - var i = Math.floor(h), - f = h - i, - p = v * (1 - s), - q = v * (1 - f * s), - t = v * (1 - (1 - f) * s), - mod = i % 6, - r = [v, q, p, p, t, v][mod], - g = [t, v, v, q, p, p][mod], - b = [p, p, t, v, v, q][mod]; - - return { r: r * 255, g: g * 255, b: b * 255 }; -} - -// `rgbToHex` -// Converts an RGB color to hex -// Assumes r, g, and b are contained in the set [0, 255] -// Returns a 3 or 6 character hex -function rgbToHex(r, g, b, allow3Char) { - - var hex = [ - pad2(mathRound(r).toString(16)), - pad2(mathRound(g).toString(16)), - pad2(mathRound(b).toString(16)) - ]; - - // Return a 3 character hex if possible - if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) { - return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); - } - - return hex.join(""); -} - -// `rgbaToHex` -// Converts an RGBA color plus alpha transparency to hex -// Assumes r, g, b are contained in the set [0, 255] and -// a in [0, 1]. Returns a 4 or 8 character rgba hex -function rgbaToHex(r, g, b, a, allow4Char) { - - var hex = [ - pad2(mathRound(r).toString(16)), - pad2(mathRound(g).toString(16)), - pad2(mathRound(b).toString(16)), - pad2(convertDecimalToHex(a)) - ]; - - // Return a 4 character hex if possible - if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) { - return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0); - } - - return hex.join(""); -} - -// `rgbaToArgbHex` -// Converts an RGBA color to an ARGB Hex8 string -// Rarely used, but required for "toFilter()" -function rgbaToArgbHex(r, g, b, a) { - - var hex = [ - pad2(convertDecimalToHex(a)), - pad2(mathRound(r).toString(16)), - pad2(mathRound(g).toString(16)), - pad2(mathRound(b).toString(16)) - ]; - - return hex.join(""); -} - -// `equals` -// Can be called with any tinycolor input -tinycolor.equals = function (color1, color2) { - if (!color1 || !color2) { return false; } - return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString(); -}; - -tinycolor.random = function() { - return tinycolor.fromRatio({ - r: mathRandom(), - g: mathRandom(), - b: mathRandom() - }); -}; - - -// Modification Functions -// ---------------------- -// Thanks to less.js for some of the basics here -// - -function desaturate(color, amount) { - amount = (amount === 0) ? 0 : (amount || 10); - var hsl = tinycolor(color).toHsl(); - hsl.s -= amount / 100; - hsl.s = clamp01(hsl.s); - return tinycolor(hsl); -} - -function saturate(color, amount) { - amount = (amount === 0) ? 0 : (amount || 10); - var hsl = tinycolor(color).toHsl(); - hsl.s += amount / 100; - hsl.s = clamp01(hsl.s); - return tinycolor(hsl); -} - -function greyscale(color) { - return tinycolor(color).desaturate(100); -} - -function lighten (color, amount) { - amount = (amount === 0) ? 0 : (amount || 10); - var hsl = tinycolor(color).toHsl(); - hsl.l += amount / 100; - hsl.l = clamp01(hsl.l); - return tinycolor(hsl); -} - -function brighten(color, amount) { - amount = (amount === 0) ? 0 : (amount || 10); - var rgb = tinycolor(color).toRgb(); - rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100)))); - rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100)))); - rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100)))); - return tinycolor(rgb); -} - -function darken (color, amount) { - amount = (amount === 0) ? 0 : (amount || 10); - var hsl = tinycolor(color).toHsl(); - hsl.l -= amount / 100; - hsl.l = clamp01(hsl.l); - return tinycolor(hsl); -} - -// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue. -// Values outside of this range will be wrapped into this range. -function spin(color, amount) { - var hsl = tinycolor(color).toHsl(); - var hue = (hsl.h + amount) % 360; - hsl.h = hue < 0 ? 360 + hue : hue; - return tinycolor(hsl); -} - -// Combination Functions -// --------------------- -// Thanks to jQuery xColor for some of the ideas behind these -// - -function complement(color) { - var hsl = tinycolor(color).toHsl(); - hsl.h = (hsl.h + 180) % 360; - return tinycolor(hsl); -} - -function triad(color) { - var hsl = tinycolor(color).toHsl(); - var h = hsl.h; - return [ - tinycolor(color), - tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }), - tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l }) - ]; -} - -function tetrad(color) { - var hsl = tinycolor(color).toHsl(); - var h = hsl.h; - return [ - tinycolor(color), - tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }), - tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }), - tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l }) - ]; -} - -function splitcomplement(color) { - var hsl = tinycolor(color).toHsl(); - var h = hsl.h; - return [ - tinycolor(color), - tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}), - tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l}) - ]; -} - -function analogous(color, results, slices) { - results = results || 6; - slices = slices || 30; - - var hsl = tinycolor(color).toHsl(); - var part = 360 / slices; - var ret = [tinycolor(color)]; - - for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) { - hsl.h = (hsl.h + part) % 360; - ret.push(tinycolor(hsl)); - } - return ret; -} - -function monochromatic(color, results) { - results = results || 6; - var hsv = tinycolor(color).toHsv(); - var h = hsv.h, s = hsv.s, v = hsv.v; - var ret = []; - var modification = 1 / results; - - while (results--) { - ret.push(tinycolor({ h: h, s: s, v: v})); - v = (v + modification) % 1; - } - - return ret; -} - -// Utility Functions -// --------------------- - -tinycolor.mix = function(color1, color2, amount) { - amount = (amount === 0) ? 0 : (amount || 50); - - var rgb1 = tinycolor(color1).toRgb(); - var rgb2 = tinycolor(color2).toRgb(); - - var p = amount / 100; - - var rgba = { - r: ((rgb2.r - rgb1.r) * p) + rgb1.r, - g: ((rgb2.g - rgb1.g) * p) + rgb1.g, - b: ((rgb2.b - rgb1.b) * p) + rgb1.b, - a: ((rgb2.a - rgb1.a) * p) + rgb1.a - }; - - return tinycolor(rgba); -}; - - -// Readability Functions -// --------------------- -// false -// tinycolor.isReadable("#000", "#111",{level:"AA",size:"large"}) => false -tinycolor.isReadable = function(color1, color2, wcag2) { - var readability = tinycolor.readability(color1, color2); - var wcag2Parms, out; - - out = false; - - wcag2Parms = validateWCAG2Parms(wcag2); - switch (wcag2Parms.level + wcag2Parms.size) { - case "AAsmall": - case "AAAlarge": - out = readability >= 4.5; - break; - case "AAlarge": - out = readability >= 3; - break; - case "AAAsmall": - out = readability >= 7; - break; - } - return out; - -}; - -// `mostReadable` -// Given a base color and a list of possible foreground or background -// colors for that base, returns the most readable color. -// Optionally returns Black or White if the most readable color is unreadable. -// *Example* -// tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:false}).toHexString(); // "#112255" -// tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:true}).toHexString(); // "#ffffff" -// tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"large"}).toHexString(); // "#faf3f3" -// tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"small"}).toHexString(); // "#ffffff" -tinycolor.mostReadable = function(baseColor, colorList, args) { - var bestColor = null; - var bestScore = 0; - var readability; - var includeFallbackColors, level, size ; - args = args || {}; - includeFallbackColors = args.includeFallbackColors ; - level = args.level; - size = args.size; - - for (var i= 0; i < colorList.length ; i++) { - readability = tinycolor.readability(baseColor, colorList[i]); - if (readability > bestScore) { - bestScore = readability; - bestColor = tinycolor(colorList[i]); - } - } - - if (tinycolor.isReadable(baseColor, bestColor, {"level":level,"size":size}) || !includeFallbackColors) { - return bestColor; - } - else { - args.includeFallbackColors=false; - return tinycolor.mostReadable(baseColor,["#fff", "#000"],args); - } -}; - - -// Big List of Colors -// ------------------ -// -var names = tinycolor.names = { - aliceblue: "f0f8ff", - antiquewhite: "faebd7", - aqua: "0ff", - aquamarine: "7fffd4", - azure: "f0ffff", - beige: "f5f5dc", - bisque: "ffe4c4", - black: "000", - blanchedalmond: "ffebcd", - blue: "00f", - blueviolet: "8a2be2", - brown: "a52a2a", - burlywood: "deb887", - burntsienna: "ea7e5d", - cadetblue: "5f9ea0", - chartreuse: "7fff00", - chocolate: "d2691e", - coral: "ff7f50", - cornflowerblue: "6495ed", - cornsilk: "fff8dc", - crimson: "dc143c", - cyan: "0ff", - darkblue: "00008b", - darkcyan: "008b8b", - darkgoldenrod: "b8860b", - darkgray: "a9a9a9", - darkgreen: "006400", - darkgrey: "a9a9a9", - darkkhaki: "bdb76b", - darkmagenta: "8b008b", - darkolivegreen: "556b2f", - darkorange: "ff8c00", - darkorchid: "9932cc", - darkred: "8b0000", - darksalmon: "e9967a", - darkseagreen: "8fbc8f", - darkslateblue: "483d8b", - darkslategray: "2f4f4f", - darkslategrey: "2f4f4f", - darkturquoise: "00ced1", - darkviolet: "9400d3", - deeppink: "ff1493", - deepskyblue: "00bfff", - dimgray: "696969", - dimgrey: "696969", - dodgerblue: "1e90ff", - firebrick: "b22222", - floralwhite: "fffaf0", - forestgreen: "228b22", - fuchsia: "f0f", - gainsboro: "dcdcdc", - ghostwhite: "f8f8ff", - gold: "ffd700", - goldenrod: "daa520", - gray: "808080", - green: "008000", - greenyellow: "adff2f", - grey: "808080", - honeydew: "f0fff0", - hotpink: "ff69b4", - indianred: "cd5c5c", - indigo: "4b0082", - ivory: "fffff0", - khaki: "f0e68c", - lavender: "e6e6fa", - lavenderblush: "fff0f5", - lawngreen: "7cfc00", - lemonchiffon: "fffacd", - lightblue: "add8e6", - lightcoral: "f08080", - lightcyan: "e0ffff", - lightgoldenrodyellow: "fafad2", - lightgray: "d3d3d3", - lightgreen: "90ee90", - lightgrey: "d3d3d3", - lightpink: "ffb6c1", - lightsalmon: "ffa07a", - lightseagreen: "20b2aa", - lightskyblue: "87cefa", - lightslategray: "789", - lightslategrey: "789", - lightsteelblue: "b0c4de", - lightyellow: "ffffe0", - lime: "0f0", - limegreen: "32cd32", - linen: "faf0e6", - magenta: "f0f", - maroon: "800000", - mediumaquamarine: "66cdaa", - mediumblue: "0000cd", - mediumorchid: "ba55d3", - mediumpurple: "9370db", - mediumseagreen: "3cb371", - mediumslateblue: "7b68ee", - mediumspringgreen: "00fa9a", - mediumturquoise: "48d1cc", - mediumvioletred: "c71585", - midnightblue: "191970", - mintcream: "f5fffa", - mistyrose: "ffe4e1", - moccasin: "ffe4b5", - navajowhite: "ffdead", - navy: "000080", - oldlace: "fdf5e6", - olive: "808000", - olivedrab: "6b8e23", - orange: "ffa500", - orangered: "ff4500", - orchid: "da70d6", - palegoldenrod: "eee8aa", - palegreen: "98fb98", - paleturquoise: "afeeee", - palevioletred: "db7093", - papayawhip: "ffefd5", - peachpuff: "ffdab9", - peru: "cd853f", - pink: "ffc0cb", - plum: "dda0dd", - powderblue: "b0e0e6", - purple: "800080", - rebeccapurple: "663399", - red: "f00", - rosybrown: "bc8f8f", - royalblue: "4169e1", - saddlebrown: "8b4513", - salmon: "fa8072", - sandybrown: "f4a460", - seagreen: "2e8b57", - seashell: "fff5ee", - sienna: "a0522d", - silver: "c0c0c0", - skyblue: "87ceeb", - slateblue: "6a5acd", - slategray: "708090", - slategrey: "708090", - snow: "fffafa", - springgreen: "00ff7f", - steelblue: "4682b4", - tan: "d2b48c", - teal: "008080", - thistle: "d8bfd8", - tomato: "ff6347", - turquoise: "40e0d0", - violet: "ee82ee", - wheat: "f5deb3", - white: "fff", - whitesmoke: "f5f5f5", - yellow: "ff0", - yellowgreen: "9acd32" -}; - -// Make it easy to access colors via `hexNames[hex]` -var hexNames = tinycolor.hexNames = flip(names); - - -// Utilities -// --------- - -// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }` -function flip(o) { - var flipped = { }; - for (var i in o) { - if (o.hasOwnProperty(i)) { - flipped[o[i]] = i; - } - } - return flipped; -} - -// Return a valid alpha value [0,1] with all invalid values being set to 1 -function boundAlpha(a) { - a = parseFloat(a); - - if (isNaN(a) || a < 0 || a > 1) { - a = 1; - } - - return a; -} - -// Take input from [0, n] and return it as [0, 1] -function bound01(n, max) { - if (isOnePointZero(n)) { n = "100%"; } - - var processPercent = isPercentage(n); - n = mathMin(max, mathMax(0, parseFloat(n))); - - // Automatically convert percentage into number - if (processPercent) { - n = parseInt(n * max, 10) / 100; - } - - // Handle floating point rounding errors - if ((Math.abs(n - max) < 0.000001)) { - return 1; - } - - // Convert into [0, 1] range if it isn't already - return (n % max) / parseFloat(max); -} - -// Force a number between 0 and 1 -function clamp01(val) { - return mathMin(1, mathMax(0, val)); -} - -// Parse a base-16 hex value into a base-10 integer -function parseIntFromHex(val) { - return parseInt(val, 16); -} - -// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1 -// -function isOnePointZero(n) { - return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1; -} - -// Check to see if string passed in is a percentage -function isPercentage(n) { - return typeof n === "string" && n.indexOf('%') != -1; -} - -// Force a hex value to have 2 characters -function pad2(c) { - return c.length == 1 ? '0' + c : '' + c; -} - -// Replace a decimal with it's percentage value -function convertToPercentage(n) { - if (n <= 1) { - n = (n * 100) + "%"; - } - - return n; -} - -// Converts a decimal to a hex value -function convertDecimalToHex(d) { - return Math.round(parseFloat(d) * 255).toString(16); -} -// Converts a hex value to a decimal -function convertHexToDecimal(h) { - return (parseIntFromHex(h) / 255); -} - -var matchers = (function() { - - // - var CSS_INTEGER = "[-\\+]?\\d+%?"; - - // - var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; - - // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome. - var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")"; - - // Actual matching. - // Parentheses and commas are optional, but not required. - // Whitespace can take the place of commas or opening paren - var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; - var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; - - return { - CSS_UNIT: new RegExp(CSS_UNIT), - rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), - rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), - hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), - hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), - hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), - hsva: new RegExp("hsva" + PERMISSIVE_MATCH4), - hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, - hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, - hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, - hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ - }; -})(); - -// `isValidCSSUnit` -// Take in a single string / number and check to see if it looks like a CSS unit -// (see `matchers` above for definition). -function isValidCSSUnit(color) { - return !!matchers.CSS_UNIT.exec(color); -} - -// `stringInputToObject` -// Permissive string parsing. Take in a number of formats, and output an object -// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}` -function stringInputToObject(color) { - - color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase(); - var named = false; - if (names[color]) { - color = names[color]; - named = true; - } - else if (color == 'transparent') { - return { r: 0, g: 0, b: 0, a: 0, format: "name" }; - } - - // Try to match string input using regular expressions. - // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360] - // Just return an object and let the conversion functions handle that. - // This way the result will be the same whether the tinycolor is initialized with string or object. - var match; - if ((match = matchers.rgb.exec(color))) { - return { r: match[1], g: match[2], b: match[3] }; - } - if ((match = matchers.rgba.exec(color))) { - return { r: match[1], g: match[2], b: match[3], a: match[4] }; - } - if ((match = matchers.hsl.exec(color))) { - return { h: match[1], s: match[2], l: match[3] }; - } - if ((match = matchers.hsla.exec(color))) { - return { h: match[1], s: match[2], l: match[3], a: match[4] }; - } - if ((match = matchers.hsv.exec(color))) { - return { h: match[1], s: match[2], v: match[3] }; - } - if ((match = matchers.hsva.exec(color))) { - return { h: match[1], s: match[2], v: match[3], a: match[4] }; - } - if ((match = matchers.hex8.exec(color))) { - return { - r: parseIntFromHex(match[1]), - g: parseIntFromHex(match[2]), - b: parseIntFromHex(match[3]), - a: convertHexToDecimal(match[4]), - format: named ? "name" : "hex8" - }; - } - if ((match = matchers.hex6.exec(color))) { - return { - r: parseIntFromHex(match[1]), - g: parseIntFromHex(match[2]), - b: parseIntFromHex(match[3]), - format: named ? "name" : "hex" - }; - } - if ((match = matchers.hex4.exec(color))) { - return { - r: parseIntFromHex(match[1] + '' + match[1]), - g: parseIntFromHex(match[2] + '' + match[2]), - b: parseIntFromHex(match[3] + '' + match[3]), - a: convertHexToDecimal(match[4] + '' + match[4]), - format: named ? "name" : "hex8" - }; - } - if ((match = matchers.hex3.exec(color))) { - return { - r: parseIntFromHex(match[1] + '' + match[1]), - g: parseIntFromHex(match[2] + '' + match[2]), - b: parseIntFromHex(match[3] + '' + match[3]), - format: named ? "name" : "hex" - }; - } - - return false; -} - -function validateWCAG2Parms(parms) { - // return valid WCAG2 parms for isReadable. - // If input parms are invalid, return {"level":"AA", "size":"small"} - var level, size; - parms = parms || {"level":"AA", "size":"small"}; - level = (parms.level || "AA").toUpperCase(); - size = (parms.size || "small").toLowerCase(); - if (level !== "AA" && level !== "AAA") { - level = "AA"; - } - if (size !== "small" && size !== "large") { - size = "small"; - } - return {"level":level, "size":size}; -} - -// Node: Export function -if (typeof module !== "undefined" && module.exports) { - module.exports = tinycolor; -} -// AMD/requirejs: Define the module -else if (true) { - !(__WEBPACK_AMD_DEFINE_RESULT__ = function () {return tinycolor;}.call(exports, __webpack_require__, exports, module), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); -} -// Browser: Expose to window -else { - window.tinycolor = tinycolor; -} - -})(Math); - - -/***/ }), -/* 7 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -/** - * @module - */ - -/** - * Colorpicker default options - */ - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = { - /** - * If true, loads the Debugger extension automatically into the current instance - * @type {boolean} - * @default false - */ - debug: false, - /** - * Forces a color, ignoring the one from the elements value or data-color attribute. - * - * @type {(String|Color|boolean)} - * @default false - */ - color: false, - /** - * Forces an specific color format. If false, it will be automatically detected the first time, - * but if null it will be always recalculated. - * - * Note that the ending 'a' of the format meaning "alpha" has currently no effect, meaning that rgb is the same as - * rgba excepting if the alpha channel is disabled (see useAlpha). - * - * @type {('rgb'|'rgba'|'prgb'|'prgba'|'hex'|'hex3'|'hex6'|'hex8'|'hsl'|'hsla'|'hsv'|'hsva'|'name'|boolean)} - * @default false - */ - format: false, - /** - * Horizontal mode layout. - * - * If true, the hue and alpha channel bars will be rendered horizontally, above the saturation selector. - * - * @type {boolean} - * @default false - */ - horizontal: false, - /** - * Forces to show the colorpicker as an inline element - * - * @type {boolean} - * @default false - */ - inline: false, - /** - * Children input CSS selector - * - * @type {String} - * @default 'input' - */ - input: 'input', - /** - * Colorpicker container CSS selector. If given, the colorpicker will be placed inside this container. - * If true, the colorpicker element itself will be used as the container. - * - * @type {String|boolean} - * @default false - */ - container: false, // container selector - /** - * Children color component CSS selector. - * If it exists, the child element background will be changed on color change. - * - * @type {String|boolean} - * @default '.add-on, .input-group-addon' - */ - component: '.add-on, .input-group-addon', - /** - * Fallback color to use when the given color is invalid. - * If false, the latest valid color will be used as a fallback. - * - * @type {String|Color|boolean} - * @default false - */ - fallbackColor: false, - /** - * If enabled, the input content will be replaced always with a valid color, - * if not enabled the invalid color will be left in the input, but valid in the internal color object. - * - * @type {boolean} - * @default false - */ - autoInputFallback: false, - /** - * If true a hash will be prepended to hexadecimal colors. - * If false, the hash will be removed. - * This only affects the input values. - * - * @type {boolean} - * @default false - */ - useHashPrefix: true, - /** - * If true or false the alpha adjustment bar will be displayed no matter what. - * If false it will be always hidden and alpha channel won't be allowed programmatically for this instance, - * so the selected or typed color will be always opaque. - * - * @type {boolean} - * @default true - */ - useAlpha: true, - /** - * This only applies when the color format is hexadecimal. - * If true, the alpha channel will be allowed for hexadecimal formatted colors, making them having 4 or 8 chars - * (RGBA or RRGGBBAA). This format is not yet supported in all modern browsers, so it is disabled by default. - * If false, rgba will be used whenever there is an alpha change different than 1 and the color format is - * automatic. - * - * @type {boolean} - * @default true - */ - enableHex8: false, - /** - * Vertical sliders configuration - * @type {Object} - */ - sliders: { - saturation: { - maxLeft: 100, - maxTop: 100, - callLeft: 'setSaturationRatio', - callTop: 'setBrightnessRatio' - }, - hue: { - maxLeft: 0, - maxTop: 100, - callLeft: false, - callTop: 'setHueRatio' - }, - alpha: { - maxLeft: 0, - maxTop: 100, - callLeft: false, - callTop: 'setAlphaRatio' - } - }, - /** - * Horizontal sliders configuration - * @type {Object} - */ - slidersHorz: { - saturation: { - maxLeft: 100, - maxTop: 100, - callLeft: 'setSaturationRatio', - callTop: 'setBrightnessRatio' - }, - hue: { - maxLeft: 100, - maxTop: 0, - callLeft: 'setHueRatio', - callTop: false - }, - alpha: { - maxLeft: 100, - maxTop: 0, - callLeft: 'setAlphaRatio', - callTop: false - } - }, - /** - * Colorpicker popup alignment. - * For now only right is supported. - * - * @type {('right')} - * @default 'right' - */ // TODO: add 'left' and 'auto' support. - align: 'right', - /** - * Custom class to be added to the colorpicker element - * - * @type {String} - */ - customClass: null, - /** - * Colorpicker widget template - * @type {String} - * @example - * - *
        - *
        - *
        - *
        - *
        - *
        - */ - template: '
        \n
        \n
        \n
        ', - /** - * - * Associative object with the extension class name and its config. - * Colorpicker comes with many bundled extensions: debugger, palette, preview and swatches (a superset of Palette). - * - * @type {Object} - * @example - * extensions: [ - * { - * name: 'swatches' - * colors: { - * 'primary': '#337ab7', - * 'success': '#5cb85c', - * 'info': '#5bc0de', - * 'warning': '#f0ad4e', - * 'danger': '#d9534f' - * }, - * namesAsValues: true - * } - * ] - */ - extensions: [{ - name: 'preview', - showText: false - }] -}; - -/***/ }), -/* 8 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Palette = exports.Swatches = exports.Preview = exports.Debugger = undefined; - -var _Debugger = __webpack_require__(9); - -var _Debugger2 = _interopRequireDefault(_Debugger); - -var _Preview = __webpack_require__(10); - -var _Preview2 = _interopRequireDefault(_Preview); - -var _Swatches = __webpack_require__(11); - -var _Swatches2 = _interopRequireDefault(_Swatches); - -var _Palette = __webpack_require__(2); - -var _Palette2 = _interopRequireDefault(_Palette); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.Debugger = _Debugger2.default; -exports.Preview = _Preview2.default; -exports.Swatches = _Swatches2.default; -exports.Palette = _Palette2.default; -exports.default = { - 'debugger': _Debugger2.default, - 'preview': _Preview2.default, - 'swatches': _Swatches2.default, - 'palette': _Palette2.default -}; - -/***/ }), -/* 9 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _Extension2 = __webpack_require__(1); - -var _Extension3 = _interopRequireDefault(_Extension2); - -var _jquery = __webpack_require__(0); - -var _jquery2 = _interopRequireDefault(_jquery); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var Debugger = function (_Extension) { - _inherits(Debugger, _Extension); - - function Debugger(colorpicker) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - _classCallCheck(this, Debugger); - - /** - * @type {number} - */ - var _this = _possibleConstructorReturn(this, (Debugger.__proto__ || Object.getPrototypeOf(Debugger)).call(this, colorpicker, options)); - - _this.eventCounter = 0; - if (_this.colorpicker.hasInput()) { - _this.colorpicker.input.on('change.colorpicker-ext', _jquery2.default.proxy(_this.onChangeInput, _this)); - } - return _this; - } - - /** - * @fires colorpickerDebug - * @param {string} eventName - * @param {*} args - */ - - - _createClass(Debugger, [{ - key: 'log', - value: function log(eventName) { - var _console; - - for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - this.eventCounter += 1; - - var logMessage = '#' + this.eventCounter + ': Colorpicker#' + this.colorpicker.id + ' [' + eventName + ']'; - - (_console = console).debug.apply(_console, [logMessage].concat(args)); - - /** - * (Colorpicker) Fired by the ConsoleDebug extension whenever it logs something - * - * @event colorpickerDebug - */ - this.colorpicker.element.trigger({ - type: 'colorpickerDebug', - colorpicker: this.colorpicker, - color: this.color, - debug: { - debugger: this, - eventName: eventName, - logArgs: args, - logMessage: logMessage - } - }); - } - }, { - key: 'resolveColor', - value: function resolveColor(color) { - this.log('resolveColor()', color); - return false; - } - }, { - key: 'onCreate', - value: function onCreate(event) { - this.log('colorpickerCreate'); - return _get(Debugger.prototype.__proto__ || Object.getPrototypeOf(Debugger.prototype), 'onCreate', this).call(this, event); - } - }, { - key: 'onDestroy', - value: function onDestroy(event) { - this.log('colorpickerDestroy'); - this.eventCounter = 0; - - if (this.colorpicker.hasInput()) { - this.colorpicker.input.off('.colorpicker-ext'); - } - - return _get(Debugger.prototype.__proto__ || Object.getPrototypeOf(Debugger.prototype), 'onDestroy', this).call(this, event); - } - }, { - key: 'onUpdate', - value: function onUpdate(event) { - this.log('colorpickerUpdate'); - } - - /** - * @listens _change - * @param {Event} event - */ - - }, { - key: 'onChangeInput', - value: function onChangeInput(event) { - this.log('input:change.colorpicker', event.value, event.color); - } - }, { - key: 'onChange', - value: function onChange(event) { - this.log('colorpickerChange', event.value, event.color); - } - }, { - key: 'onInvalid', - value: function onInvalid(event) { - this.log('colorpickerInvalid', event.value, event.color); - } - }, { - key: 'onHide', - value: function onHide(event) { - this.log('colorpickerHide'); - this.eventCounter = 0; - } - }, { - key: 'onShow', - value: function onShow(event) { - this.log('colorpickerShow'); - } - }, { - key: 'onDisable', - value: function onDisable(event) { - this.log('colorpickerDisable'); - } - }, { - key: 'onEnable', - value: function onEnable(event) { - this.log('colorpickerEnable'); - } - }]); - - return Debugger; -}(_Extension3.default); - -exports.default = Debugger; - -/***/ }), -/* 10 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _Extension2 = __webpack_require__(1); - -var _Extension3 = _interopRequireDefault(_Extension2); - -var _jquery = __webpack_require__(0); - -var _jquery2 = _interopRequireDefault(_jquery); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var Preview = function (_Extension) { - _inherits(Preview, _Extension); - - function Preview(colorpicker) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - _classCallCheck(this, Preview); - - var _this = _possibleConstructorReturn(this, (Preview.__proto__ || Object.getPrototypeOf(Preview)).call(this, colorpicker, Object.assign({}, { - template: '
        ', - showText: true, - format: colorpicker.format - }, options))); - - _this.element = (0, _jquery2.default)(_this.options.template); - _this.elementInner = _this.element.find('div'); - return _this; - } - - _createClass(Preview, [{ - key: 'onCreate', - value: function onCreate(event) { - _get(Preview.prototype.__proto__ || Object.getPrototypeOf(Preview.prototype), 'onCreate', this).call(this, event); - this.colorpicker.picker.append(this.element); - } - }, { - key: 'onUpdate', - value: function onUpdate(event) { - _get(Preview.prototype.__proto__ || Object.getPrototypeOf(Preview.prototype), 'onUpdate', this).call(this, event); - - this.elementInner.css('backgroundColor', event.color.toRgbString()); - - if (this.options.showText) { - this.elementInner.html(event.color.toString(this.options.format || this.colorpicker.format)); - - if (event.color.isDark()) { - this.elementInner.css('color', 'white'); - } else { - this.elementInner.css('color', 'black'); - } - } - } - }]); - - return Preview; -}(_Extension3.default); - -exports.default = Preview; - -/***/ }), -/* 11 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _Palette2 = __webpack_require__(2); - -var _Palette3 = _interopRequireDefault(_Palette2); - -var _jquery = __webpack_require__(0); - -var _jquery2 = _interopRequireDefault(_jquery); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var defaults = { - barTemplate: '
        ', - swatchTemplate: '' -}; - -var Swatches = function (_Palette) { - _inherits(Swatches, _Palette); - - function Swatches(colorpicker) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - _classCallCheck(this, Swatches); - - return _possibleConstructorReturn(this, (Swatches.__proto__ || Object.getPrototypeOf(Swatches)).call(this, colorpicker, Object.assign({}, defaults, options))); - } - - _createClass(Swatches, [{ - key: 'isEnabled', - value: function isEnabled() { - return this.getLength() > 0; - } - }, { - key: 'onCreate', - value: function onCreate(event) { - var _this2 = this; - - _get(Swatches.prototype.__proto__ || Object.getPrototypeOf(Swatches.prototype), 'onCreate', this).call(this, event); - - if (!this.isEnabled()) { - return; - } - - var colorpicker = this.colorpicker, - swatchContainer = (0, _jquery2.default)(this.options.barTemplate), - isAliased = this.options.namesAsValues === true && !Array.isArray(this.colors); - - _jquery2.default.each(this.colors, function (name, value) { - var $swatch = (0, _jquery2.default)(_this2.options.swatchTemplate).css('background-color', value).attr('data-name', name).attr('data-value', value).attr('title', name + ': ' + value); - - $swatch.on('mousedown.colorpicker touchstart.colorpicker', function (e) { - e.preventDefault(); - colorpicker.setValue(isAliased ? (0, _jquery2.default)(this).data('name') : (0, _jquery2.default)(this).data('value')); - }); - swatchContainer.append($swatch); - }); - - colorpicker.picker.append(swatchContainer); - } - }]); - - return Swatches; -}(_Palette3.default); - -exports.default = Swatches; - -/***/ }) -/******/ ]); -}); -//# sourceMappingURL=bootstrap-colorpicker.js.map \ No newline at end of file diff --git a/src/main/resources/static/plugins/colorpicker/js/bootstrap-colorpicker.js.map b/src/main/resources/static/plugins/colorpicker/js/bootstrap-colorpicker.js.map deleted file mode 100755 index 1bf37bd7e..000000000 --- a/src/main/resources/static/plugins/colorpicker/js/bootstrap-colorpicker.js.map +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Bootstrap Colorpicker - Simple and customizable colorpicker component for Twitter Bootstrap. - * @package bootstrap-colorpicker - * @version v3.0.0-wip - * @license MIT - * @link https://farbelous.github.io/bootstrap-colorpicker/ - * @link https://github.com/farbelous/bootstrap-colorpicker.git - */ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 32081b809d19519bb29c","webpack:///external \"jQuery\"","webpack:///./src/js/Extension.js","webpack:///./src/js/extensions/Palette.js","webpack:///./src/js/jquery-plugin.js","webpack:///./src/js/Colorpicker.js","webpack:///./src/js/Color.js","webpack:///./node_modules/tinycolor2/tinycolor.js","webpack:///./src/js/options.js","webpack:///./src/js/extensions/index.js","webpack:///./src/js/extensions/Debugger.js","webpack:///./src/js/extensions/Preview.js","webpack:///./src/js/extensions/Swatches.js"],"names":["Extension","colorpicker","options","element","length","Error","on","proxy","onCreate","onDestroy","onUpdate","onChange","onInvalid","onShow","onHide","onEnable","onDisable","color","event","off","defaults","colors","namesAsValues","Palette","Object","assign","Array","isArray","keys","getLength","indexOf","toUpperCase","toLowerCase","getValue","getName","value","defaultValue","name","hasOwnProperty","plugin","fn","option","apiArgs","prototype","slice","call","arguments","isSingleElement","returnValue","$jq","each","$this","inst","data","isFunction","apply","constructor","colorPickerIdCounter","Colorpicker","id","addClass","attr","extensions","component","find","container","currentSlider","mousePointer","left","top","lastEvent","e","input","is","debug","push","forEach","ext","addExtension","colorValue","createColor","format","disabled","$picker","picker","template","customClass","inline","horizontal","useAlpha","hasColor","hasTransparency","align","target","currentTarget","preventDefault","_mousedown","appendTo","hasInput","_keyup","_change","show","hide","has","update","trigger","type","extensionName","ExtensionClass","config","remove","removeData","removeClass","str","toCssColorString","useHashPrefix","replace","_resolveColor","toString","window","document","body","offset","outerWidth","css","outerHeight","isVisible","isDisabled","_reposition","stopPropagation","isHidden","parents","hasClass","val","toInputColorString","prop","vertical","sl","sliders","slidersHorz","saturationGuide","hueGuide","alphaGuide","hsva","hsvaRatio","hue","maxTop","maxLeft","h","alpha","a","saturation","v","s","getHueOnlyCopy","toHexString","icn","eq","force","_shouldUpdate","_updateComponent","preventInputUpdate","autoInputFallback","_updateInput","_updatePicker","fallbackColor","candidates","map","item","equals","shouldForceUpdate","useFallback","isValid","invalidColor","fallback","previous","isAlphaEnabled","setAlpha","prevHsva","setHueRatio","extResolvedColor","resolveColor","pageX","pageY","originalEvent","touches","zone","closest","extend","guide","style","_mousemove","_mouseup","getCopy","Math","max","min","callLeft","callTop","setValue","match","enableHex8","unwrapColor","r","_r","g","_g","b","_b","_a","getCompatibleFormat","String","Color","_tc_id","_format","gradientType","_gradientType","toHsv","hsv","_originalInput","_hbak","_roundA","_ok","importRgb","importHsv","setHue","setSaturation","setBrightness","colorStr","isTransparent","showText","Debugger","Preview","Swatches","eventCounter","onChangeInput","eventName","args","logMessage","debugger","logArgs","log","elementInner","append","toRgbString","html","isDark","barTemplate","swatchTemplate","isEnabled","swatchContainer","isAliased","$swatch"],"mappings":"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ACA;AACA,KAAK;AACL;AACA;AACA,gBAAgB;AAChB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,gBAAgB;AAChB,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,gBAAgB;AAChB,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,UAAU;AACzB;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD,wCAAwC;AACxC,wCAAwC;AACxC;;AAEA;AACA;;AAEA,YAAY;AACZ;;AAEA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY;AACZ;;AAEA;AACA;AACA;AACA,eAAe,UAAU;AACzB;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA;AACA,sDAAsD;AACtD,wCAAwC;AACxC,wCAAwC;AACxC;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA,eAAe,UAAU;AACzB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,cAAc;AAC3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yCAAyC;AAC5D,mBAAmB,yCAAyC;AAC5D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wCAAwC;AAC3D,mBAAmB,yCAAyC;AAC5D,mBAAmB,yCAAyC;AAC5D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uCAAuC;AAC1D,mBAAmB,wCAAwC;AAC3D;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+DAA+D,WAAW;AAC1E;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,2DAA2D,wBAAwB;;AAEnF;AACA;AACA,2CAA2C,wBAAwB;AACnE;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,8EAA8E,4BAA4B,gBAAgB;AAC1H,8EAA8E,2BAA2B,gBAAgB;AACzH,qDAAqD,oDAAoD,gBAAgB;AACzH,qDAAqD,oDAAoD,gBAAgB;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,uBAAuB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA,oDAAoD,0BAA0B;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA,KAAK,kBAAkB,YAAY,kBAAkB;AACrD;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,4BAA4B,YAAY;;AAExC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,EAAE,cAAc,EAAE,cAAc,EAAE;AACjE,+BAA+B,EAAE,cAAc,EAAE,cAAc,EAAE;AACjE,+BAA+B,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE;AACjF,+BAA+B,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE;AACjF;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wCAAwC,UAAU,OAAO,UAAU,OAAO,SAAS;AACnF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,gBAAgB;AAChB;AACA;AACA,gBAAgB;AAChB;AACA;AACA,gBAAgB;AAChB;AACA;AACA,gBAAgB;AAChB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,2CAA2C;AAC3C;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAwB,kBAAkB;AAAA;AAC1C;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;;;;;AC1qCD;AACA;;;;AAIA;;;;;;;kBAGe;AACb;;;;;AAKA1I,SAAO,KANM;AAOb;;;;;;AAMAzD,SAAO,K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","file":"bootstrap-colorpicker.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jQuery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"bootstrap-colorpicker\", [\"jQuery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"bootstrap-colorpicker\"] = factory(require(\"jQuery\"));\n\telse\n\t\troot[\"bootstrap-colorpicker\"] = factory(root[\"jQuery\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 32081b809d19519bb29c","module.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jQuery\"\n// module id = 0\n// module chunks = 0 1","'use strict';\n\nimport $ from 'jquery';\n\n/**\n * Colorpicker extension class.\n */\nclass Extension {\n /**\n * @param {Colorpicker} colorpicker\n * @param {Object} options\n */\n constructor(colorpicker, options = {}) {\n /**\n * @type {Colorpicker}\n */\n this.colorpicker = colorpicker;\n /**\n * @type {Object}\n */\n this.options = options;\n\n if (!(this.colorpicker.element && this.colorpicker.element.length)) {\n throw new Error('Extension: this.colorpicker.element is not valid');\n }\n\n this.colorpicker.element.on('colorpickerCreate.colorpicker-ext', $.proxy(this.onCreate, this));\n this.colorpicker.element.on('colorpickerDestroy.colorpicker-ext', $.proxy(this.onDestroy, this));\n this.colorpicker.element.on('colorpickerUpdate.colorpicker-ext', $.proxy(this.onUpdate, this));\n this.colorpicker.element.on('colorpickerChange.colorpicker-ext', $.proxy(this.onChange, this));\n this.colorpicker.element.on('colorpickerInvalid.colorpicker-ext', $.proxy(this.onInvalid, this));\n this.colorpicker.element.on('colorpickerShow.colorpicker-ext', $.proxy(this.onShow, this));\n this.colorpicker.element.on('colorpickerHide.colorpicker-ext', $.proxy(this.onHide, this));\n this.colorpicker.element.on('colorpickerEnable.colorpicker-ext', $.proxy(this.onEnable, this));\n this.colorpicker.element.on('colorpickerDisable.colorpicker-ext', $.proxy(this.onDisable, this));\n }\n\n /**\n * Function called every time a new color needs to be created.\n * Return false to skip this resolver and continue with other extensions' ones\n * or return anything else to consider the color resolved.\n *\n * @param {Color|String|*} color\n * @return {Color|String|*}\n */\n resolveColor(color) {\n return false;\n }\n\n /**\n * @listens colorpickerCreate\n * @param {Event} event\n */\n onCreate(event) {\n // to be extended\n }\n\n /**\n * @listens colorpickerDestroy\n * @param {Event} event\n */\n onDestroy(event) {\n this.colorpicker.element.off('.colorpicker-ext');\n }\n\n /**\n * @listens colorpickerUpdate\n * @param {Event} event\n */\n onUpdate(event) {\n // to be extended\n }\n\n /**\n * @listens colorpickerChange\n * @param {Event} event\n */\n onChange(event) {\n // to be extended\n }\n\n /**\n * @listens colorpickerInvalid\n * @param {Event} event\n */\n onInvalid(event) {\n // to be extended\n }\n\n /**\n * @listens colorpickerHide\n * @param {Event} event\n */\n onHide(event) {\n // to be extended\n }\n\n /**\n * @listens colorpickerShow\n * @param {Event} event\n */\n onShow(event) {\n // to be extended\n }\n\n /**\n * @listens colorpickerDisable\n * @param {Event} event\n */\n onDisable(event) {\n // to be extended\n }\n\n /**\n * @listens colorpickerEnable\n * @param {Event} event\n */\n onEnable(event) {\n // to be extended\n }\n}\n\nexport default Extension;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/Extension.js","'use strict';\n\nimport Extension from 'Extension';\n\nlet defaults = {\n /**\n * Key-value pairs defining a color alias and its CSS color representation.\n *\n * They can also be just an array of values. In that case, no special names are used, only the real colors.\n *\n * @type {Object|Array}\n * @default null\n * @example\n * {\n * 'black': '#000000',\n * 'white': '#ffffff',\n * 'red': '#FF0000',\n * 'default': '#777777',\n * 'primary': '#337ab7',\n * 'success': '#5cb85c',\n * 'info': '#5bc0de',\n * 'warning': '#f0ad4e',\n * 'danger': '#d9534f'\n * }\n *\n * @example ['#f0ad4e', '#337ab7', '#5cb85c']\n */\n colors: null,\n /**\n * If true, the when a color swatch is selected the name (alias) will be used as input value,\n * otherwise the swatch real color value will be used.\n *\n * @type {boolean}\n * @default true\n */\n namesAsValues: true\n};\n\nclass Palette extends Extension {\n\n /**\n * @returns {Object|Array}\n */\n get colors() {\n return this.options.colors;\n }\n\n constructor(colorpicker, options = {}) {\n super(colorpicker, Object.assign({}, defaults, options));\n\n if ((!Array.isArray(this.options.colors)) && (typeof this.options.colors !== 'object')) {\n this.options.colors = null;\n }\n }\n\n /**\n * @returns {int}\n */\n getLength() {\n if (!this.options.colors) {\n return 0;\n }\n\n if (Array.isArray(this.options.colors)) {\n return this.options.colors.length;\n }\n\n if (typeof this.options.colors === 'object') {\n return Object.keys(this.options.colors).length;\n }\n\n return 0;\n }\n\n resolveColor(color) {\n if (this.getLength() <= 0) {\n return false;\n }\n\n if (Array.isArray(this.options.colors)) {\n if (this.options.colors.indexOf(color) >= 0) {\n return color;\n }\n if (this.options.colors.indexOf(color.toUpperCase()) >= 0) {\n return color.toUpperCase();\n }\n if (this.options.colors.indexOf(color.toLowerCase()) >= 0) {\n return color.toLowerCase();\n }\n return false;\n }\n\n if (typeof this.options.colors !== 'object') {\n return false;\n }\n\n if (!this.options.namesAsValues) {\n return this.getValue(color, false);\n }\n return this.getName(color, this.getName('#' + color, this.getValue(color, false)));\n }\n\n /**\n * Given a color value, returns the corresponding color name or defaultValue.\n *\n * @param {String} value\n * @param {*} defaultValue\n * @returns {*}\n */\n getName(value, defaultValue = false) {\n if (!(typeof value === 'string') || !this.options.colors) {\n return defaultValue;\n }\n for (let name in this.options.colors) {\n if (!this.options.colors.hasOwnProperty(name)) {\n continue;\n }\n if (this.options.colors[name].toLowerCase() === value.toLowerCase()) {\n return name;\n }\n }\n return defaultValue;\n }\n\n /**\n * Given a color name, returns the corresponding color value or defaultValue.\n *\n * @param {String} name\n * @param {*} defaultValue\n * @returns {*}\n */\n getValue(name, defaultValue = false) {\n if (!(typeof name === 'string') || !this.options.colors) {\n return defaultValue;\n }\n if (this.options.colors.hasOwnProperty(name)) {\n return this.options.colors[name];\n }\n return defaultValue;\n }\n}\n\nexport default Palette;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/extensions/Palette.js","'use strict';\n\nimport Colorpicker from './Colorpicker';\nimport $ from 'jquery';\n\nlet plugin = 'colorpicker';\n\n$[plugin] = Colorpicker;\n\n$.fn[plugin] = function (option) {\n let apiArgs = Array.prototype.slice.call(arguments, 1),\n isSingleElement = (this.length === 1),\n returnValue = null;\n\n let $jq = this.each(function () {\n let $this = $(this),\n inst = $this.data(plugin),\n options = ((typeof option === 'object') ? option : {});\n\n if (!inst) {\n inst = new Colorpicker(this, options);\n $this.data(plugin, inst);\n }\n\n if (typeof option === 'string') {\n if (option === 'colorpicker') {\n returnValue = inst;\n } else if ($.isFunction(inst[option])) {\n returnValue = inst[option].apply(inst, apiArgs);\n } else { // its a property ?\n if (apiArgs.length) {\n // set property\n inst[option] = apiArgs[0];\n }\n returnValue = inst[option];\n }\n } else {\n returnValue = $this;\n }\n });\n\n return isSingleElement ? returnValue : $jq;\n};\n\n$.fn[plugin].constructor = Colorpicker;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/jquery-plugin.js","'use strict';\n\nimport Color from './Color';\nimport Extension from './Extension';\nimport defaults from './options';\nimport bundledExtensions from 'extensions';\nimport $ from 'jquery';\n\nlet colorPickerIdCounter = 0;\n\n/**\n * Colorpicker widget class\n */\nclass Colorpicker {\n /**\n * Color class\n *\n * @static\n * @type {Color}\n */\n static get Color() {\n return Color;\n }\n\n /**\n * Extension class\n *\n * @static\n * @type {Extension}\n */\n static get Extension() {\n return Extension;\n }\n\n /**\n * Colorpicker bundled extension classes\n *\n * @static\n * @type {{Extension}}\n */\n static get Extensions() {\n return bundledExtensions;\n }\n\n /**\n * color getter\n *\n * @type {Color|null}\n */\n get color() {\n return this.element.data('color');\n }\n\n /**\n * color setter\n *\n * @ignore\n * @param {Color|null} value\n */\n set color(value) {\n this.element.data('color', value);\n }\n\n /**\n * @fires colorpickerCreate\n * @param {Object|String} element\n * @param {Object} options\n * @constructor\n */\n constructor(element, options) {\n colorPickerIdCounter += 1;\n /**\n * The colorpicker instance number\n * @type {number}\n */\n this.id = colorPickerIdCounter;\n\n /**\n * @type {*|jQuery}\n */\n this.element = $(element).addClass('colorpicker-element');\n this.element.attr('data-colorpicker-id', this.id);\n\n /**\n * @type {defaults}\n */\n this.options = Object.assign({}, defaults, options, this.element.data());\n\n /**\n * @type {Extension[]}\n */\n this.extensions = [];\n\n if (!Array.isArray(this.options.extensions)) {\n this.options.extensions = [];\n }\n\n /**\n * @type {*|jQuery}\n */\n this.component = this.options.component;\n this.component = (this.component !== false) ? this.element.find(this.component) : false;\n if (this.component && (this.component.length === 0)) {\n this.component = false;\n }\n\n /**\n * @type {*|jQuery}\n */\n this.container = (this.options.container === true) ? this.element : this.options.container;\n this.container = (this.container !== false) ? $(this.container) : false;\n\n /**\n * @type {*|String}\n * @private\n */\n this.currentSlider = null;\n\n /**\n * @type {{left: number, top: number}}\n * @private\n */\n this.mousePointer = {\n left: 0,\n top: 0\n };\n\n /**\n * Latest external event\n *\n * @type {{name: String, e: *}}\n * @private\n */\n this.lastEvent = {\n name: null,\n e: null\n };\n\n // Is the element an input? Should we search inside for any input?\n /**\n * @type {*|jQuery}\n */\n this.input = this.element.is('input') ? this.element : (this.options.input ?\n this.element.find(this.options.input) : false);\n\n if (this.input && (this.input.length === 0)) {\n this.input = false;\n }\n\n if (this.options.debug) {\n this.options.extensions.push({name: 'Debugger'});\n }\n\n // Register extensions\n this.options.extensions.forEach((ext) => {\n this.addExtension(ext.name, bundledExtensions[ext.name.toLowerCase()], ext);\n });\n\n let colorValue = this.options.color !== false ? this.options.color : this.getValue();\n\n this.color = colorValue ? this.createColor(colorValue) : false;\n\n if (this.options.format === false) {\n // If format is false, use the first parsed one from now on\n this.options.format = this.color.format;\n }\n\n /**\n * @type {boolean}\n * @private\n */\n this.disabled = false;\n\n // Setup picker\n let $picker = this.picker = $(this.options.template);\n\n if (this.options.customClass) {\n $picker.addClass(this.options.customClass);\n }\n if (this.options.inline) {\n $picker.addClass('colorpicker-inline colorpicker-visible');\n } else {\n $picker.addClass('colorpicker-hidden');\n }\n if (this.options.horizontal) {\n $picker.addClass('colorpicker-horizontal');\n }\n\n if (\n (this.options.useAlpha || (this.hasColor() && this.color.hasTransparency())) &&\n (this.options.useAlpha !== false)\n ) {\n this.options.useAlpha = true;\n $picker.addClass('colorpicker-with-alpha');\n }\n\n if (this.options.align === 'right') {\n $picker.addClass('colorpicker-right');\n }\n if (this.options.inline === true) {\n $picker.addClass('colorpicker-no-arrow');\n }\n\n // Prevent closing the colorpicker when clicking on itself\n $picker.on('mousedown.colorpicker touchstart.colorpicker', $.proxy(function (e) {\n if (e.target === e.currentTarget) {\n e.preventDefault();\n }\n }, this));\n\n // Bind click/tap events on the sliders\n $picker.find('.colorpicker-saturation, .colorpicker-hue, .colorpicker-alpha')\n .on('mousedown.colorpicker touchstart.colorpicker', $.proxy(this._mousedown, this));\n\n $picker.appendTo(this.container ? this.container : $('body'));\n\n // Bind other events\n if (this.hasInput()) {\n this.input.on({\n 'keyup.colorpicker': $.proxy(this._keyup, this)\n });\n this.input.on({\n 'change.colorpicker': $.proxy(this._change, this)\n });\n if (this.component === false) {\n this.element.on({\n 'focus.colorpicker': $.proxy(this.show, this)\n });\n }\n if (this.options.inline === false) {\n this.element.on({\n 'focusout.colorpicker': $.proxy(this.hide, this)\n });\n }\n }\n\n if (this.component !== false) {\n this.component.on({\n 'click.colorpicker': $.proxy(this.show, this)\n });\n }\n\n if ((this.hasInput() === false) && (this.component === false) && !this.element.has('.colorpicker')) {\n this.element.on({\n 'click.colorpicker': $.proxy(this.show, this)\n });\n }\n\n // for HTML5 input[type='color']\n if (this.hasInput() && (this.component !== false) && (this.input.attr('type') === 'color')) {\n this.input.on({\n 'click.colorpicker': $.proxy(this.show, this),\n 'focus.colorpicker': $.proxy(this.show, this)\n });\n }\n\n // Update if there is a color option\n this.update(this.options.color !== false);\n\n $($.proxy(function () {\n /**\n * (Colorpicker) When the Colorpicker instance has been created and the DOM is ready.\n *\n * @event colorpickerCreate\n */\n this.element.trigger({\n type: 'colorpickerCreate',\n colorpicker: this,\n color: this.color\n });\n }, this));\n }\n\n /**\n * Creates and registers the given extension\n *\n * @param {String|Extension} extensionName\n * @param {Extension} ExtensionClass\n * @param {Object} [config]\n * @returns {Extension}\n */\n addExtension(extensionName, ExtensionClass, config = {}) {\n let ext = (extensionName instanceof Extension) ? extensionName : new ExtensionClass(this, config);\n\n this.extensions.push(ext);\n return ext;\n }\n\n /**\n * Destroys the current instance\n *\n * @fires colorpickerDestroy\n */\n destroy() {\n this.picker.remove();\n this.element.removeData('colorpicker', 'color').off('.colorpicker');\n if (this.hasInput()) {\n this.input.off('.colorpicker');\n }\n if (this.component !== false) {\n this.component.off('.colorpicker');\n }\n this.element.removeClass('colorpicker-element');\n\n /**\n * (Colorpicker) When the instance is destroyed with all events unbound.\n *\n * @event colorpickerDestroy\n */\n this.element.trigger({\n type: 'colorpickerDestroy',\n colorpicker: this,\n color: this.color\n });\n }\n\n /**\n * Returns true if the current color object is an instance of Color, false otherwise.\n * @returns {boolean}\n */\n hasColor() {\n return this.color instanceof Color;\n }\n\n /**\n * @returns {*|String|Color}\n */\n get fallbackColor() {\n return this.options.fallbackColor ? this.options.fallbackColor : (this.hasColor() ? this.color : '#000');\n }\n\n get format() {\n if (this.options.format) {\n return this.options.format;\n }\n\n if (this.hasColor() && this.color.hasTransparency() && this.color.format.match(/^hex/)) {\n return this.options.enableHex8 ? 'hex8' : (this.isAlphaEnabled() ? 'rgba' : 'hex');\n }\n\n if (this.hasColor()) {\n return this.color.format;\n }\n\n return null;\n }\n\n /**\n * Formatted color string, with the formatting options applied\n * (e.g. useHashPrefix)\n * @returns {String}\n */\n toInputColorString() {\n let str = this.toCssColorString();\n\n if (!str) {\n return str;\n }\n\n if (this.options.useHashPrefix === false) {\n str = str.replace(/^#/g, '');\n }\n\n return this._resolveColor(str);\n }\n\n /**\n * Formatted color string, suitable for CSS\n * @returns {String}\n */\n toCssColorString() {\n if (!this.hasColor()) {\n return '';\n }\n return this.color.toString(this.format);\n }\n\n /**\n * If the widget is not inside a container or inline, rearranges its position relative to its element offset.\n *\n * @param {Event} [e]\n * @private\n * @returns {boolean} Returns false if the widget is inside a container or inline, true otherwise\n */\n _reposition(e) {\n this.lastEvent.name = 'reposition';\n this.lastEvent.e = e;\n\n if (this.options.inline !== false || this.options.container) {\n return false;\n }\n let type = this.container && this.container[0] !== window.document.body ? 'position' : 'offset';\n let element = this.component || this.element;\n let offset = element[type]();\n\n if (this.options.align === 'right') {\n offset.left -= this.picker.outerWidth() - element.outerWidth();\n }\n this.picker.css({\n top: offset.top + element.outerHeight(),\n left: offset.left\n });\n return true;\n }\n\n /**\n * Shows the colorpicker widget if hidden.\n * If the input is disabled this call will be ignored.\n *\n * @fires colorpickerShow\n * @param {Event} [e]\n * @returns {boolean} True if was hidden and afterwards visible, false if nothing happened.\n */\n show(e) {\n this.lastEvent.name = 'show';\n this.lastEvent.e = e;\n\n if (this.isVisible() || this.isDisabled()) {\n // Don't show the widget if it's already visible or it is disabled\n return false;\n }\n this.picker.addClass('colorpicker-visible').removeClass('colorpicker-hidden');\n\n this._reposition(e);\n $(window).on('resize.colorpicker', $.proxy(this._reposition, this));\n\n if (e && (!this.hasInput() || this.input.attr('type') === 'color')) {\n if (e.stopPropagation && e.preventDefault) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n if ((this.component || !this.input) && (this.options.inline === false)) {\n $(window.document).on({\n 'mousedown.colorpicker': $.proxy(this.hide, this)\n });\n }\n\n /**\n * (Colorpicker) When show() is called and the widget can be shown.\n *\n * @event colorpickerShow\n */\n this.element.trigger({\n type: 'colorpickerShow',\n colorpicker: this,\n color: this.color\n });\n\n return true;\n }\n\n /**\n * Hides the colorpicker widget.\n * Hide is prevented when it is triggered by an event whose target element has been clicked/touched.\n *\n * @fires colorpickerHide\n * @param {Event} [e]\n * @returns {boolean} True if was visible and afterwards hidden, false if nothing happened.\n */\n hide(e) {\n this.lastEvent.name = 'hide';\n this.lastEvent.e = e;\n\n if (this.isHidden()) {\n // Do not trigger if already hidden\n return false;\n }\n if ((typeof e !== 'undefined') && e.target) {\n // Prevent hide if triggered by an event and an element inside the colorpicker has been clicked/touched\n if (\n $(e.currentTarget).parents('.colorpicker').length > 0 ||\n $(e.target).parents('.colorpicker').length > 0\n ) {\n return false;\n }\n }\n this.picker.addClass('colorpicker-hidden').removeClass('colorpicker-visible');\n $(window).off('resize.colorpicker', this._reposition);\n $(window.document).off({\n 'mousedown.colorpicker': this.hide\n });\n\n /**\n * (Colorpicker) When hide() is called and the widget can be hidden.\n *\n * @event colorpickerHide\n */\n this.element.trigger({\n type: 'colorpickerHide',\n colorpicker: this,\n color: this.color\n });\n return true;\n }\n\n /**\n * Returns true if the colorpicker element has the colorpicker-visible class and not the colorpicker-hidden one.\n * False otherwise.\n *\n * @returns {boolean}\n */\n isVisible() {\n return this.picker.hasClass('colorpicker-visible') && !this.picker.hasClass('colorpicker-hidden');\n }\n\n /**\n * Returns true if the colorpicker element has the colorpicker-hidden class and not the colorpicker-visible one.\n * False otherwise.\n *\n * @returns {boolean}\n */\n isHidden() {\n return this.picker.hasClass('colorpicker-hidden') && !this.picker.hasClass('colorpicker-visible');\n }\n\n /**\n * If the input element is present, it updates the value with the current color object color string.\n * If value is set, this method fires a \"change\" event on the input element.\n *\n * @fires change\n * @private\n */\n _updateInput() {\n if (this.hasInput()) {\n let val = this.toInputColorString();\n\n if (val === this.input.prop('value')) {\n // No need to set value or trigger any event if nothing changed\n return;\n }\n\n this.input.prop('value', val ? val : '');\n\n /**\n * (Input) Triggered on the input element when a new color is selected.\n *\n * @event change\n */\n this.input.trigger({\n type: 'change',\n colorpicker: this,\n color: this.color,\n value: val\n });\n }\n }\n\n /**\n * Changes the color adjustment bars using the current color object information.\n * @private\n */\n _updatePicker() {\n if (!this.hasColor()) {\n return;\n }\n\n let vertical = (this.options.horizontal === false),\n sl = vertical ? this.options.sliders : this.options.slidersHorz;\n\n let saturationGuide = this.picker.find('.colorpicker-saturation .colorpicker-guide'),\n hueGuide = this.picker.find('.colorpicker-hue .colorpicker-guide'),\n alphaGuide = this.picker.find('.colorpicker-alpha .colorpicker-guide');\n\n let hsva = this.color.hsvaRatio;\n\n if (hueGuide.length) {\n hueGuide.css(vertical ? 'top' : 'left', (vertical ? sl.hue.maxTop : sl.hue.maxLeft) * (1 - hsva.h));\n }\n\n if (alphaGuide.length) {\n alphaGuide.css(vertical ? 'top' : 'left', (vertical ? sl.alpha.maxTop : sl.alpha.maxLeft) * (1 - hsva.a));\n }\n\n if (saturationGuide.length) {\n saturationGuide.css({\n 'top': sl.saturation.maxTop - hsva.v * sl.saturation.maxTop,\n 'left': hsva.s * sl.saturation.maxLeft\n });\n }\n\n this.picker.find('.colorpicker-saturation')\n .css('backgroundColor', this.color.getHueOnlyCopy().toHexString()); // we only need hue\n\n this.picker.find('.colorpicker-alpha')\n .css('backgroundColor', this.color.toString('hex6')); // we don't need alpha\n }\n\n /**\n * If the component element is present, its background color is updated\n * @private\n */\n _updateComponent() {\n if (!this.hasColor()) {\n return;\n }\n\n if (this.component !== false) {\n let icn = this.component.find('i').eq(0);\n\n if (icn.length > 0) {\n icn.css({\n 'backgroundColor': this.toCssColorString()\n });\n } else {\n this.component.css({\n 'backgroundColor': this.toCssColorString()\n });\n }\n }\n }\n\n /**\n * @private\n * @returns {boolean}\n */\n _shouldUpdate() {\n return (this.hasColor() && ((this.getValue(false) !== false)));\n }\n\n /**\n * Updated the component color, the input value and the widget if a color is present.\n *\n * If force is true, it is updated anyway.\n *\n * @fires colorpickerUpdate\n * @param {boolean} [force]\n */\n update(force = false) {\n if (this._shouldUpdate() || (force === true)) {\n // Update only if the current value (from input or data) is not empty\n this._updateComponent();\n\n // Do not update input when autoInputFallback is disabled and last event is keyup.\n let preventInputUpdate = (\n (this.options.autoInputFallback !== true) &&\n (\n // this.isInvalidColor() || // prevent also on invalid color (on create, leaves invalid colors)\n (this.lastEvent.name === 'keyup')\n )\n );\n\n if (!preventInputUpdate) {\n this._updateInput();\n }\n\n this._updatePicker();\n\n /**\n * (Colorpicker) Fired when the widget is updated.\n *\n * @event colorpickerUpdate\n */\n this.element.trigger({\n type: 'colorpickerUpdate',\n colorpicker: this,\n color: this.color\n });\n }\n }\n\n /**\n * Returns the color string from the input value or the 'data-color' attribute of the input or element.\n * If empty, it returns the defaultValue parameter.\n *\n * @param {String|*} [defaultValue]\n * @returns {String|*}\n */\n getValue(defaultValue = null) {\n defaultValue = (typeof defaultValue === 'undefined') ? this.fallbackColor : defaultValue;\n let candidates = [], val = false;\n\n if (this.hasInput()) {\n candidates.push(this.input.val());\n candidates.push(this.input.data('color'));\n }\n candidates.push(this.element.data('color'));\n\n candidates.map((item) => {\n if (item && (val === false)) {\n val = item;\n }\n });\n\n val = ((val === false) ? defaultValue : val);\n\n if (val instanceof Color) {\n return val.toString(this.format);\n }\n\n return val;\n }\n\n /**\n * Sets the color manually\n *\n * @fires colorpickerChange\n * @param {String|Color} val\n */\n setValue(val) {\n if (this.hasColor() && this.color.equals(val)) {\n // equal color object\n return;\n }\n\n let color = val ? this.createColor(val) : false;\n\n if (!this.hasColor() && !color) {\n // color was empty and the new one too\n return;\n }\n\n // force update if color is changed to empty\n let shouldForceUpdate = this.hasColor() && !color;\n\n this.color = color;\n\n /**\n * (Colorpicker) When the color is set programmatically with setValue().\n *\n * @event colorpickerChange\n */\n this.element.trigger({\n type: 'colorpickerChange',\n colorpicker: this,\n color: this.color,\n value: val\n });\n\n // force update if color has changed to empty\n this.update(shouldForceUpdate);\n }\n\n /**\n * Creates a new color using the widget instance options (fallbackColor, format).\n *\n * @fires colorpickerInvalid\n * @param {*} val\n * @param {boolean} useFallback\n * @returns {Color}\n */\n createColor(val, useFallback = true) {\n let color = new Color(this._resolveColor(val), {format: this.format});\n\n if (!color.isValid()) {\n let invalidColor = color, fallback;\n\n if (useFallback) {\n fallback = ((this.fallbackColor instanceof Color) && this.fallbackColor.isValid()) ?\n this.fallbackColor : this._resolveColor(this.fallbackColor);\n\n color = new Color(fallback, {format: this.format});\n\n if (!color.isValid() && useFallback) {\n throw new Error('The fallback color is invalid.');\n }\n }\n\n color.previous = invalidColor;\n\n /**\n * (Colorpicker) Fired when the color is invalid and the fallback color is going to be used.\n *\n * @event colorpickerInvalid\n */\n this.element.trigger({\n type: 'colorpickerInvalid',\n colorpicker: this,\n color: color,\n value: val\n });\n }\n\n if (!this.isAlphaEnabled() && color.hasTransparency()) {\n // Alpha is disabled\n color.setAlpha(1);\n }\n\n if (!this.hasColor()) {\n // No previous color, so no need to compare\n return color;\n }\n\n let hsva = color.hsvaRatio;\n let prevHsva = this.color.hsvaRatio;\n\n if (\n hsva.s === 0 &&\n hsva.h === 0 &&\n prevHsva.h !== 0\n ) {\n // Hue was set to 0 because saturation was 0, use previous hue, since it was not meant to change...\n color.setHueRatio(prevHsva.h);\n }\n\n if (!this.isAlphaEnabled() && color.hasTransparency()) {\n // Alpha is disabled\n color.setAlpha(1);\n }\n\n return color;\n }\n\n /**\n * Checks if there is a color object, that it is valid and it is not a fallback\n * @returns {boolean}\n */\n isInvalidColor() {\n return !this.hasColor() || !this.color.isValid() || !!this.color.previous;\n }\n\n /**\n * Returns true if the useAlpha option is exactly true, false otherwise\n * @returns {boolean}\n */\n isAlphaEnabled() {\n return this.options.useAlpha === true;\n }\n\n /**\n * Resolves a color, in case is not in a standard format (e.g. a custom color alias)\n *\n * @private\n * @param {String|*} color\n * @returns {String|*|null}\n */\n _resolveColor(color) {\n let extResolvedColor = false;\n\n $.each(this.extensions, function (name, ext) {\n if (extResolvedColor !== false) {\n // skip if resolved\n return;\n }\n extResolvedColor = ext.resolveColor(color);\n });\n\n if (extResolvedColor !== false) {\n color = extResolvedColor;\n }\n\n return color;\n }\n\n /**\n * Returns true if the widget has an associated input element, false otherwise\n * @returns {boolean}\n */\n hasInput() {\n return (this.input !== false);\n }\n\n /**\n * Returns true if this instance is disabled\n * @returns {boolean}\n */\n isDisabled() {\n return this.disabled === true;\n }\n\n /**\n * Disables the widget and the input if any\n *\n * @fires colorpickerDisable\n * @returns {boolean}\n */\n disable() {\n if (this.hasInput()) {\n this.input.prop('disabled', true);\n }\n this.disabled = true;\n\n /**\n * (Colorpicker) When the widget has been disabled.\n *\n * @event colorpickerDisable\n */\n this.element.trigger({\n type: 'colorpickerDisable',\n colorpicker: this,\n color: this.color\n });\n return true;\n }\n\n /**\n * Enables the widget and the input if any\n *\n * @fires colorpickerEnable\n * @returns {boolean}\n */\n enable() {\n if (this.hasInput()) {\n this.input.prop('disabled', false);\n }\n this.disabled = false;\n\n /**\n * (Colorpicker) When the widget has been enabled.\n *\n * @event colorpickerEnable\n */\n this.element.trigger({\n type: 'colorpickerEnable',\n colorpicker: this,\n color: this.color\n });\n return true;\n }\n\n /**\n * Function triggered when clicking in one of the color adjustment bars\n *\n * @private\n * @fires mousemove\n * @param {Event} e\n * @returns {boolean}\n */\n _mousedown(e) {\n this.lastEvent.name = 'mousedown';\n this.lastEvent.e = e;\n\n if (!e.pageX && !e.pageY && e.originalEvent && e.originalEvent.touches) {\n e.pageX = e.originalEvent.touches[0].pageX;\n e.pageY = e.originalEvent.touches[0].pageY;\n }\n e.stopPropagation();\n e.preventDefault();\n\n let target = $(e.target);\n\n // detect the slider and set the limits and callbacks\n let zone = target.closest('div');\n let sl = this.options.horizontal ? this.options.slidersHorz : this.options.sliders;\n\n if (!zone.is('.colorpicker')) {\n if (zone.is('.colorpicker-saturation')) {\n this.currentSlider = $.extend({}, sl.saturation);\n } else if (zone.is('.colorpicker-hue')) {\n this.currentSlider = $.extend({}, sl.hue);\n } else if (zone.is('.colorpicker-alpha')) {\n this.currentSlider = $.extend({}, sl.alpha);\n } else {\n return false;\n }\n let offset = zone.offset();\n // reference to guide's style\n\n this.currentSlider.guide = zone.find('.colorpicker-guide')[0].style;\n this.currentSlider.left = e.pageX - offset.left;\n this.currentSlider.top = e.pageY - offset.top;\n this.mousePointer = {\n left: e.pageX,\n top: e.pageY\n };\n\n /**\n * (window.document) Triggered on mousedown for the document object,\n * so the color adjustment guide is moved to the clicked position.\n *\n * @event mousemove\n */\n $(window.document).on({\n 'mousemove.colorpicker': $.proxy(this._mousemove, this),\n 'touchmove.colorpicker': $.proxy(this._mousemove, this),\n 'mouseup.colorpicker': $.proxy(this._mouseup, this),\n 'touchend.colorpicker': $.proxy(this._mouseup, this)\n }).trigger('mousemove');\n }\n return false;\n }\n\n /**\n * Function triggered when dragging a guide inside one of the color adjustment bars.\n *\n * @private\n * @param {Event} e\n * @returns {boolean}\n */\n _mousemove(e) {\n this.lastEvent.name = 'mousemove';\n this.lastEvent.e = e;\n\n let color = !this.hasColor() ? this.createColor(this.fallbackColor) : this.color.getCopy();\n\n if (!e.pageX && !e.pageY && e.originalEvent && e.originalEvent.touches) {\n e.pageX = e.originalEvent.touches[0].pageX;\n e.pageY = e.originalEvent.touches[0].pageY;\n }\n e.stopPropagation();\n e.preventDefault();\n let left = Math.max(\n 0,\n Math.min(\n this.currentSlider.maxLeft,\n this.currentSlider.left + ((e.pageX || this.mousePointer.left) - this.mousePointer.left)\n )\n );\n let top = Math.max(\n 0,\n Math.min(\n this.currentSlider.maxTop,\n this.currentSlider.top + ((e.pageY || this.mousePointer.top) - this.mousePointer.top)\n )\n );\n\n this.currentSlider.guide.left = left + 'px';\n this.currentSlider.guide.top = top + 'px';\n if (this.currentSlider.callLeft) {\n color[this.currentSlider.callLeft].call(color, left / this.currentSlider.maxLeft);\n }\n if (this.currentSlider.callTop) {\n color[this.currentSlider.callTop].call(color, top / this.currentSlider.maxTop);\n }\n\n this.setValue(color);\n return false;\n }\n\n /**\n * Function triggered when releasing the click in one of the color adjustment bars.\n *\n * @private\n * @param {Event} e\n * @returns {boolean}\n */\n _mouseup(e) {\n this.lastEvent.name = 'mouseup';\n this.lastEvent.e = e;\n\n e.stopPropagation();\n e.preventDefault();\n $(window.document).off({\n 'mousemove.colorpicker': this._mousemove,\n 'touchmove.colorpicker': this._mousemove,\n 'mouseup.colorpicker': this._mouseup,\n 'touchend.colorpicker': this._mouseup\n });\n return false;\n }\n\n /**\n * Function triggered when the input has changed, so the colorpicker gets updated.\n *\n * @private\n * @param {Event} e\n * @returns {boolean}\n */\n _change(e) {\n this.lastEvent.name = 'change';\n this.lastEvent.e = e;\n\n let val = this.input.val();\n\n if (val !== this.toInputColorString()) {\n this.setValue(val);\n }\n }\n\n /**\n * Function triggered after a keyboard key has been released.\n *\n * @private\n * @param {Event} e\n * @returns {boolean}\n */\n _keyup(e) {\n this.lastEvent.name = 'keyup';\n this.lastEvent.e = e;\n\n let val = this.input.val();\n\n if (val !== this.toInputColorString()) {\n this.setValue(val);\n }\n }\n}\n\nexport default Colorpicker;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/Colorpicker.js","'use strict';\n\nimport tinycolor from 'tinycolor2';\n\nfunction unwrapColor(color) {\n if (color instanceof tinycolor) {\n return {\n r: color._r,\n g: color._g,\n b: color._b,\n a: color._a\n };\n }\n return color;\n}\n\n/**\n * Sanitizes a format string, so it is compatible with tinycolor,\n * or returns the same value if it is not a string.\n *\n * @param {String} format\n * @returns {String|*}\n * @private\n */\nfunction getCompatibleFormat(format) {\n if (format instanceof String || typeof format === 'string') {\n return format.replace(/a$/gi, '');\n }\n\n return format;\n}\n\n/**\n * Color manipulation class that extends the tinycolor library class.\n */\nclass Color extends tinycolor {\n /**\n * Identifier of the color instance.\n *\n * @type {int}\n * @readonly\n */\n get id() {\n return this._tc_id;\n }\n\n /**\n * Format of the parsed color.\n *\n * @type {String}\n * @readonly\n */\n get format() {\n return this._format;\n }\n\n /**\n * All options of the current instance.\n *\n * @type {{format: String, gradientType: String}}\n * @readonly\n */\n get options() {\n return {\n format: this._format,\n gradientType: this._gradientType\n };\n }\n\n /**\n * @returns {{h, s, v, a}}\n */\n get hsva() {\n return this.toHsv();\n }\n\n /**\n * @returns {{h, s, v, a}}\n */\n get hsvaRatio() {\n let hsv = this.hsva;\n\n return {\n h: hsv.h / 360,\n s: hsv.s,\n v: hsv.v,\n a: hsv.a\n };\n }\n\n /**\n * foo bar\n * @param {Color|*} color\n * @param {{format}} [options]\n * @constructor\n */\n constructor(color, options = {format: null}) {\n if (options.format) {\n options.format = getCompatibleFormat(options.format);\n }\n super(unwrapColor(color), options);\n\n /**\n * @type {Color|*}\n */\n this._originalInput = color; // keep real original color\n /**\n * Hue backup to not lose the information when saturation is 0.\n * @type {number}\n */\n this._hbak = this.hsva.h;\n /**\n * If set, it contains a reference to a previous color that caused the creation of this one.\n * @type {Color}\n */\n this.previous = null;\n }\n\n /**\n * Compares a color object with this one and returns true if it is equal or false if not.\n *\n * @param {Color} color\n * @returns {boolean}\n */\n equals(color) {\n if (!(color instanceof tinycolor)) {\n return false;\n }\n return this._r === color._r &&\n this._g === color._g &&\n this._b === color._b &&\n this._a === color._a &&\n this._roundA === color._roundA &&\n this._format === color._format &&\n this._gradientType === color._gradientType &&\n this._ok === color._ok;\n }\n\n /**\n * Imports all variables of the given color to this instance, excepting `_tc_id`.\n * @param {Color} color\n */\n importColor(color) {\n if (!(color instanceof tinycolor)) {\n throw new Error('Color.importColor: The color argument is not an instance of tinycolor.');\n }\n this._originalInput = color._originalInput;\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this._a = color._a;\n this._roundA = color._roundA;\n this._format = getCompatibleFormat(color._format);\n this._gradientType = color._gradientType;\n this._ok = color._ok;\n // omit .previous and ._tc_id import\n }\n\n /**\n * Imports the _r, _g, _b, _a, _hbak and _ok variables of the given color to this instance.\n * @param {Color} color\n */\n importRgb(color) {\n if (!color instanceof Color) {\n throw new Error('Color.importColor: The color argument is not an instance of tinycolor.');\n }\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this._a = color._a;\n this._ok = color._ok;\n this._hbak = color._hbak;\n }\n\n /**\n * @param {{h,s,v,a}} hsv\n */\n importHsv(hsv) {\n this._hbak = hsv.h;\n this.importRgb(new Color(hsv, this.options));\n }\n\n /**\n * @returns {Color}\n */\n getCopy() {\n return new Color(this.hsva, this.options);\n }\n\n /**\n * @returns {Color}\n */\n getHueOnlyCopy() {\n return new Color({h: this._hbak ? this._hbak : this.hsva.h, s: 100, v: 100}, this.options);\n }\n\n /**\n * @returns {Color}\n */\n getOpaqueCopy() {\n return new Color(Object.assign({}, this.hsva, {a: 1}), this.options);\n }\n\n /**\n * @param {number} h Degrees from 0 to 360\n */\n setHue(h) {\n this.importHsv(Object.assign({}, this.hsva, {h: h}));\n }\n\n /**\n * @param {number} s Percent from 0 o 100\n */\n setSaturation(s) {\n this.importHsv(Object.assign({}, this.hsva, {s: s}));\n }\n\n /**\n * @param {number} v Percent from 0 o 100\n */\n setBrightness(v) {\n this.importHsv(Object.assign({}, this.hsva, {v: v}));\n }\n\n /**\n * @param {number} h Ratio from 0.0 to 1.0\n */\n setHueRatio(h) {\n if (h === 0) {\n return;\n }\n this.setHue((1 - h) * 360);\n }\n\n /**\n * @param {number} s Ratio from 0.0 to 1.0\n */\n setSaturationRatio(s) {\n this.setSaturation(s);\n }\n\n /**\n * @param {number} v Ratio from 0.0 to 1.0\n */\n setBrightnessRatio(v) {\n this.setBrightness(1 - v);\n }\n\n /**\n * @param {number} a Ratio from 0.0 to 1.0\n */\n setAlphaRatio(a) {\n this.setAlpha(1 - a);\n }\n\n /**\n * @returns {boolean}\n */\n isTransparent() {\n return this._a === 0;\n }\n\n /**\n * @returns {boolean}\n */\n hasTransparency() {\n return this._a !== 1;\n }\n\n /**\n * @param {string|null} [format] One of \"rgb\", \"prgb\", \"hex\"/\"hex6\", \"hex3\", \"hex8\", \"hsl\", \"hsv\"/\"hsb\", \"name\"\n * @returns {String}\n */\n toString(format = null) {\n format = format ? getCompatibleFormat(format) : this.format;\n\n let colorStr = super.toString(format);\n\n if (colorStr && colorStr.match(/^#[0-9a-f]{3,8}$/i)) {\n // Support transparent for hex formats\n if (this.isTransparent() && (this._r === 0) && (this._g === 0) && (this._b === 0)) {\n return 'transparent';\n }\n }\n\n return colorStr;\n }\n}\n\nexport default Color;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/Color.js","// TinyColor v1.4.1\n// https://github.com/bgrins/TinyColor\n// Brian Grinstead, MIT License\n\n(function(Math) {\n\nvar trimLeft = /^\\s+/,\n trimRight = /\\s+$/,\n tinyCounter = 0,\n mathRound = Math.round,\n mathMin = Math.min,\n mathMax = Math.max,\n mathRandom = Math.random;\n\nfunction tinycolor (color, opts) {\n\n color = (color) ? color : '';\n opts = opts || { };\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n\n var rgb = inputToRGB(color);\n this._originalInput = color,\n this._r = rgb.r,\n this._g = rgb.g,\n this._b = rgb.b,\n this._a = rgb.a,\n this._roundA = mathRound(100*this._a) / 100,\n this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) { this._r = mathRound(this._r); }\n if (this._g < 1) { this._g = mathRound(this._g); }\n if (this._b < 1) { this._b = mathRound(this._b); }\n\n this._ok = rgb.ok;\n this._tc_id = tinyCounter++;\n}\n\ntinycolor.prototype = {\n isDark: function() {\n return this.getBrightness() < 128;\n },\n isLight: function() {\n return !this.isDark();\n },\n isValid: function() {\n return this._ok;\n },\n getOriginalInput: function() {\n return this._originalInput;\n },\n getFormat: function() {\n return this._format;\n },\n getAlpha: function() {\n return this._a;\n },\n getBrightness: function() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r/255;\n GsRGB = rgb.g/255;\n BsRGB = rgb.b/255;\n\n if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);}\n if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);}\n if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);}\n return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);\n },\n setAlpha: function(value) {\n this._a = boundAlpha(value);\n this._roundA = mathRound(100*this._a) / 100;\n return this;\n },\n toHsv: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };\n },\n toHsvString: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);\n return (this._a == 1) ?\n \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" :\n \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \"+ this._roundA + \")\";\n },\n toHsl: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };\n },\n toHslString: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);\n return (this._a == 1) ?\n \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" :\n \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \"+ this._roundA + \")\";\n },\n toHex: function(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function(allow3Char) {\n return '#' + this.toHex(allow3Char);\n },\n toHex8: function(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function(allow4Char) {\n return '#' + this.toHex8(allow4Char);\n },\n toRgb: function() {\n return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };\n },\n toRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \")\" :\n \"rgba(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function() {\n return { r: mathRound(bound01(this._r, 255) * 100) + \"%\", g: mathRound(bound01(this._g, 255) * 100) + \"%\", b: mathRound(bound01(this._b, 255) * 100) + \"%\", a: this._a };\n },\n toPercentageRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%)\" :\n \"rgba(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function() {\n if (this._a === 0) {\n return \"transparent\";\n }\n\n if (this._a < 1) {\n return false;\n }\n\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function(secondColor) {\n var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n\n return \"progid:DXImageTransform.Microsoft.gradient(\"+gradientType+\"startColorstr=\"+hex8String+\",endColorstr=\"+secondHex8String+\")\";\n },\n toString: function(format) {\n var formatSet = !!format;\n format = format || this._format;\n\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n\n return formattedString || this.toHexString();\n },\n clone: function() {\n return tinycolor(this.toString());\n },\n\n _applyModification: function(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function() {\n return this._applyModification(lighten, arguments);\n },\n brighten: function() {\n return this._applyModification(brighten, arguments);\n },\n darken: function() {\n return this._applyModification(darken, arguments);\n },\n desaturate: function() {\n return this._applyModification(desaturate, arguments);\n },\n saturate: function() {\n return this._applyModification(saturate, arguments);\n },\n greyscale: function() {\n return this._applyModification(greyscale, arguments);\n },\n spin: function() {\n return this._applyModification(spin, arguments);\n },\n\n _applyCombination: function(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function() {\n return this._applyCombination(analogous, arguments);\n },\n complement: function() {\n return this._applyCombination(complement, arguments);\n },\n monochromatic: function() {\n return this._applyCombination(monochromatic, arguments);\n },\n splitcomplement: function() {\n return this._applyCombination(splitcomplement, arguments);\n },\n triad: function() {\n return this._applyCombination(triad, arguments);\n },\n tetrad: function() {\n return this._applyCombination(tetrad, arguments);\n }\n};\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function(color, opts) {\n if (typeof color == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n }\n else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n\n return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n// \"red\"\n// \"#f00\" or \"f00\"\n// \"#ff0000\" or \"ff0000\"\n// \"#ff000000\" or \"ff000000\"\n// \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n// \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n// \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n// \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n// \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n// \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n// \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n\n var rgb = { r: 0, g: 0, b: 0 };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n\n if (typeof color == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n\n a = boundAlpha(a);\n\n return {\n ok: ok,\n format: color.format || format,\n r: mathMin(255, mathMax(rgb.r, 0)),\n g: mathMin(255, mathMax(rgb.g, 0)),\n b: mathMin(255, mathMax(rgb.b, 0)),\n a: a\n };\n}\n\n\n// Conversion Functions\n// --------------------\n\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// \n\n// `rgbToRgb`\n// Handle bounds / percentage checking to conform to CSS color spec\n// \n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b){\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n}\n\n// `rgbToHsl`\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, l = (max + min) / 2;\n\n if(max == min) {\n h = s = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n\n h /= 6;\n }\n\n return { h: h, s: s, l: l };\n}\n\n// `hslToRgb`\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n var r, g, b;\n\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n\n function hue2rgb(p, q, t) {\n if(t < 0) t += 1;\n if(t > 1) t -= 1;\n if(t < 1/6) return p + (q - p) * 6 * t;\n if(t < 1/2) return q;\n if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n return p;\n }\n\n if(s === 0) {\n r = g = b = l; // achromatic\n }\n else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, v = max;\n\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if(max == min) {\n h = 0; // achromatic\n }\n else {\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h /= 6;\n }\n return { h: h, s: s, v: v };\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\n function hsvToRgb(h, s, v) {\n\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHex`\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToHex`\n// Converts an RGBA color plus alpha transparency to hex\n// Assumes r, g, b are contained in the set [0, 255] and\n// a in [0, 1]. Returns a 4 or 8 character rgba hex\nfunction rgbaToHex(r, g, b, a, allow4Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16)),\n pad2(convertDecimalToHex(a))\n ];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToArgbHex`\n// Converts an RGBA color to an ARGB Hex8 string\n// Rarely used, but required for \"toFilter()\"\nfunction rgbaToArgbHex(r, g, b, a) {\n\n var hex = [\n pad2(convertDecimalToHex(a)),\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n return hex.join(\"\");\n}\n\n// `equals`\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) { return false; }\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\n\ntinycolor.random = function() {\n return tinycolor.fromRatio({\n r: mathRandom(),\n g: mathRandom(),\n b: mathRandom()\n });\n};\n\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// \n\nfunction desaturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction saturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction greyscale(color) {\n return tinycolor(color).desaturate(100);\n}\n\nfunction lighten (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\nfunction brighten(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var rgb = tinycolor(color).toRgb();\n rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));\n rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));\n rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));\n return tinycolor(rgb);\n}\n\nfunction darken (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\n// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n// Values outside of this range will be wrapped into this range.\nfunction spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n}\n\n// Combination Functions\n// ---------------------\n// Thanks to jQuery xColor for some of the ideas behind these\n// \n\nfunction complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n}\n\nfunction triad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction tetrad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),\n tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})\n ];\n}\n\nfunction analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n\n for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n}\n\nfunction monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h, s = hsv.s, v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n\n while (results--) {\n ret.push(tinycolor({ h: h, s: s, v: v}));\n v = (v + modification) % 1;\n }\n\n return ret;\n}\n\n// Utility Functions\n// ---------------------\n\ntinycolor.mix = function(color1, color2, amount) {\n amount = (amount === 0) ? 0 : (amount || 50);\n\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n\n var p = amount / 100;\n\n var rgba = {\n r: ((rgb2.r - rgb1.r) * p) + rgb1.r,\n g: ((rgb2.g - rgb1.g) * p) + rgb1.g,\n b: ((rgb2.b - rgb1.b) * p) + rgb1.b,\n a: ((rgb2.a - rgb1.a) * p) + rgb1.a\n };\n\n return tinycolor(rgba);\n};\n\n\n// Readability Functions\n// ---------------------\n// false\n// tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\ntinycolor.isReadable = function(color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n\n out = false;\n\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n\n};\n\n// `mostReadable`\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// Optionally returns Black or White if the most readable color is unreadable.\n// *Example*\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\ntinycolor.mostReadable = function(baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size ;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors ;\n level = args.level;\n size = args.size;\n\n for (var i= 0; i < colorList.length ; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n\n if (tinycolor.isReadable(baseColor, bestColor, {\"level\":level,\"size\":size}) || !includeFallbackColors) {\n return bestColor;\n }\n else {\n args.includeFallbackColors=false;\n return tinycolor.mostReadable(baseColor,[\"#fff\", \"#000\"],args);\n }\n};\n\n\n// Big List of Colors\n// ------------------\n// \nvar names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n};\n\n// Make it easy to access colors via `hexNames[hex]`\nvar hexNames = tinycolor.hexNames = flip(names);\n\n\n// Utilities\n// ---------\n\n// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\nfunction flip(o) {\n var flipped = { };\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n a = parseFloat(a);\n\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n\n return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n if (isOnePointZero(n)) { n = \"100%\"; }\n\n var processPercent = isPercentage(n);\n n = mathMin(max, mathMax(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if ((Math.abs(n - max) < 0.000001)) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return (n % max) / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n return mathMin(1, mathMax(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// \nfunction isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n return typeof n === \"string\" && n.indexOf('%') != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n return c.length == 1 ? '0' + c : '' + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n if (n <= 1) {\n n = (n * 100) + \"%\";\n }\n\n return n;\n}\n\n// Converts a decimal to a hex value\nfunction convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n return (parseIntFromHex(h) / 255);\n}\n\nvar matchers = (function() {\n\n // \n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // \n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n})();\n\n// `isValidCSSUnit`\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see `matchers` above for definition).\nfunction isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n}\n\n// `stringInputToObject`\n// Permissive string parsing. Take in a number of formats, and output an object\n// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\nfunction stringInputToObject(color) {\n\n color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n }\n else if (color == 'transparent') {\n return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if ((match = matchers.rgb.exec(color))) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n if ((match = matchers.rgba.exec(color))) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n if ((match = matchers.hsl.exec(color))) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n if ((match = matchers.hsla.exec(color))) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n if ((match = matchers.hsv.exec(color))) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n if ((match = matchers.hsva.exec(color))) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n if ((match = matchers.hex8.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex6.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if ((match = matchers.hex4.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n a: convertHexToDecimal(match[4] + '' + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex3.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n\n return false;\n}\n\nfunction validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\"level\":\"AA\", \"size\":\"small\"};\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\"level\":level, \"size\":size};\n}\n\n// Node: Export function\nif (typeof module !== \"undefined\" && module.exports) {\n module.exports = tinycolor;\n}\n// AMD/requirejs: Define the module\nelse if (typeof define === 'function' && define.amd) {\n define(function () {return tinycolor;});\n}\n// Browser: Expose to window\nelse {\n window.tinycolor = tinycolor;\n}\n\n})(Math);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/tinycolor2/tinycolor.js\n// module id = 6\n// module chunks = 0 1","'use strict';\n/**\n * @module\n */\n\n/**\n * Colorpicker default options\n */\nexport default {\n /**\n * If true, loads the Debugger extension automatically into the current instance\n * @type {boolean}\n * @default false\n */\n debug: false,\n /**\n * Forces a color, ignoring the one from the elements value or data-color attribute.\n *\n * @type {(String|Color|boolean)}\n * @default false\n */\n color: false,\n /**\n * Forces an specific color format. If false, it will be automatically detected the first time,\n * but if null it will be always recalculated.\n *\n * Note that the ending 'a' of the format meaning \"alpha\" has currently no effect, meaning that rgb is the same as\n * rgba excepting if the alpha channel is disabled (see useAlpha).\n *\n * @type {('rgb'|'rgba'|'prgb'|'prgba'|'hex'|'hex3'|'hex6'|'hex8'|'hsl'|'hsla'|'hsv'|'hsva'|'name'|boolean)}\n * @default false\n */\n format: false,\n /**\n * Horizontal mode layout.\n *\n * If true, the hue and alpha channel bars will be rendered horizontally, above the saturation selector.\n *\n * @type {boolean}\n * @default false\n */\n horizontal: false,\n /**\n * Forces to show the colorpicker as an inline element\n *\n * @type {boolean}\n * @default false\n */\n inline: false,\n /**\n * Children input CSS selector\n *\n * @type {String}\n * @default 'input'\n */\n input: 'input',\n /**\n * Colorpicker container CSS selector. If given, the colorpicker will be placed inside this container.\n * If true, the colorpicker element itself will be used as the container.\n *\n * @type {String|boolean}\n * @default false\n */\n container: false, // container selector\n /**\n * Children color component CSS selector.\n * If it exists, the child element background will be changed on color change.\n *\n * @type {String|boolean}\n * @default '.add-on, .input-group-addon'\n */\n component: '.add-on, .input-group-addon',\n /**\n * Fallback color to use when the given color is invalid.\n * If false, the latest valid color will be used as a fallback.\n *\n * @type {String|Color|boolean}\n * @default false\n */\n fallbackColor: false,\n /**\n * If enabled, the input content will be replaced always with a valid color,\n * if not enabled the invalid color will be left in the input, but valid in the internal color object.\n *\n * @type {boolean}\n * @default false\n */\n autoInputFallback: false,\n /**\n * If true a hash will be prepended to hexadecimal colors.\n * If false, the hash will be removed.\n * This only affects the input values.\n *\n * @type {boolean}\n * @default false\n */\n useHashPrefix: true,\n /**\n * If true or false the alpha adjustment bar will be displayed no matter what.\n * If false it will be always hidden and alpha channel won't be allowed programmatically for this instance,\n * so the selected or typed color will be always opaque.\n *\n * @type {boolean}\n * @default true\n */\n useAlpha: true,\n /**\n * This only applies when the color format is hexadecimal.\n * If true, the alpha channel will be allowed for hexadecimal formatted colors, making them having 4 or 8 chars\n * (RGBA or RRGGBBAA). This format is not yet supported in all modern browsers, so it is disabled by default.\n * If false, rgba will be used whenever there is an alpha change different than 1 and the color format is\n * automatic.\n *\n * @type {boolean}\n * @default true\n */\n enableHex8: false,\n /**\n * Vertical sliders configuration\n * @type {Object}\n */\n sliders: {\n saturation: {\n maxLeft: 100,\n maxTop: 100,\n callLeft: 'setSaturationRatio',\n callTop: 'setBrightnessRatio'\n },\n hue: {\n maxLeft: 0,\n maxTop: 100,\n callLeft: false,\n callTop: 'setHueRatio'\n },\n alpha: {\n maxLeft: 0,\n maxTop: 100,\n callLeft: false,\n callTop: 'setAlphaRatio'\n }\n },\n /**\n * Horizontal sliders configuration\n * @type {Object}\n */\n slidersHorz: {\n saturation: {\n maxLeft: 100,\n maxTop: 100,\n callLeft: 'setSaturationRatio',\n callTop: 'setBrightnessRatio'\n },\n hue: {\n maxLeft: 100,\n maxTop: 0,\n callLeft: 'setHueRatio',\n callTop: false\n },\n alpha: {\n maxLeft: 100,\n maxTop: 0,\n callLeft: 'setAlphaRatio',\n callTop: false\n }\n },\n /**\n * Colorpicker popup alignment.\n * For now only right is supported.\n *\n * @type {('right')}\n * @default 'right'\n */ // TODO: add 'left' and 'auto' support.\n align: 'right',\n /**\n * Custom class to be added to the colorpicker element\n *\n * @type {String}\n */\n customClass: null,\n /**\n * Colorpicker widget template\n * @type {String}\n * @example\n * \n *
        \n *
        \n *
        \n *
        \n *
        \n *
        \n */\n template: `
        \n
        \n
        \n
        `,\n /**\n *\n * Associative object with the extension class name and its config.\n * Colorpicker comes with many bundled extensions: debugger, palette, preview and swatches (a superset of Palette).\n *\n * @type {Object}\n * @example\n * extensions: [\n * {\n * name: 'swatches'\n * colors: {\n * 'primary': '#337ab7',\n * 'success': '#5cb85c',\n * 'info': '#5bc0de',\n * 'warning': '#f0ad4e',\n * 'danger': '#d9534f'\n * },\n * namesAsValues: true\n * }\n * ]\n */\n extensions: [\n {\n name: 'preview',\n showText: false\n }\n ]\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/options.js","import Debugger from './Debugger';\nimport Preview from './Preview';\nimport Swatches from './Swatches';\nimport Palette from './Palette';\n\nexport {\n Debugger, Preview, Swatches, Palette\n};\n\nexport default {\n 'debugger': Debugger,\n 'preview': Preview,\n 'swatches': Swatches,\n 'palette': Palette\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/extensions/index.js","'use strict';\n\nimport Extension from 'Extension';\nimport $ from 'jquery';\n\nclass Debugger extends Extension {\n constructor(colorpicker, options = {}) {\n super(colorpicker, options);\n\n /**\n * @type {number}\n */\n this.eventCounter = 0;\n if (this.colorpicker.hasInput()) {\n this.colorpicker.input.on('change.colorpicker-ext', $.proxy(this.onChangeInput, this));\n }\n }\n\n /**\n * @fires colorpickerDebug\n * @param {string} eventName\n * @param {*} args\n */\n log(eventName, ...args) {\n this.eventCounter += 1;\n\n let logMessage = `#${this.eventCounter}: Colorpicker#${this.colorpicker.id} [${eventName}]`;\n\n console.debug(logMessage, ...args);\n\n /**\n * (Colorpicker) Fired by the ConsoleDebug extension whenever it logs something\n *\n * @event colorpickerDebug\n */\n this.colorpicker.element.trigger({\n type: 'colorpickerDebug',\n colorpicker: this.colorpicker,\n color: this.color,\n debug: {\n debugger: this,\n eventName: eventName,\n logArgs: args,\n logMessage: logMessage\n }\n });\n }\n\n resolveColor(color) {\n this.log('resolveColor()', color);\n return false;\n }\n\n onCreate(event) {\n this.log('colorpickerCreate');\n return super.onCreate(event);\n }\n\n onDestroy(event) {\n this.log('colorpickerDestroy');\n this.eventCounter = 0;\n\n if (this.colorpicker.hasInput()) {\n this.colorpicker.input.off('.colorpicker-ext');\n }\n\n return super.onDestroy(event);\n }\n\n onUpdate(event) {\n this.log('colorpickerUpdate');\n }\n\n /**\n * @listens _change\n * @param {Event} event\n */\n onChangeInput(event) {\n this.log('input:change.colorpicker', event.value, event.color);\n }\n\n onChange(event) {\n this.log('colorpickerChange', event.value, event.color);\n }\n\n onInvalid(event) {\n this.log('colorpickerInvalid', event.value, event.color);\n }\n\n onHide(event) {\n this.log('colorpickerHide');\n this.eventCounter = 0;\n }\n\n onShow(event) {\n this.log('colorpickerShow');\n }\n\n onDisable(event) {\n this.log('colorpickerDisable');\n }\n\n onEnable(event) {\n this.log('colorpickerEnable');\n }\n}\n\nexport default Debugger;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/extensions/Debugger.js","'use strict';\n\nimport Extension from 'Extension';\nimport $ from 'jquery';\n\nclass Preview extends Extension {\n constructor(colorpicker, options = {}) {\n super(colorpicker, Object.assign({},\n {\n template: '
        ',\n showText: true,\n format: colorpicker.format\n },\n options\n ));\n\n this.element = $(this.options.template);\n this.elementInner = this.element.find('div');\n }\n\n onCreate(event) {\n super.onCreate(event);\n this.colorpicker.picker.append(this.element);\n }\n\n onUpdate(event) {\n super.onUpdate(event);\n\n this.elementInner\n .css('backgroundColor', event.color.toRgbString());\n\n if (this.options.showText) {\n this.elementInner\n .html(event.color.toString(this.options.format || this.colorpicker.format));\n\n if (event.color.isDark()) {\n this.elementInner.css('color', 'white');\n } else {\n this.elementInner.css('color', 'black');\n }\n }\n }\n}\n\nexport default Preview;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/extensions/Preview.js","'use strict';\n\nimport Palette from './Palette';\nimport $ from 'jquery';\n\nlet defaults = {\n barTemplate: '
        ',\n swatchTemplate: ''\n};\n\nclass Swatches extends Palette {\n constructor(colorpicker, options = {}) {\n super(colorpicker, Object.assign({}, defaults, options));\n }\n\n isEnabled() {\n return this.getLength() > 0;\n }\n\n onCreate(event) {\n super.onCreate(event);\n\n if (!this.isEnabled()) {\n return;\n }\n\n let colorpicker = this.colorpicker,\n swatchContainer = $(this.options.barTemplate),\n isAliased = (this.options.namesAsValues === true) && !Array.isArray(this.colors);\n\n $.each(this.colors, (name, value) => {\n let $swatch = $(this.options.swatchTemplate)\n .css('background-color', value)\n .attr('data-name', name)\n .attr('data-value', value)\n .attr('title', `${name}: ${value}`);\n\n $swatch.on('mousedown.colorpicker touchstart.colorpicker',\n function (e) {\n e.preventDefault();\n colorpicker.setValue(isAliased ? $(this).data('name') : $(this).data('value'));\n }\n );\n swatchContainer.append($swatch);\n });\n\n colorpicker.picker.append(swatchContainer);\n }\n}\n\nexport default Swatches;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/extensions/Swatches.js"],"sourceRoot":""} \ No newline at end of file diff --git a/src/main/resources/static/plugins/colorpicker/js/bootstrap-colorpicker.min.js b/src/main/resources/static/plugins/colorpicker/js/bootstrap-colorpicker.min.js deleted file mode 100755 index 60ccc6862..000000000 --- a/src/main/resources/static/plugins/colorpicker/js/bootstrap-colorpicker.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * Bootstrap Colorpicker - Simple and customizable colorpicker component for Twitter Bootstrap. - * @package bootstrap-colorpicker - * @version v3.0.0-wip - * @license MIT - * @link https://farbelous.github.io/bootstrap-colorpicker/ - * @link https://github.com/farbelous/bootstrap-colorpicker.git - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("jQuery")):"function"==typeof define&&define.amd?define("bootstrap-colorpicker",["jQuery"],e):"object"==typeof exports?exports["bootstrap-colorpicker"]=e(require("jQuery")):t["bootstrap-colorpicker"]=e(t.jQuery)}(this,function(t){return function(t){function e(r){if(o[r])return o[r].exports;var i=o[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var o={};return e.m=t,e.c=o,e.d=function(t,o,r){e.o(t,o)||Object.defineProperty(t,o,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var o=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(o,"a",o),o},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=3)}([function(e,o){e.exports=t},function(t,e,o){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:{};if(r(this,t),this.colorpicker=e,this.options=o,!this.colorpicker.element||!this.colorpicker.element.length)throw new Error("Extension: this.colorpicker.element is not valid");this.colorpicker.element.on("colorpickerCreate.colorpicker-ext",s.default.proxy(this.onCreate,this)),this.colorpicker.element.on("colorpickerDestroy.colorpicker-ext",s.default.proxy(this.onDestroy,this)),this.colorpicker.element.on("colorpickerUpdate.colorpicker-ext",s.default.proxy(this.onUpdate,this)),this.colorpicker.element.on("colorpickerChange.colorpicker-ext",s.default.proxy(this.onChange,this)),this.colorpicker.element.on("colorpickerInvalid.colorpicker-ext",s.default.proxy(this.onInvalid,this)),this.colorpicker.element.on("colorpickerShow.colorpicker-ext",s.default.proxy(this.onShow,this)),this.colorpicker.element.on("colorpickerHide.colorpicker-ext",s.default.proxy(this.onHide,this)),this.colorpicker.element.on("colorpickerEnable.colorpicker-ext",s.default.proxy(this.onEnable,this)),this.colorpicker.element.on("colorpickerDisable.colorpicker-ext",s.default.proxy(this.onDisable,this))}return i(t,[{key:"resolveColor",value:function(t){return!1}},{key:"onCreate",value:function(t){}},{key:"onDestroy",value:function(t){this.colorpicker.element.off(".colorpicker-ext")}},{key:"onUpdate",value:function(t){}},{key:"onChange",value:function(t){}},{key:"onInvalid",value:function(t){}},{key:"onHide",value:function(t){}},{key:"onShow",value:function(t){}},{key:"onDisable",value:function(t){}},{key:"onEnable",value:function(t){}}]),t}();e.default=a},function(t,e,o){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function n(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a=function(){function t(t,e){for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:{};r(this,e);var n=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,Object.assign({},u,o)));return Array.isArray(n.options.colors)||"object"===s(n.options.colors)||(n.options.colors=null),n}return n(e,t),a(e,[{key:"colors",get:function(){return this.options.colors}}]),a(e,[{key:"getLength",value:function(){return this.options.colors?Array.isArray(this.options.colors)?this.options.colors.length:"object"===s(this.options.colors)?Object.keys(this.options.colors).length:0:0}},{key:"resolveColor",value:function(t){return!(this.getLength()<=0)&&(Array.isArray(this.options.colors)?this.options.colors.indexOf(t)>=0?t:this.options.colors.indexOf(t.toUpperCase())>=0?t.toUpperCase():this.options.colors.indexOf(t.toLowerCase())>=0&&t.toLowerCase():"object"===s(this.options.colors)&&(this.options.namesAsValues?this.getName(t,this.getName("#"+t,this.getValue(t,!1))):this.getValue(t,!1)))}},{key:"getName",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if("string"!=typeof t||!this.options.colors)return e;for(var o in this.options.colors)if(this.options.colors.hasOwnProperty(o)&&this.options.colors[o].toLowerCase()===t.toLowerCase())return o;return e}},{key:"getValue",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return"string"==typeof t&&this.options.colors&&this.options.colors.hasOwnProperty(t)?this.options.colors[t]:e}}]),e}(c.default);e.default=h},function(t,e,o){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n=o(4),s=r(n),a=o(0),l=r(a),c="colorpicker";l.default[c]=s.default,l.default.fn[c]=function(t){var e=Array.prototype.slice.call(arguments,1),o=1===this.length,r=null,n=this.each(function(){var o=(0,l.default)(this),n=o.data(c),a="object"===(void 0===t?"undefined":i(t))?t:{};n||(n=new s.default(this,a),o.data(c,n)),"string"==typeof t?"colorpicker"===t?r=n:l.default.isFunction(n[t])?r=n[t].apply(n,e):(e.length&&(n[t]=e[0]),r=n[t]):r=o});return o?r:n},l.default.fn[c].constructor=s.default},function(t,e,o){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var o=0;o2&&void 0!==arguments[2]?arguments[2]:{},r=t instanceof c.default?t:new e(this,o);return this.extensions.push(r),r}},{key:"destroy",value:function(){this.picker.remove(),this.element.removeData("colorpicker","color").off(".colorpicker"),this.hasInput()&&this.input.off(".colorpicker"),!1!==this.component&&this.component.off(".colorpicker"),this.element.removeClass("colorpicker-element"),this.element.trigger({type:"colorpickerDestroy",colorpicker:this,color:this.color})}},{key:"hasColor",value:function(){return this.color instanceof a.default}},{key:"toInputColorString",value:function(){var t=this.toCssColorString();return t?(!1===this.options.useHashPrefix&&(t=t.replace(/^#/g,"")),this._resolveColor(t)):t}},{key:"toCssColorString",value:function(){return this.hasColor()?this.color.toString(this.format):""}},{key:"_reposition",value:function(t){if(this.lastEvent.name="reposition",this.lastEvent.e=t,!1!==this.options.inline||this.options.container)return!1;var e=this.container&&this.container[0]!==window.document.body?"position":"offset",o=this.component||this.element,r=o[e]();return"right"===this.options.align&&(r.left-=this.picker.outerWidth()-o.outerWidth()),this.picker.css({top:r.top+o.outerHeight(),left:r.left}),!0}},{key:"show",value:function(t){return this.lastEvent.name="show",this.lastEvent.e=t,!this.isVisible()&&!this.isDisabled()&&(this.picker.addClass("colorpicker-visible").removeClass("colorpicker-hidden"),this._reposition(t),(0,g.default)(window).on("resize.colorpicker",g.default.proxy(this._reposition,this)),!t||this.hasInput()&&"color"!==this.input.attr("type")||t.stopPropagation&&t.preventDefault&&(t.stopPropagation(),t.preventDefault()),!this.component&&this.input||!1!==this.options.inline||(0,g.default)(window.document).on({"mousedown.colorpicker":g.default.proxy(this.hide,this)}),this.element.trigger({type:"colorpickerShow",colorpicker:this,color:this.color}),!0)}},{key:"hide",value:function(t){return this.lastEvent.name="hide",this.lastEvent.e=t,!this.isHidden()&&((void 0===t||!t.target||!((0,g.default)(t.currentTarget).parents(".colorpicker").length>0||(0,g.default)(t.target).parents(".colorpicker").length>0))&&(this.picker.addClass("colorpicker-hidden").removeClass("colorpicker-visible"),(0,g.default)(window).off("resize.colorpicker",this._reposition),(0,g.default)(window.document).off({"mousedown.colorpicker":this.hide}),this.element.trigger({type:"colorpickerHide",colorpicker:this,color:this.color}),!0))}},{key:"isVisible",value:function(){return this.picker.hasClass("colorpicker-visible")&&!this.picker.hasClass("colorpicker-hidden")}},{key:"isHidden",value:function(){return this.picker.hasClass("colorpicker-hidden")&&!this.picker.hasClass("colorpicker-visible")}},{key:"_updateInput",value:function(){if(this.hasInput()){var t=this.toInputColorString();if(t===this.input.prop("value"))return;this.input.prop("value",t||""),this.input.trigger({type:"change",colorpicker:this,color:this.color,value:t})}}},{key:"_updatePicker",value:function(){if(this.hasColor()){var t=!1===this.options.horizontal,e=t?this.options.sliders:this.options.slidersHorz,o=this.picker.find(".colorpicker-saturation .colorpicker-guide"),r=this.picker.find(".colorpicker-hue .colorpicker-guide"),i=this.picker.find(".colorpicker-alpha .colorpicker-guide"),n=this.color.hsvaRatio;r.length&&r.css(t?"top":"left",(t?e.hue.maxTop:e.hue.maxLeft)*(1-n.h)),i.length&&i.css(t?"top":"left",(t?e.alpha.maxTop:e.alpha.maxLeft)*(1-n.a)),o.length&&o.css({top:e.saturation.maxTop-n.v*e.saturation.maxTop,left:n.s*e.saturation.maxLeft}),this.picker.find(".colorpicker-saturation").css("backgroundColor",this.color.getHueOnlyCopy().toHexString()),this.picker.find(".colorpicker-alpha").css("backgroundColor",this.color.toString("hex6"))}}},{key:"_updateComponent",value:function(){if(this.hasColor()&&!1!==this.component){var t=this.component.find("i").eq(0);t.length>0?t.css({backgroundColor:this.toCssColorString()}):this.component.css({backgroundColor:this.toCssColorString()})}}},{key:"_shouldUpdate",value:function(){return this.hasColor()&&!1!==this.getValue(!1)}},{key:"update",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this._shouldUpdate()||!0===t){this._updateComponent();!0!==this.options.autoInputFallback&&"keyup"===this.lastEvent.name||this._updateInput(),this._updatePicker(),this.element.trigger({type:"colorpickerUpdate",colorpicker:this,color:this.color})}}},{key:"getValue",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;t=void 0===t?this.fallbackColor:t;var e=[],o=!1;return this.hasInput()&&(e.push(this.input.val()),e.push(this.input.data("color"))),e.push(this.element.data("color")),e.map(function(t){t&&!1===o&&(o=t)}),o=!1===o?t:o,o instanceof a.default?o.toString(this.format):o}},{key:"setValue",value:function(t){if(!this.hasColor()||!this.color.equals(t)){var e=!!t&&this.createColor(t);if(this.hasColor()||e){var o=this.hasColor()&&!e;this.color=e,this.element.trigger({type:"colorpickerChange",colorpicker:this,color:this.color,value:t}),this.update(o)}}}},{key:"createColor",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=new a.default(this._resolveColor(t),{format:this.format});if(!o.isValid()){var r=o,i=void 0;if(e&&(i=this.fallbackColor instanceof a.default&&this.fallbackColor.isValid()?this.fallbackColor:this._resolveColor(this.fallbackColor),o=new a.default(i,{format:this.format}),!o.isValid()&&e))throw new Error("The fallback color is invalid.");o.previous=r,this.element.trigger({type:"colorpickerInvalid",colorpicker:this,color:o,value:t})}if(!this.isAlphaEnabled()&&o.hasTransparency()&&o.setAlpha(1),!this.hasColor())return o;var n=o.hsvaRatio,s=this.color.hsvaRatio;return 0===n.s&&0===n.h&&0!==s.h&&o.setHueRatio(s.h),!this.isAlphaEnabled()&&o.hasTransparency()&&o.setAlpha(1),o}},{key:"isInvalidColor",value:function(){return!this.hasColor()||!this.color.isValid()||!!this.color.previous}},{key:"isAlphaEnabled",value:function(){return!0===this.options.useAlpha}},{key:"_resolveColor",value:function(t){var e=!1;return g.default.each(this.extensions,function(o,r){!1===e&&(e=r.resolveColor(t))}),!1!==e&&(t=e),t}},{key:"hasInput",value:function(){return!1!==this.input}},{key:"isDisabled",value:function(){return!0===this.disabled}},{key:"disable",value:function(){return this.hasInput()&&this.input.prop("disabled",!0),this.disabled=!0,this.element.trigger({type:"colorpickerDisable",colorpicker:this,color:this.color}),!0}},{key:"enable",value:function(){return this.hasInput()&&this.input.prop("disabled",!1),this.disabled=!1,this.element.trigger({type:"colorpickerEnable",colorpicker:this,color:this.color}),!0}},{key:"_mousedown",value:function(t){this.lastEvent.name="mousedown",this.lastEvent.e=t,!t.pageX&&!t.pageY&&t.originalEvent&&t.originalEvent.touches&&(t.pageX=t.originalEvent.touches[0].pageX,t.pageY=t.originalEvent.touches[0].pageY),t.stopPropagation(),t.preventDefault();var e=(0,g.default)(t.target),o=e.closest("div"),r=this.options.horizontal?this.options.slidersHorz:this.options.sliders;if(!o.is(".colorpicker")){if(o.is(".colorpicker-saturation"))this.currentSlider=g.default.extend({},r.saturation);else if(o.is(".colorpicker-hue"))this.currentSlider=g.default.extend({},r.hue);else{if(!o.is(".colorpicker-alpha"))return!1;this.currentSlider=g.default.extend({},r.alpha)}var i=o.offset();this.currentSlider.guide=o.find(".colorpicker-guide")[0].style,this.currentSlider.left=t.pageX-i.left,this.currentSlider.top=t.pageY-i.top,this.mousePointer={left:t.pageX,top:t.pageY},(0,g.default)(window.document).on({"mousemove.colorpicker":g.default.proxy(this._mousemove,this),"touchmove.colorpicker":g.default.proxy(this._mousemove,this),"mouseup.colorpicker":g.default.proxy(this._mouseup,this),"touchend.colorpicker":g.default.proxy(this._mouseup,this)}).trigger("mousemove")}return!1}},{key:"_mousemove",value:function(t){this.lastEvent.name="mousemove",this.lastEvent.e=t;var e=this.hasColor()?this.color.getCopy():this.createColor(this.fallbackColor);!t.pageX&&!t.pageY&&t.originalEvent&&t.originalEvent.touches&&(t.pageX=t.originalEvent.touches[0].pageX,t.pageY=t.originalEvent.touches[0].pageY),t.stopPropagation(),t.preventDefault();var o=Math.max(0,Math.min(this.currentSlider.maxLeft,this.currentSlider.left+((t.pageX||this.mousePointer.left)-this.mousePointer.left))),r=Math.max(0,Math.min(this.currentSlider.maxTop,this.currentSlider.top+((t.pageY||this.mousePointer.top)-this.mousePointer.top)));return this.currentSlider.guide.left=o+"px",this.currentSlider.guide.top=r+"px",this.currentSlider.callLeft&&e[this.currentSlider.callLeft].call(e,o/this.currentSlider.maxLeft),this.currentSlider.callTop&&e[this.currentSlider.callTop].call(e,r/this.currentSlider.maxTop),this.setValue(e),!1}},{key:"_mouseup",value:function(t){return this.lastEvent.name="mouseup",this.lastEvent.e=t,t.stopPropagation(),t.preventDefault(),(0,g.default)(window.document).off({"mousemove.colorpicker":this._mousemove,"touchmove.colorpicker":this._mousemove,"mouseup.colorpicker":this._mouseup,"touchend.colorpicker":this._mouseup}),!1}},{key:"_change",value:function(t){this.lastEvent.name="change",this.lastEvent.e=t;var e=this.input.val();e!==this.toInputColorString()&&this.setValue(e)}},{key:"_keyup",value:function(t){this.lastEvent.name="keyup",this.lastEvent.e=t;var e=this.input.val();e!==this.toInputColorString()&&this.setValue(e)}},{key:"fallbackColor",get:function(){return this.options.fallbackColor?this.options.fallbackColor:this.hasColor()?this.color:"#000"}},{key:"format",get:function(){return this.options.format?this.options.format:this.hasColor()&&this.color.hasTransparency()&&this.color.format.match(/^hex/)?this.options.enableHex8?"hex8":this.isAlphaEnabled()?"rgba":"hex":this.hasColor()?this.color.format:null}}]),t}();e.default=b},function(t,e,o){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function n(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function s(t){return t instanceof h.default?{r:t._r,g:t._g,b:t._b,a:t._a}:t}function a(t){return t instanceof String||"string"==typeof t?t.replace(/a$/gi,""):t}Object.defineProperty(e,"__esModule",{value:!0});var l=function t(e,o,r){null===e&&(e=Function.prototype);var i=Object.getOwnPropertyDescriptor(e,o);if(void 0===i){var n=Object.getPrototypeOf(e);return null===n?void 0:t(n,o,r)}if("value"in i)return i.value;var s=i.get;if(void 0!==s)return s.call(r)},c=function(){function t(t,e){for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:{format:null};r(this,e),o.format&&(o.format=a(o.format));var n=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,s(t),o));return n._originalInput=t,n._hbak=n.hsva.h,n.previous=null,n}return n(e,t),c(e,[{key:"id",get:function(){return this._tc_id}},{key:"format",get:function(){return this._format}},{key:"options",get:function(){return{format:this._format,gradientType:this._gradientType}}},{key:"hsva",get:function(){return this.toHsv()}},{key:"hsvaRatio",get:function(){var t=this.hsva;return{h:t.h/360,s:t.s,v:t.v,a:t.a}}}]),c(e,[{key:"equals",value:function(t){return t instanceof h.default&&(this._r===t._r&&this._g===t._g&&this._b===t._b&&this._a===t._a&&this._roundA===t._roundA&&this._format===t._format&&this._gradientType===t._gradientType&&this._ok===t._ok)}},{key:"importColor",value:function(t){if(!(t instanceof h.default))throw new Error("Color.importColor: The color argument is not an instance of tinycolor.");this._originalInput=t._originalInput,this._r=t._r,this._g=t._g,this._b=t._b,this._a=t._a,this._roundA=t._roundA,this._format=a(t._format),this._gradientType=t._gradientType,this._ok=t._ok}},{key:"importRgb",value:function(t){if(!t instanceof e)throw new Error("Color.importColor: The color argument is not an instance of tinycolor.");this._r=t._r,this._g=t._g,this._b=t._b,this._a=t._a,this._ok=t._ok,this._hbak=t._hbak}},{key:"importHsv",value:function(t){this._hbak=t.h,this.importRgb(new e(t,this.options))}},{key:"getCopy",value:function(){return new e(this.hsva,this.options)}},{key:"getHueOnlyCopy",value:function(){return new e({h:this._hbak?this._hbak:this.hsva.h,s:100,v:100},this.options)}},{key:"getOpaqueCopy",value:function(){return new e(Object.assign({},this.hsva,{a:1}),this.options)}},{key:"setHue",value:function(t){this.importHsv(Object.assign({},this.hsva,{h:t}))}},{key:"setSaturation",value:function(t){this.importHsv(Object.assign({},this.hsva,{s:t}))}},{key:"setBrightness",value:function(t){this.importHsv(Object.assign({},this.hsva,{v:t}))}},{key:"setHueRatio",value:function(t){0!==t&&this.setHue(360*(1-t))}},{key:"setSaturationRatio",value:function(t){this.setSaturation(t)}},{key:"setBrightnessRatio",value:function(t){this.setBrightness(1-t)}},{key:"setAlphaRatio",value:function(t){this.setAlpha(1-t)}},{key:"isTransparent",value:function(){return 0===this._a}},{key:"hasTransparency",value:function(){return 1!==this._a}},{key:"toString",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;t=t?a(t):this.format;var o=l(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"toString",this).call(this,t);return o&&o.match(/^#[0-9a-f]{3,8}$/i)&&this.isTransparent()&&0===this._r&&0===this._g&&0===this._b?"transparent":o}}]),e}(h.default);e.default=f},function(t,e,o){var r;!function(i){function n(t,e){if(t=t||"",e=e||{},t instanceof n)return t;if(!(this instanceof n))return new n(t,e);var o=s(t);this._originalInput=t,this._r=o.r,this._g=o.g,this._b=o.b,this._a=o.a,this._roundA=X(100*this._a)/100,this._format=e.format||o.format,this._gradientType=e.gradientType,this._r<1&&(this._r=X(this._r)),this._g<1&&(this._g=X(this._g)),this._b<1&&(this._b=X(this._b)),this._ok=o.ok,this._tc_id=N++}function s(t){var e={r:0,g:0,b:0},o=1,r=null,i=null,n=null,s=!1,l=!1;return"string"==typeof t&&(t=V(t)),"object"==typeof t&&(F(t.r)&&F(t.g)&&F(t.b)?(e=a(t.r,t.g,t.b),s=!0,l="%"===String(t.r).substr(-1)?"prgb":"rgb"):F(t.h)&&F(t.s)&&F(t.v)?(r=D(t.s),i=D(t.v),e=h(t.h,r,i),s=!0,l="hsv"):F(t.h)&&F(t.s)&&F(t.l)&&(r=D(t.s),n=D(t.l),e=c(t.h,r,n),s=!0,l="hsl"),t.hasOwnProperty("a")&&(o=t.a)),o=j(o),{ok:s,format:t.format||l,r:Y(255,B(e.r,0)),g:Y(255,B(e.g,0)),b:Y(255,B(e.b,0)),a:o}}function a(t,e,o){return{r:255*P(t,255),g:255*P(e,255),b:255*P(o,255)}}function l(t,e,o){t=P(t,255),e=P(e,255),o=P(o,255);var r,i,n=B(t,e,o),s=Y(t,e,o),a=(n+s)/2;if(n==s)r=i=0;else{var l=n-s;switch(i=a>.5?l/(2-n-s):l/(n+s),n){case t:r=(e-o)/l+(e1&&(o-=1),o<1/6?t+6*(e-t)*o:o<.5?e:o<2/3?t+(e-t)*(2/3-o)*6:t}var i,n,s;if(t=P(t,360),e=P(e,100),o=P(o,100),0===e)i=n=s=o;else{var a=o<.5?o*(1+e):o+e-o*e,l=2*o-a;i=r(l,a,t+1/3),n=r(l,a,t),s=r(l,a,t-1/3)}return{r:255*i,g:255*n,b:255*s}}function u(t,e,o){t=P(t,255),e=P(e,255),o=P(o,255);var r,i,n=B(t,e,o),s=Y(t,e,o),a=n,l=n-s;if(i=0===n?0:l/n,n==s)r=0;else{switch(n){case t:r=(e-o)/l+(e>1)+720)%360;--e;)r.h=(r.h+i)%360,s.push(n(r));return s}function S(t,e){e=e||6;for(var o=n(t).toHsv(),r=o.h,i=o.s,s=o.v,a=[],l=1/e;e--;)a.push(n({h:r,s:i,v:s})),s=(s+l)%1;return a}function j(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function P(t,e){H(t)&&(t="100%");var o=R(t);return t=Y(e,B(0,parseFloat(t))),o&&(t=parseInt(t*e,10)/100),i.abs(t-e)<1e-6?1:t%e/parseFloat(e)}function E(t){return Y(1,B(0,t))}function T(t){return parseInt(t,16)}function H(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)}function R(t){return"string"==typeof t&&-1!=t.indexOf("%")}function I(t){return 1==t.length?"0"+t:""+t}function D(t){return t<=1&&(t=100*t+"%"),t}function L(t){return i.round(255*parseFloat(t)).toString(16)}function M(t){return T(t)/255}function F(t){return!!G.CSS_UNIT.exec(t)}function V(t){t=t.replace(q,"").replace(U,"").toLowerCase();var e=!1;if(Q[t])t=Q[t],e=!0;else if("transparent"==t)return{r:0,g:0,b:0,a:0,format:"name"};var o;return(o=G.rgb.exec(t))?{r:o[1],g:o[2],b:o[3]}:(o=G.rgba.exec(t))?{r:o[1],g:o[2],b:o[3],a:o[4]}:(o=G.hsl.exec(t))?{h:o[1],s:o[2],l:o[3]}:(o=G.hsla.exec(t))?{h:o[1],s:o[2],l:o[3],a:o[4]}:(o=G.hsv.exec(t))?{h:o[1],s:o[2],v:o[3]}:(o=G.hsva.exec(t))?{h:o[1],s:o[2],v:o[3],a:o[4]}:(o=G.hex8.exec(t))?{r:T(o[1]),g:T(o[2]),b:T(o[3]),a:M(o[4]),format:e?"name":"hex8"}:(o=G.hex6.exec(t))?{r:T(o[1]),g:T(o[2]),b:T(o[3]),format:e?"name":"hex"}:(o=G.hex4.exec(t))?{r:T(o[1]+""+o[1]),g:T(o[2]+""+o[2]),b:T(o[3]+""+o[3]),a:M(o[4]+""+o[4]),format:e?"name":"hex8"}:!!(o=G.hex3.exec(t))&&{r:T(o[1]+""+o[1]),g:T(o[2]+""+o[2]),b:T(o[3]+""+o[3]),format:e?"name":"hex"}}function z(t){var e,o;return t=t||{level:"AA",size:"small"},e=(t.level||"AA").toUpperCase(),o=(t.size||"small").toLowerCase(),"AA"!==e&&"AAA"!==e&&(e="AA"),"small"!==o&&"large"!==o&&(o="small"),{level:e,size:o}}var q=/^\s+/,U=/\s+$/,N=0,X=i.round,Y=i.min,B=i.max,$=i.random;n.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var t,e,o,r,n,s,a=this.toRgb();return t=a.r/255,e=a.g/255,o=a.b/255,r=t<=.03928?t/12.92:i.pow((t+.055)/1.055,2.4),n=e<=.03928?e/12.92:i.pow((e+.055)/1.055,2.4),s=o<=.03928?o/12.92:i.pow((o+.055)/1.055,2.4),.2126*r+.7152*n+.0722*s},setAlpha:function(t){return this._a=j(t),this._roundA=X(100*this._a)/100,this},toHsv:function(){var t=u(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=u(this._r,this._g,this._b),e=X(360*t.h),o=X(100*t.s),r=X(100*t.v);return 1==this._a?"hsv("+e+", "+o+"%, "+r+"%)":"hsva("+e+", "+o+"%, "+r+"%, "+this._roundA+")"},toHsl:function(){var t=l(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=l(this._r,this._g,this._b),e=X(360*t.h),o=X(100*t.s),r=X(100*t.l);return 1==this._a?"hsl("+e+", "+o+"%, "+r+"%)":"hsla("+e+", "+o+"%, "+r+"%, "+this._roundA+")"},toHex:function(t){return f(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(t){return p(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return"#"+this.toHex8(t)},toRgb:function(){return{r:X(this._r),g:X(this._g),b:X(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+X(this._r)+", "+X(this._g)+", "+X(this._b)+")":"rgba("+X(this._r)+", "+X(this._g)+", "+X(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:X(100*P(this._r,255))+"%",g:X(100*P(this._g,255))+"%",b:X(100*P(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+X(100*P(this._r,255))+"%, "+X(100*P(this._g,255))+"%, "+X(100*P(this._b,255))+"%)":"rgba("+X(100*P(this._r,255))+"%, "+X(100*P(this._g,255))+"%, "+X(100*P(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(W[f(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e="#"+d(this._r,this._g,this._b,this._a),o=e,r=this._gradientType?"GradientType = 1, ":"";if(t){var i=n(t);o="#"+d(i._r,i._g,i._b,i._a)}return"progid:DXImageTransform.Microsoft.gradient("+r+"startColorstr="+e+",endColorstr="+o+")"},toString:function(t){var e=!!t;t=t||this._format;var o=!1,r=this._a<1&&this._a>=0;return e||!r||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"hex4"!==t&&"hex8"!==t&&"name"!==t?("rgb"===t&&(o=this.toRgbString()),"prgb"===t&&(o=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(o=this.toHexString()),"hex3"===t&&(o=this.toHexString(!0)),"hex4"===t&&(o=this.toHex8String(!0)),"hex8"===t&&(o=this.toHex8String()),"name"===t&&(o=this.toName()),"hsl"===t&&(o=this.toHslString()),"hsv"===t&&(o=this.toHsvString()),o||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},clone:function(){return n(this.toString())},_applyModification:function(t,e){var o=t.apply(null,[this].concat([].slice.call(e)));return this._r=o._r,this._g=o._g,this._b=o._b,this.setAlpha(o._a),this},lighten:function(){return this._applyModification(y,arguments)},brighten:function(){return this._applyModification(m,arguments)},darken:function(){return this._applyModification(k,arguments)},desaturate:function(){return this._applyModification(g,arguments)},saturate:function(){return this._applyModification(v,arguments)},greyscale:function(){return this._applyModification(b,arguments)},spin:function(){return this._applyModification(_,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(A,arguments)},complement:function(){return this._applyCombination(x,arguments)},monochromatic:function(){return this._applyCombination(S,arguments)},splitcomplement:function(){return this._applyCombination(O,arguments)},triad:function(){return this._applyCombination(w,arguments)},tetrad:function(){return this._applyCombination(C,arguments)}},n.fromRatio=function(t,e){if("object"==typeof t){var o={};for(var r in t)t.hasOwnProperty(r)&&(o[r]="a"===r?t[r]:D(t[r]));t=o}return n(t,e)},n.equals=function(t,e){return!(!t||!e)&&n(t).toRgbString()==n(e).toRgbString()},n.random=function(){return n.fromRatio({r:$(),g:$(),b:$()})},n.mix=function(t,e,o){o=0===o?0:o||50;var r=n(t).toRgb(),i=n(e).toRgb(),s=o/100;return n({r:(i.r-r.r)*s+r.r,g:(i.g-r.g)*s+r.g,b:(i.b-r.b)*s+r.b,a:(i.a-r.a)*s+r.a})},n.readability=function(t,e){var o=n(t),r=n(e);return(i.max(o.getLuminance(),r.getLuminance())+.05)/(i.min(o.getLuminance(),r.getLuminance())+.05)},n.isReadable=function(t,e,o){var r,i,s=n.readability(t,e);switch(i=!1,r=z(o),r.level+r.size){case"AAsmall":case"AAAlarge":i=s>=4.5;break;case"AAlarge":i=s>=3;break;case"AAAsmall":i=s>=7}return i},n.mostReadable=function(t,e,o){var r,i,s,a,l=null,c=0;o=o||{},i=o.includeFallbackColors,s=o.level,a=o.size;for(var u=0;uc&&(c=r,l=n(e[u]));return n.isReadable(t,l,{level:s,size:a})||!i?l:(o.includeFallbackColors=!1,n.mostReadable(t,["#fff","#000"],o))};var Q=n.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},W=n.hexNames=function(t){var e={};for(var o in t)t.hasOwnProperty(o)&&(e[t[o]]=o);return e}(Q),G=function(){var t="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)",e="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?",o="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?";return{CSS_UNIT:new RegExp(t),rgb:new RegExp("rgb"+e),rgba:new RegExp("rgba"+o),hsl:new RegExp("hsl"+e),hsla:new RegExp("hsla"+o),hsv:new RegExp("hsv"+e),hsva:new RegExp("hsva"+o),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();void 0!==t&&t.exports?t.exports=n:void 0!==(r=function(){return n}.call(e,o,e,t))&&(t.exports=r)}(Math)},function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={debug:!1,color:!1,format:!1,horizontal:!1,inline:!1,input:"input",container:!1,component:".add-on, .input-group-addon",fallbackColor:!1,autoInputFallback:!1,useHashPrefix:!0,useAlpha:!0,enableHex8:!1,sliders:{saturation:{maxLeft:100,maxTop:100,callLeft:"setSaturationRatio",callTop:"setBrightnessRatio"},hue:{maxLeft:0,maxTop:100,callLeft:!1,callTop:"setHueRatio"},alpha:{maxLeft:0,maxTop:100,callLeft:!1,callTop:"setAlphaRatio"}},slidersHorz:{saturation:{maxLeft:100,maxTop:100,callLeft:"setSaturationRatio",callTop:"setBrightnessRatio"},hue:{maxLeft:100,maxTop:0,callLeft:"setHueRatio",callTop:!1},alpha:{maxLeft:100,maxTop:0,callLeft:"setAlphaRatio",callTop:!1}},align:"right",customClass:null,template:'
        \n
        \n
        \n
        ',extensions:[{name:"preview",showText:!1}]}},function(t,e,o){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.Palette=e.Swatches=e.Preview=e.Debugger=void 0;var i=o(9),n=r(i),s=o(10),a=r(s),l=o(11),c=r(l),u=o(2),h=r(u);e.Debugger=n.default,e.Preview=a.default,e.Swatches=c.default,e.Palette=h.default,e.default={debugger:n.default,preview:a.default,swatches:c.default,palette:h.default}},function(t,e,o){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:{};i(this,e);var r=n(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,o));return r.eventCounter=0,r.colorpicker.hasInput()&&r.colorpicker.input.on("change.colorpicker-ext",f.default.proxy(r.onChangeInput,r)),r}return s(e,t),a(e,[{key:"log",value:function(t){for(var e,o=arguments.length,r=Array(o>1?o-1:0),i=1;i1&&void 0!==arguments[1]?arguments[1]:{};i(this,e);var r=n(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,Object.assign({},{template:'
        ',showText:!0,format:t.format},o)));return r.element=(0,f.default)(r.options.template),r.elementInner=r.element.find("div"),r}return s(e,t),a(e,[{key:"onCreate",value:function(t){l(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"onCreate",this).call(this,t),this.colorpicker.picker.append(this.element)}},{key:"onUpdate",value:function(t){l(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"onUpdate",this).call(this,t),this.elementInner.css("backgroundColor",t.color.toRgbString()),this.options.showText&&(this.elementInner.html(t.color.toString(this.options.format||this.colorpicker.format)),t.color.isDark()?this.elementInner.css("color","white"):this.elementInner.css("color","black"))}}]),e}(u.default);e.default=p},function(t,e,o){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var o=0;o
        ',swatchTemplate:''},d=function(t){function e(t){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return i(this,e),n(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,Object.assign({},p,o)))}return s(e,t),a(e,[{key:"isEnabled",value:function(){return this.getLength()>0}},{key:"onCreate",value:function(t){var o=this;if(l(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"onCreate",this).call(this,t),this.isEnabled()){var r=this.colorpicker,i=(0,f.default)(this.options.barTemplate),n=!0===this.options.namesAsValues&&!Array.isArray(this.colors);f.default.each(this.colors,function(t,e){var s=(0,f.default)(o.options.swatchTemplate).css("background-color",e).attr("data-name",t).attr("data-value",e).attr("title",t+": "+e);s.on("mousedown.colorpicker touchstart.colorpicker",function(t){t.preventDefault(),r.setValue(n?(0,f.default)(this).data("name"):(0,f.default)(this).data("value"))}),i.append(s)}),r.picker.append(i)}}}]),e}(u.default);e.default=d}])}); -//# sourceMappingURL=bootstrap-colorpicker.min.js.map \ No newline at end of file diff --git a/src/main/resources/static/plugins/colorpicker/js/bootstrap-colorpicker.min.js.map b/src/main/resources/static/plugins/colorpicker/js/bootstrap-colorpicker.min.js.map deleted file mode 100755 index 2af626490..000000000 --- a/src/main/resources/static/plugins/colorpicker/js/bootstrap-colorpicker.min.js.map +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Bootstrap Colorpicker - Simple and customizable colorpicker component for Twitter Bootstrap. - * @package bootstrap-colorpicker - * @version v3.0.0-wip - * @license MIT - * @link https://farbelous.github.io/bootstrap-colorpicker/ - * @link https://github.com/farbelous/bootstrap-colorpicker.git - */ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///bootstrap-colorpicker.min.js","webpack:///webpack/bootstrap 32081b809d19519bb29c","webpack:///external \"jQuery\"","webpack:///./src/js/Extension.js","webpack:///./src/js/extensions/Palette.js","webpack:///./src/js/jquery-plugin.js","webpack:///./src/js/Colorpicker.js","webpack:///./src/js/Color.js","webpack:///./node_modules/tinycolor2/tinycolor.js","webpack:///./src/js/options.js","webpack:///./src/js/extensions/index.js","webpack:///./src/js/extensions/Debugger.js","webpack:///./src/js/extensions/Preview.js","webpack:///./src/js/extensions/Swatches.js"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_0__","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_classCallCheck","instance","Constructor","TypeError","value","_createClass","defineProperties","target","props","length","descriptor","writable","key","protoProps","staticProps","_jquery","_jquery2","obj","default","Extension","colorpicker","options","arguments","undefined","element","Error","on","proxy","onCreate","onDestroy","onUpdate","onChange","onInvalid","onShow","onHide","onEnable","onDisable","color","event","off","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","create","constructor","setPrototypeOf","__proto__","_typeof","Symbol","iterator","_Extension2","_Extension3","defaults","colors","namesAsValues","Palette","_Extension","_this","getPrototypeOf","assign","Array","isArray","keys","getLength","indexOf","toUpperCase","toLowerCase","getName","getValue","defaultValue","_interopRequireDefault","_Colorpicker","_Colorpicker2","plugin","fn","option","apiArgs","slice","isSingleElement","returnValue","$jq","each","$this","inst","data","isFunction","apply","_Color","_Color2","_options","_options2","_extensions","_extensions2","colorPickerIdCounter","Colorpicker","id","addClass","attr","extensions","component","find","container","currentSlider","mousePointer","left","top","lastEvent","e","input","is","debug","push","forEach","ext","addExtension","colorValue","createColor","format","disabled","$picker","picker","template","customClass","inline","horizontal","useAlpha","hasColor","hasTransparency","align","currentTarget","preventDefault","_mousedown","appendTo","hasInput","keyup.colorpicker","_keyup","change.colorpicker","_change","focus.colorpicker","show","focusout.colorpicker","hide","click.colorpicker","has","update","trigger","type","set","extensionName","ExtensionClass","config","remove","removeData","removeClass","str","toCssColorString","useHashPrefix","replace","_resolveColor","toString","window","document","body","offset","outerWidth","css","outerHeight","isVisible","isDisabled","_reposition","stopPropagation","mousedown.colorpicker","isHidden","parents","hasClass","val","toInputColorString","prop","vertical","sl","sliders","slidersHorz","saturationGuide","hueGuide","alphaGuide","hsva","hsvaRatio","hue","maxTop","maxLeft","h","alpha","a","saturation","v","getHueOnlyCopy","toHexString","icn","eq","backgroundColor","force","_shouldUpdate","_updateComponent","autoInputFallback","_updateInput","_updatePicker","fallbackColor","candidates","map","item","equals","shouldForceUpdate","useFallback","isValid","invalidColor","fallback","previous","isAlphaEnabled","setAlpha","prevHsva","setHueRatio","extResolvedColor","resolveColor","pageX","pageY","originalEvent","touches","zone","closest","extend","guide","style","mousemove.colorpicker","_mousemove","touchmove.colorpicker","mouseup.colorpicker","_mouseup","touchend.colorpicker","getCopy","Math","max","min","callLeft","callTop","setValue","match","enableHex8","unwrapColor","r","_r","g","_g","b","_b","_a","getCompatibleFormat","String","_get","receiver","Function","desc","getOwnPropertyDescriptor","parent","_tinycolor2","_tinycolor3","Color","_tinycolor","_originalInput","_hbak","_tc_id","_format","gradientType","_gradientType","toHsv","hsv","_roundA","_ok","importRgb","importHsv","setHue","setSaturation","setBrightness","colorStr","isTransparent","__WEBPACK_AMD_DEFINE_RESULT__","tinycolor","opts","rgb","inputToRGB","mathRound","ok","tinyCounter","stringInputToObject","isValidCSSUnit","rgbToRgb","substr","convertToPercentage","hsvToRgb","hslToRgb","boundAlpha","mathMin","mathMax","bound01","rgbToHsl","hue2rgb","q","t","rgbToHsv","floor","f","mod","rgbToHex","allow3Char","hex","pad2","charAt","join","rgbaToHex","allow4Char","convertDecimalToHex","rgbaToArgbHex","desaturate","amount","hsl","toHsl","clamp01","saturate","greyscale","lighten","brighten","toRgb","darken","spin","complement","triad","tetrad","splitcomplement","analogous","results","slices","part","ret","monochromatic","modification","parseFloat","isNaN","isOnePointZero","processPercent","isPercentage","parseInt","abs","parseIntFromHex","round","convertHexToDecimal","matchers","CSS_UNIT","exec","trimLeft","trimRight","named","names","rgba","hsla","hex8","hex6","hex4","hex3","validateWCAG2Parms","parms","level","size","mathRandom","random","isDark","getBrightness","isLight","getOriginalInput","getFormat","getAlpha","getLuminance","RsRGB","GsRGB","BsRGB","R","G","B","pow","toHsvString","toHslString","toHex","toHex8","toHex8String","toRgbString","toPercentageRgb","toPercentageRgbString","toName","hexNames","toFilter","secondColor","hex8String","secondHex8String","formatSet","formattedString","hasAlpha","clone","_applyModification","args","concat","_applyCombination","fromRatio","newColor","color1","color2","mix","rgb1","rgb2","readability","c1","c2","isReadable","wcag2","wcag2Parms","out","mostReadable","baseColor","colorList","includeFallbackColors","bestColor","bestScore","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","burntsienna","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","flipped","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","RegExp","showText","Swatches","Preview","Debugger","_Debugger","_Debugger2","_Preview","_Preview2","_Swatches","_Swatches2","_Palette","_Palette2","debugger","preview","swatches","palette","eventCounter","onChangeInput","eventName","_console","_len","_key","logMessage","console","logArgs","log","elementInner","append","html","_Palette3","barTemplate","swatchTemplate","_this2","isEnabled","swatchContainer","isAliased","$swatch"],"mappings":"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","file":"bootstrap-colorpicker.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jQuery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"bootstrap-colorpicker\", [\"jQuery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"bootstrap-colorpicker\"] = factory(require(\"jQuery\"));\n\telse\n\t\troot[\"bootstrap-colorpicker\"] = factory(root[\"jQuery\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jQuery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"bootstrap-colorpicker\", [\"jQuery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"bootstrap-colorpicker\"] = factory(require(\"jQuery\"));\n\telse\n\t\troot[\"bootstrap-colorpicker\"] = factory(root[\"jQuery\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Colorpicker extension class.\n */\nvar Extension = function () {\n /**\n * @param {Colorpicker} colorpicker\n * @param {Object} options\n */\n function Extension(colorpicker) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Extension);\n\n /**\n * @type {Colorpicker}\n */\n this.colorpicker = colorpicker;\n /**\n * @type {Object}\n */\n this.options = options;\n\n if (!(this.colorpicker.element && this.colorpicker.element.length)) {\n throw new Error('Extension: this.colorpicker.element is not valid');\n }\n\n this.colorpicker.element.on('colorpickerCreate.colorpicker-ext', _jquery2.default.proxy(this.onCreate, this));\n this.colorpicker.element.on('colorpickerDestroy.colorpicker-ext', _jquery2.default.proxy(this.onDestroy, this));\n this.colorpicker.element.on('colorpickerUpdate.colorpicker-ext', _jquery2.default.proxy(this.onUpdate, this));\n this.colorpicker.element.on('colorpickerChange.colorpicker-ext', _jquery2.default.proxy(this.onChange, this));\n this.colorpicker.element.on('colorpickerInvalid.colorpicker-ext', _jquery2.default.proxy(this.onInvalid, this));\n this.colorpicker.element.on('colorpickerShow.colorpicker-ext', _jquery2.default.proxy(this.onShow, this));\n this.colorpicker.element.on('colorpickerHide.colorpicker-ext', _jquery2.default.proxy(this.onHide, this));\n this.colorpicker.element.on('colorpickerEnable.colorpicker-ext', _jquery2.default.proxy(this.onEnable, this));\n this.colorpicker.element.on('colorpickerDisable.colorpicker-ext', _jquery2.default.proxy(this.onDisable, this));\n }\n\n /**\n * Function called every time a new color needs to be created.\n * Return false to skip this resolver and continue with other extensions' ones\n * or return anything else to consider the color resolved.\n *\n * @param {Color|String|*} color\n * @return {Color|String|*}\n */\n\n\n _createClass(Extension, [{\n key: 'resolveColor',\n value: function resolveColor(color) {\n return false;\n }\n\n /**\n * @listens colorpickerCreate\n * @param {Event} event\n */\n\n }, {\n key: 'onCreate',\n value: function onCreate(event) {}\n // to be extended\n\n\n /**\n * @listens colorpickerDestroy\n * @param {Event} event\n */\n\n }, {\n key: 'onDestroy',\n value: function onDestroy(event) {\n this.colorpicker.element.off('.colorpicker-ext');\n }\n\n /**\n * @listens colorpickerUpdate\n * @param {Event} event\n */\n\n }, {\n key: 'onUpdate',\n value: function onUpdate(event) {}\n // to be extended\n\n\n /**\n * @listens colorpickerChange\n * @param {Event} event\n */\n\n }, {\n key: 'onChange',\n value: function onChange(event) {}\n // to be extended\n\n\n /**\n * @listens colorpickerInvalid\n * @param {Event} event\n */\n\n }, {\n key: 'onInvalid',\n value: function onInvalid(event) {}\n // to be extended\n\n\n /**\n * @listens colorpickerHide\n * @param {Event} event\n */\n\n }, {\n key: 'onHide',\n value: function onHide(event) {}\n // to be extended\n\n\n /**\n * @listens colorpickerShow\n * @param {Event} event\n */\n\n }, {\n key: 'onShow',\n value: function onShow(event) {}\n // to be extended\n\n\n /**\n * @listens colorpickerDisable\n * @param {Event} event\n */\n\n }, {\n key: 'onDisable',\n value: function onDisable(event) {}\n // to be extended\n\n\n /**\n * @listens colorpickerEnable\n * @param {Event} event\n */\n\n }, {\n key: 'onEnable',\n value: function onEnable(event) {\n // to be extended\n }\n }]);\n\n return Extension;\n}();\n\nexports.default = Extension;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _Extension2 = __webpack_require__(1);\n\nvar _Extension3 = _interopRequireDefault(_Extension2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar defaults = {\n /**\n * Key-value pairs defining a color alias and its CSS color representation.\n *\n * They can also be just an array of values. In that case, no special names are used, only the real colors.\n *\n * @type {Object|Array}\n * @default null\n * @example\n * {\n * 'black': '#000000',\n * 'white': '#ffffff',\n * 'red': '#FF0000',\n * 'default': '#777777',\n * 'primary': '#337ab7',\n * 'success': '#5cb85c',\n * 'info': '#5bc0de',\n * 'warning': '#f0ad4e',\n * 'danger': '#d9534f'\n * }\n *\n * @example ['#f0ad4e', '#337ab7', '#5cb85c']\n */\n colors: null,\n /**\n * If true, the when a color swatch is selected the name (alias) will be used as input value,\n * otherwise the swatch real color value will be used.\n *\n * @type {boolean}\n * @default true\n */\n namesAsValues: true\n};\n\nvar Palette = function (_Extension) {\n _inherits(Palette, _Extension);\n\n _createClass(Palette, [{\n key: 'colors',\n\n\n /**\n * @returns {Object|Array}\n */\n get: function get() {\n return this.options.colors;\n }\n }]);\n\n function Palette(colorpicker) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Palette);\n\n var _this = _possibleConstructorReturn(this, (Palette.__proto__ || Object.getPrototypeOf(Palette)).call(this, colorpicker, Object.assign({}, defaults, options)));\n\n if (!Array.isArray(_this.options.colors) && _typeof(_this.options.colors) !== 'object') {\n _this.options.colors = null;\n }\n return _this;\n }\n\n /**\n * @returns {int}\n */\n\n\n _createClass(Palette, [{\n key: 'getLength',\n value: function getLength() {\n if (!this.options.colors) {\n return 0;\n }\n\n if (Array.isArray(this.options.colors)) {\n return this.options.colors.length;\n }\n\n if (_typeof(this.options.colors) === 'object') {\n return Object.keys(this.options.colors).length;\n }\n\n return 0;\n }\n }, {\n key: 'resolveColor',\n value: function resolveColor(color) {\n if (this.getLength() <= 0) {\n return false;\n }\n\n if (Array.isArray(this.options.colors)) {\n if (this.options.colors.indexOf(color) >= 0) {\n return color;\n }\n if (this.options.colors.indexOf(color.toUpperCase()) >= 0) {\n return color.toUpperCase();\n }\n if (this.options.colors.indexOf(color.toLowerCase()) >= 0) {\n return color.toLowerCase();\n }\n return false;\n }\n\n if (_typeof(this.options.colors) !== 'object') {\n return false;\n }\n\n if (!this.options.namesAsValues) {\n return this.getValue(color, false);\n }\n return this.getName(color, this.getName('#' + color, this.getValue(color, false)));\n }\n\n /**\n * Given a color value, returns the corresponding color name or defaultValue.\n *\n * @param {String} value\n * @param {*} defaultValue\n * @returns {*}\n */\n\n }, {\n key: 'getName',\n value: function getName(value) {\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!(typeof value === 'string') || !this.options.colors) {\n return defaultValue;\n }\n for (var name in this.options.colors) {\n if (!this.options.colors.hasOwnProperty(name)) {\n continue;\n }\n if (this.options.colors[name].toLowerCase() === value.toLowerCase()) {\n return name;\n }\n }\n return defaultValue;\n }\n\n /**\n * Given a color name, returns the corresponding color value or defaultValue.\n *\n * @param {String} name\n * @param {*} defaultValue\n * @returns {*}\n */\n\n }, {\n key: 'getValue',\n value: function getValue(name) {\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!(typeof name === 'string') || !this.options.colors) {\n return defaultValue;\n }\n if (this.options.colors.hasOwnProperty(name)) {\n return this.options.colors[name];\n }\n return defaultValue;\n }\n }]);\n\n return Palette;\n}(_Extension3.default);\n\nexports.default = Palette;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _Colorpicker = __webpack_require__(4);\n\nvar _Colorpicker2 = _interopRequireDefault(_Colorpicker);\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar plugin = 'colorpicker';\n\n_jquery2.default[plugin] = _Colorpicker2.default;\n\n_jquery2.default.fn[plugin] = function (option) {\n var apiArgs = Array.prototype.slice.call(arguments, 1),\n isSingleElement = this.length === 1,\n returnValue = null;\n\n var $jq = this.each(function () {\n var $this = (0, _jquery2.default)(this),\n inst = $this.data(plugin),\n options = (typeof option === 'undefined' ? 'undefined' : _typeof(option)) === 'object' ? option : {};\n\n if (!inst) {\n inst = new _Colorpicker2.default(this, options);\n $this.data(plugin, inst);\n }\n\n if (typeof option === 'string') {\n if (option === 'colorpicker') {\n returnValue = inst;\n } else if (_jquery2.default.isFunction(inst[option])) {\n returnValue = inst[option].apply(inst, apiArgs);\n } else {\n // its a property ?\n if (apiArgs.length) {\n // set property\n inst[option] = apiArgs[0];\n }\n returnValue = inst[option];\n }\n } else {\n returnValue = $this;\n }\n });\n\n return isSingleElement ? returnValue : $jq;\n};\n\n_jquery2.default.fn[plugin].constructor = _Colorpicker2.default;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _Color = __webpack_require__(5);\n\nvar _Color2 = _interopRequireDefault(_Color);\n\nvar _Extension = __webpack_require__(1);\n\nvar _Extension2 = _interopRequireDefault(_Extension);\n\nvar _options = __webpack_require__(7);\n\nvar _options2 = _interopRequireDefault(_options);\n\nvar _extensions = __webpack_require__(8);\n\nvar _extensions2 = _interopRequireDefault(_extensions);\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar colorPickerIdCounter = 0;\n\n/**\n * Colorpicker widget class\n */\n\nvar Colorpicker = function () {\n _createClass(Colorpicker, [{\n key: 'color',\n\n\n /**\n * color getter\n *\n * @type {Color|null}\n */\n get: function get() {\n return this.element.data('color');\n }\n\n /**\n * color setter\n *\n * @ignore\n * @param {Color|null} value\n */\n ,\n set: function set(value) {\n this.element.data('color', value);\n }\n\n /**\n * @fires colorpickerCreate\n * @param {Object|String} element\n * @param {Object} options\n * @constructor\n */\n\n }], [{\n key: 'Color',\n\n /**\n * Color class\n *\n * @static\n * @type {Color}\n */\n get: function get() {\n return _Color2.default;\n }\n\n /**\n * Extension class\n *\n * @static\n * @type {Extension}\n */\n\n }, {\n key: 'Extension',\n get: function get() {\n return _Extension2.default;\n }\n\n /**\n * Colorpicker bundled extension classes\n *\n * @static\n * @type {{Extension}}\n */\n\n }, {\n key: 'Extensions',\n get: function get() {\n return _extensions2.default;\n }\n }]);\n\n function Colorpicker(element, options) {\n var _this = this;\n\n _classCallCheck(this, Colorpicker);\n\n colorPickerIdCounter += 1;\n /**\n * The colorpicker instance number\n * @type {number}\n */\n this.id = colorPickerIdCounter;\n\n /**\n * @type {*|jQuery}\n */\n this.element = (0, _jquery2.default)(element).addClass('colorpicker-element');\n this.element.attr('data-colorpicker-id', this.id);\n\n /**\n * @type {defaults}\n */\n this.options = Object.assign({}, _options2.default, options, this.element.data());\n\n /**\n * @type {Extension[]}\n */\n this.extensions = [];\n\n if (!Array.isArray(this.options.extensions)) {\n this.options.extensions = [];\n }\n\n /**\n * @type {*|jQuery}\n */\n this.component = this.options.component;\n this.component = this.component !== false ? this.element.find(this.component) : false;\n if (this.component && this.component.length === 0) {\n this.component = false;\n }\n\n /**\n * @type {*|jQuery}\n */\n this.container = this.options.container === true ? this.element : this.options.container;\n this.container = this.container !== false ? (0, _jquery2.default)(this.container) : false;\n\n /**\n * @type {*|String}\n * @private\n */\n this.currentSlider = null;\n\n /**\n * @type {{left: number, top: number}}\n * @private\n */\n this.mousePointer = {\n left: 0,\n top: 0\n };\n\n /**\n * Latest external event\n *\n * @type {{name: String, e: *}}\n * @private\n */\n this.lastEvent = {\n name: null,\n e: null\n };\n\n // Is the element an input? Should we search inside for any input?\n /**\n * @type {*|jQuery}\n */\n this.input = this.element.is('input') ? this.element : this.options.input ? this.element.find(this.options.input) : false;\n\n if (this.input && this.input.length === 0) {\n this.input = false;\n }\n\n if (this.options.debug) {\n this.options.extensions.push({ name: 'Debugger' });\n }\n\n // Register extensions\n this.options.extensions.forEach(function (ext) {\n _this.addExtension(ext.name, _extensions2.default[ext.name.toLowerCase()], ext);\n });\n\n var colorValue = this.options.color !== false ? this.options.color : this.getValue();\n\n this.color = colorValue ? this.createColor(colorValue) : false;\n\n if (this.options.format === false) {\n // If format is false, use the first parsed one from now on\n this.options.format = this.color.format;\n }\n\n /**\n * @type {boolean}\n * @private\n */\n this.disabled = false;\n\n // Setup picker\n var $picker = this.picker = (0, _jquery2.default)(this.options.template);\n\n if (this.options.customClass) {\n $picker.addClass(this.options.customClass);\n }\n if (this.options.inline) {\n $picker.addClass('colorpicker-inline colorpicker-visible');\n } else {\n $picker.addClass('colorpicker-hidden');\n }\n if (this.options.horizontal) {\n $picker.addClass('colorpicker-horizontal');\n }\n\n if ((this.options.useAlpha || this.hasColor() && this.color.hasTransparency()) && this.options.useAlpha !== false) {\n this.options.useAlpha = true;\n $picker.addClass('colorpicker-with-alpha');\n }\n\n if (this.options.align === 'right') {\n $picker.addClass('colorpicker-right');\n }\n if (this.options.inline === true) {\n $picker.addClass('colorpicker-no-arrow');\n }\n\n // Prevent closing the colorpicker when clicking on itself\n $picker.on('mousedown.colorpicker touchstart.colorpicker', _jquery2.default.proxy(function (e) {\n if (e.target === e.currentTarget) {\n e.preventDefault();\n }\n }, this));\n\n // Bind click/tap events on the sliders\n $picker.find('.colorpicker-saturation, .colorpicker-hue, .colorpicker-alpha').on('mousedown.colorpicker touchstart.colorpicker', _jquery2.default.proxy(this._mousedown, this));\n\n $picker.appendTo(this.container ? this.container : (0, _jquery2.default)('body'));\n\n // Bind other events\n if (this.hasInput()) {\n this.input.on({\n 'keyup.colorpicker': _jquery2.default.proxy(this._keyup, this)\n });\n this.input.on({\n 'change.colorpicker': _jquery2.default.proxy(this._change, this)\n });\n if (this.component === false) {\n this.element.on({\n 'focus.colorpicker': _jquery2.default.proxy(this.show, this)\n });\n }\n if (this.options.inline === false) {\n this.element.on({\n 'focusout.colorpicker': _jquery2.default.proxy(this.hide, this)\n });\n }\n }\n\n if (this.component !== false) {\n this.component.on({\n 'click.colorpicker': _jquery2.default.proxy(this.show, this)\n });\n }\n\n if (this.hasInput() === false && this.component === false && !this.element.has('.colorpicker')) {\n this.element.on({\n 'click.colorpicker': _jquery2.default.proxy(this.show, this)\n });\n }\n\n // for HTML5 input[type='color']\n if (this.hasInput() && this.component !== false && this.input.attr('type') === 'color') {\n this.input.on({\n 'click.colorpicker': _jquery2.default.proxy(this.show, this),\n 'focus.colorpicker': _jquery2.default.proxy(this.show, this)\n });\n }\n\n // Update if there is a color option\n this.update(this.options.color !== false);\n\n (0, _jquery2.default)(_jquery2.default.proxy(function () {\n /**\n * (Colorpicker) When the Colorpicker instance has been created and the DOM is ready.\n *\n * @event colorpickerCreate\n */\n this.element.trigger({\n type: 'colorpickerCreate',\n colorpicker: this,\n color: this.color\n });\n }, this));\n }\n\n /**\n * Creates and registers the given extension\n *\n * @param {String|Extension} extensionName\n * @param {Extension} ExtensionClass\n * @param {Object} [config]\n * @returns {Extension}\n */\n\n\n _createClass(Colorpicker, [{\n key: 'addExtension',\n value: function addExtension(extensionName, ExtensionClass) {\n var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n var ext = extensionName instanceof _Extension2.default ? extensionName : new ExtensionClass(this, config);\n\n this.extensions.push(ext);\n return ext;\n }\n\n /**\n * Destroys the current instance\n *\n * @fires colorpickerDestroy\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n this.picker.remove();\n this.element.removeData('colorpicker', 'color').off('.colorpicker');\n if (this.hasInput()) {\n this.input.off('.colorpicker');\n }\n if (this.component !== false) {\n this.component.off('.colorpicker');\n }\n this.element.removeClass('colorpicker-element');\n\n /**\n * (Colorpicker) When the instance is destroyed with all events unbound.\n *\n * @event colorpickerDestroy\n */\n this.element.trigger({\n type: 'colorpickerDestroy',\n colorpicker: this,\n color: this.color\n });\n }\n\n /**\n * Returns true if the current color object is an instance of Color, false otherwise.\n * @returns {boolean}\n */\n\n }, {\n key: 'hasColor',\n value: function hasColor() {\n return this.color instanceof _Color2.default;\n }\n\n /**\n * @returns {*|String|Color}\n */\n\n }, {\n key: 'toInputColorString',\n\n\n /**\n * Formatted color string, with the formatting options applied\n * (e.g. useHashPrefix)\n * @returns {String}\n */\n value: function toInputColorString() {\n var str = this.toCssColorString();\n\n if (!str) {\n return str;\n }\n\n if (this.options.useHashPrefix === false) {\n str = str.replace(/^#/g, '');\n }\n\n return this._resolveColor(str);\n }\n\n /**\n * Formatted color string, suitable for CSS\n * @returns {String}\n */\n\n }, {\n key: 'toCssColorString',\n value: function toCssColorString() {\n if (!this.hasColor()) {\n return '';\n }\n return this.color.toString(this.format);\n }\n\n /**\n * If the widget is not inside a container or inline, rearranges its position relative to its element offset.\n *\n * @param {Event} [e]\n * @private\n * @returns {boolean} Returns false if the widget is inside a container or inline, true otherwise\n */\n\n }, {\n key: '_reposition',\n value: function _reposition(e) {\n this.lastEvent.name = 'reposition';\n this.lastEvent.e = e;\n\n if (this.options.inline !== false || this.options.container) {\n return false;\n }\n var type = this.container && this.container[0] !== window.document.body ? 'position' : 'offset';\n var element = this.component || this.element;\n var offset = element[type]();\n\n if (this.options.align === 'right') {\n offset.left -= this.picker.outerWidth() - element.outerWidth();\n }\n this.picker.css({\n top: offset.top + element.outerHeight(),\n left: offset.left\n });\n return true;\n }\n\n /**\n * Shows the colorpicker widget if hidden.\n * If the input is disabled this call will be ignored.\n *\n * @fires colorpickerShow\n * @param {Event} [e]\n * @returns {boolean} True if was hidden and afterwards visible, false if nothing happened.\n */\n\n }, {\n key: 'show',\n value: function show(e) {\n this.lastEvent.name = 'show';\n this.lastEvent.e = e;\n\n if (this.isVisible() || this.isDisabled()) {\n // Don't show the widget if it's already visible or it is disabled\n return false;\n }\n this.picker.addClass('colorpicker-visible').removeClass('colorpicker-hidden');\n\n this._reposition(e);\n (0, _jquery2.default)(window).on('resize.colorpicker', _jquery2.default.proxy(this._reposition, this));\n\n if (e && (!this.hasInput() || this.input.attr('type') === 'color')) {\n if (e.stopPropagation && e.preventDefault) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n if ((this.component || !this.input) && this.options.inline === false) {\n (0, _jquery2.default)(window.document).on({\n 'mousedown.colorpicker': _jquery2.default.proxy(this.hide, this)\n });\n }\n\n /**\n * (Colorpicker) When show() is called and the widget can be shown.\n *\n * @event colorpickerShow\n */\n this.element.trigger({\n type: 'colorpickerShow',\n colorpicker: this,\n color: this.color\n });\n\n return true;\n }\n\n /**\n * Hides the colorpicker widget.\n * Hide is prevented when it is triggered by an event whose target element has been clicked/touched.\n *\n * @fires colorpickerHide\n * @param {Event} [e]\n * @returns {boolean} True if was visible and afterwards hidden, false if nothing happened.\n */\n\n }, {\n key: 'hide',\n value: function hide(e) {\n this.lastEvent.name = 'hide';\n this.lastEvent.e = e;\n\n if (this.isHidden()) {\n // Do not trigger if already hidden\n return false;\n }\n if (typeof e !== 'undefined' && e.target) {\n // Prevent hide if triggered by an event and an element inside the colorpicker has been clicked/touched\n if ((0, _jquery2.default)(e.currentTarget).parents('.colorpicker').length > 0 || (0, _jquery2.default)(e.target).parents('.colorpicker').length > 0) {\n return false;\n }\n }\n this.picker.addClass('colorpicker-hidden').removeClass('colorpicker-visible');\n (0, _jquery2.default)(window).off('resize.colorpicker', this._reposition);\n (0, _jquery2.default)(window.document).off({\n 'mousedown.colorpicker': this.hide\n });\n\n /**\n * (Colorpicker) When hide() is called and the widget can be hidden.\n *\n * @event colorpickerHide\n */\n this.element.trigger({\n type: 'colorpickerHide',\n colorpicker: this,\n color: this.color\n });\n return true;\n }\n\n /**\n * Returns true if the colorpicker element has the colorpicker-visible class and not the colorpicker-hidden one.\n * False otherwise.\n *\n * @returns {boolean}\n */\n\n }, {\n key: 'isVisible',\n value: function isVisible() {\n return this.picker.hasClass('colorpicker-visible') && !this.picker.hasClass('colorpicker-hidden');\n }\n\n /**\n * Returns true if the colorpicker element has the colorpicker-hidden class and not the colorpicker-visible one.\n * False otherwise.\n *\n * @returns {boolean}\n */\n\n }, {\n key: 'isHidden',\n value: function isHidden() {\n return this.picker.hasClass('colorpicker-hidden') && !this.picker.hasClass('colorpicker-visible');\n }\n\n /**\n * If the input element is present, it updates the value with the current color object color string.\n * If value is set, this method fires a \"change\" event on the input element.\n *\n * @fires change\n * @private\n */\n\n }, {\n key: '_updateInput',\n value: function _updateInput() {\n if (this.hasInput()) {\n var val = this.toInputColorString();\n\n if (val === this.input.prop('value')) {\n // No need to set value or trigger any event if nothing changed\n return;\n }\n\n this.input.prop('value', val ? val : '');\n\n /**\n * (Input) Triggered on the input element when a new color is selected.\n *\n * @event change\n */\n this.input.trigger({\n type: 'change',\n colorpicker: this,\n color: this.color,\n value: val\n });\n }\n }\n\n /**\n * Changes the color adjustment bars using the current color object information.\n * @private\n */\n\n }, {\n key: '_updatePicker',\n value: function _updatePicker() {\n if (!this.hasColor()) {\n return;\n }\n\n var vertical = this.options.horizontal === false,\n sl = vertical ? this.options.sliders : this.options.slidersHorz;\n\n var saturationGuide = this.picker.find('.colorpicker-saturation .colorpicker-guide'),\n hueGuide = this.picker.find('.colorpicker-hue .colorpicker-guide'),\n alphaGuide = this.picker.find('.colorpicker-alpha .colorpicker-guide');\n\n var hsva = this.color.hsvaRatio;\n\n if (hueGuide.length) {\n hueGuide.css(vertical ? 'top' : 'left', (vertical ? sl.hue.maxTop : sl.hue.maxLeft) * (1 - hsva.h));\n }\n\n if (alphaGuide.length) {\n alphaGuide.css(vertical ? 'top' : 'left', (vertical ? sl.alpha.maxTop : sl.alpha.maxLeft) * (1 - hsva.a));\n }\n\n if (saturationGuide.length) {\n saturationGuide.css({\n 'top': sl.saturation.maxTop - hsva.v * sl.saturation.maxTop,\n 'left': hsva.s * sl.saturation.maxLeft\n });\n }\n\n this.picker.find('.colorpicker-saturation').css('backgroundColor', this.color.getHueOnlyCopy().toHexString()); // we only need hue\n\n this.picker.find('.colorpicker-alpha').css('backgroundColor', this.color.toString('hex6')); // we don't need alpha\n }\n\n /**\n * If the component element is present, its background color is updated\n * @private\n */\n\n }, {\n key: '_updateComponent',\n value: function _updateComponent() {\n if (!this.hasColor()) {\n return;\n }\n\n if (this.component !== false) {\n var icn = this.component.find('i').eq(0);\n\n if (icn.length > 0) {\n icn.css({\n 'backgroundColor': this.toCssColorString()\n });\n } else {\n this.component.css({\n 'backgroundColor': this.toCssColorString()\n });\n }\n }\n }\n\n /**\n * @private\n * @returns {boolean}\n */\n\n }, {\n key: '_shouldUpdate',\n value: function _shouldUpdate() {\n return this.hasColor() && this.getValue(false) !== false;\n }\n\n /**\n * Updated the component color, the input value and the widget if a color is present.\n *\n * If force is true, it is updated anyway.\n *\n * @fires colorpickerUpdate\n * @param {boolean} [force]\n */\n\n }, {\n key: 'update',\n value: function update() {\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (this._shouldUpdate() || force === true) {\n // Update only if the current value (from input or data) is not empty\n this._updateComponent();\n\n // Do not update input when autoInputFallback is disabled and last event is keyup.\n var preventInputUpdate = this.options.autoInputFallback !== true &&\n // this.isInvalidColor() || // prevent also on invalid color (on create, leaves invalid colors)\n this.lastEvent.name === 'keyup';\n\n if (!preventInputUpdate) {\n this._updateInput();\n }\n\n this._updatePicker();\n\n /**\n * (Colorpicker) Fired when the widget is updated.\n *\n * @event colorpickerUpdate\n */\n this.element.trigger({\n type: 'colorpickerUpdate',\n colorpicker: this,\n color: this.color\n });\n }\n }\n\n /**\n * Returns the color string from the input value or the 'data-color' attribute of the input or element.\n * If empty, it returns the defaultValue parameter.\n *\n * @param {String|*} [defaultValue]\n * @returns {String|*}\n */\n\n }, {\n key: 'getValue',\n value: function getValue() {\n var defaultValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n defaultValue = typeof defaultValue === 'undefined' ? this.fallbackColor : defaultValue;\n var candidates = [],\n val = false;\n\n if (this.hasInput()) {\n candidates.push(this.input.val());\n candidates.push(this.input.data('color'));\n }\n candidates.push(this.element.data('color'));\n\n candidates.map(function (item) {\n if (item && val === false) {\n val = item;\n }\n });\n\n val = val === false ? defaultValue : val;\n\n if (val instanceof _Color2.default) {\n return val.toString(this.format);\n }\n\n return val;\n }\n\n /**\n * Sets the color manually\n *\n * @fires colorpickerChange\n * @param {String|Color} val\n */\n\n }, {\n key: 'setValue',\n value: function setValue(val) {\n if (this.hasColor() && this.color.equals(val)) {\n // equal color object\n return;\n }\n\n var color = val ? this.createColor(val) : false;\n\n if (!this.hasColor() && !color) {\n // color was empty and the new one too\n return;\n }\n\n // force update if color is changed to empty\n var shouldForceUpdate = this.hasColor() && !color;\n\n this.color = color;\n\n /**\n * (Colorpicker) When the color is set programmatically with setValue().\n *\n * @event colorpickerChange\n */\n this.element.trigger({\n type: 'colorpickerChange',\n colorpicker: this,\n color: this.color,\n value: val\n });\n\n // force update if color has changed to empty\n this.update(shouldForceUpdate);\n }\n\n /**\n * Creates a new color using the widget instance options (fallbackColor, format).\n *\n * @fires colorpickerInvalid\n * @param {*} val\n * @param {boolean} useFallback\n * @returns {Color}\n */\n\n }, {\n key: 'createColor',\n value: function createColor(val) {\n var useFallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var color = new _Color2.default(this._resolveColor(val), { format: this.format });\n\n if (!color.isValid()) {\n var invalidColor = color,\n fallback = void 0;\n\n if (useFallback) {\n fallback = this.fallbackColor instanceof _Color2.default && this.fallbackColor.isValid() ? this.fallbackColor : this._resolveColor(this.fallbackColor);\n\n color = new _Color2.default(fallback, { format: this.format });\n\n if (!color.isValid() && useFallback) {\n throw new Error('The fallback color is invalid.');\n }\n }\n\n color.previous = invalidColor;\n\n /**\n * (Colorpicker) Fired when the color is invalid and the fallback color is going to be used.\n *\n * @event colorpickerInvalid\n */\n this.element.trigger({\n type: 'colorpickerInvalid',\n colorpicker: this,\n color: color,\n value: val\n });\n }\n\n if (!this.isAlphaEnabled() && color.hasTransparency()) {\n // Alpha is disabled\n color.setAlpha(1);\n }\n\n if (!this.hasColor()) {\n // No previous color, so no need to compare\n return color;\n }\n\n var hsva = color.hsvaRatio;\n var prevHsva = this.color.hsvaRatio;\n\n if (hsva.s === 0 && hsva.h === 0 && prevHsva.h !== 0) {\n // Hue was set to 0 because saturation was 0, use previous hue, since it was not meant to change...\n color.setHueRatio(prevHsva.h);\n }\n\n if (!this.isAlphaEnabled() && color.hasTransparency()) {\n // Alpha is disabled\n color.setAlpha(1);\n }\n\n return color;\n }\n\n /**\n * Checks if there is a color object, that it is valid and it is not a fallback\n * @returns {boolean}\n */\n\n }, {\n key: 'isInvalidColor',\n value: function isInvalidColor() {\n return !this.hasColor() || !this.color.isValid() || !!this.color.previous;\n }\n\n /**\n * Returns true if the useAlpha option is exactly true, false otherwise\n * @returns {boolean}\n */\n\n }, {\n key: 'isAlphaEnabled',\n value: function isAlphaEnabled() {\n return this.options.useAlpha === true;\n }\n\n /**\n * Resolves a color, in case is not in a standard format (e.g. a custom color alias)\n *\n * @private\n * @param {String|*} color\n * @returns {String|*|null}\n */\n\n }, {\n key: '_resolveColor',\n value: function _resolveColor(color) {\n var extResolvedColor = false;\n\n _jquery2.default.each(this.extensions, function (name, ext) {\n if (extResolvedColor !== false) {\n // skip if resolved\n return;\n }\n extResolvedColor = ext.resolveColor(color);\n });\n\n if (extResolvedColor !== false) {\n color = extResolvedColor;\n }\n\n return color;\n }\n\n /**\n * Returns true if the widget has an associated input element, false otherwise\n * @returns {boolean}\n */\n\n }, {\n key: 'hasInput',\n value: function hasInput() {\n return this.input !== false;\n }\n\n /**\n * Returns true if this instance is disabled\n * @returns {boolean}\n */\n\n }, {\n key: 'isDisabled',\n value: function isDisabled() {\n return this.disabled === true;\n }\n\n /**\n * Disables the widget and the input if any\n *\n * @fires colorpickerDisable\n * @returns {boolean}\n */\n\n }, {\n key: 'disable',\n value: function disable() {\n if (this.hasInput()) {\n this.input.prop('disabled', true);\n }\n this.disabled = true;\n\n /**\n * (Colorpicker) When the widget has been disabled.\n *\n * @event colorpickerDisable\n */\n this.element.trigger({\n type: 'colorpickerDisable',\n colorpicker: this,\n color: this.color\n });\n return true;\n }\n\n /**\n * Enables the widget and the input if any\n *\n * @fires colorpickerEnable\n * @returns {boolean}\n */\n\n }, {\n key: 'enable',\n value: function enable() {\n if (this.hasInput()) {\n this.input.prop('disabled', false);\n }\n this.disabled = false;\n\n /**\n * (Colorpicker) When the widget has been enabled.\n *\n * @event colorpickerEnable\n */\n this.element.trigger({\n type: 'colorpickerEnable',\n colorpicker: this,\n color: this.color\n });\n return true;\n }\n\n /**\n * Function triggered when clicking in one of the color adjustment bars\n *\n * @private\n * @fires mousemove\n * @param {Event} e\n * @returns {boolean}\n */\n\n }, {\n key: '_mousedown',\n value: function _mousedown(e) {\n this.lastEvent.name = 'mousedown';\n this.lastEvent.e = e;\n\n if (!e.pageX && !e.pageY && e.originalEvent && e.originalEvent.touches) {\n e.pageX = e.originalEvent.touches[0].pageX;\n e.pageY = e.originalEvent.touches[0].pageY;\n }\n e.stopPropagation();\n e.preventDefault();\n\n var target = (0, _jquery2.default)(e.target);\n\n // detect the slider and set the limits and callbacks\n var zone = target.closest('div');\n var sl = this.options.horizontal ? this.options.slidersHorz : this.options.sliders;\n\n if (!zone.is('.colorpicker')) {\n if (zone.is('.colorpicker-saturation')) {\n this.currentSlider = _jquery2.default.extend({}, sl.saturation);\n } else if (zone.is('.colorpicker-hue')) {\n this.currentSlider = _jquery2.default.extend({}, sl.hue);\n } else if (zone.is('.colorpicker-alpha')) {\n this.currentSlider = _jquery2.default.extend({}, sl.alpha);\n } else {\n return false;\n }\n var offset = zone.offset();\n // reference to guide's style\n\n this.currentSlider.guide = zone.find('.colorpicker-guide')[0].style;\n this.currentSlider.left = e.pageX - offset.left;\n this.currentSlider.top = e.pageY - offset.top;\n this.mousePointer = {\n left: e.pageX,\n top: e.pageY\n };\n\n /**\n * (window.document) Triggered on mousedown for the document object,\n * so the color adjustment guide is moved to the clicked position.\n *\n * @event mousemove\n */\n (0, _jquery2.default)(window.document).on({\n 'mousemove.colorpicker': _jquery2.default.proxy(this._mousemove, this),\n 'touchmove.colorpicker': _jquery2.default.proxy(this._mousemove, this),\n 'mouseup.colorpicker': _jquery2.default.proxy(this._mouseup, this),\n 'touchend.colorpicker': _jquery2.default.proxy(this._mouseup, this)\n }).trigger('mousemove');\n }\n return false;\n }\n\n /**\n * Function triggered when dragging a guide inside one of the color adjustment bars.\n *\n * @private\n * @param {Event} e\n * @returns {boolean}\n */\n\n }, {\n key: '_mousemove',\n value: function _mousemove(e) {\n this.lastEvent.name = 'mousemove';\n this.lastEvent.e = e;\n\n var color = !this.hasColor() ? this.createColor(this.fallbackColor) : this.color.getCopy();\n\n if (!e.pageX && !e.pageY && e.originalEvent && e.originalEvent.touches) {\n e.pageX = e.originalEvent.touches[0].pageX;\n e.pageY = e.originalEvent.touches[0].pageY;\n }\n e.stopPropagation();\n e.preventDefault();\n var left = Math.max(0, Math.min(this.currentSlider.maxLeft, this.currentSlider.left + ((e.pageX || this.mousePointer.left) - this.mousePointer.left)));\n var top = Math.max(0, Math.min(this.currentSlider.maxTop, this.currentSlider.top + ((e.pageY || this.mousePointer.top) - this.mousePointer.top)));\n\n this.currentSlider.guide.left = left + 'px';\n this.currentSlider.guide.top = top + 'px';\n if (this.currentSlider.callLeft) {\n color[this.currentSlider.callLeft].call(color, left / this.currentSlider.maxLeft);\n }\n if (this.currentSlider.callTop) {\n color[this.currentSlider.callTop].call(color, top / this.currentSlider.maxTop);\n }\n\n this.setValue(color);\n return false;\n }\n\n /**\n * Function triggered when releasing the click in one of the color adjustment bars.\n *\n * @private\n * @param {Event} e\n * @returns {boolean}\n */\n\n }, {\n key: '_mouseup',\n value: function _mouseup(e) {\n this.lastEvent.name = 'mouseup';\n this.lastEvent.e = e;\n\n e.stopPropagation();\n e.preventDefault();\n (0, _jquery2.default)(window.document).off({\n 'mousemove.colorpicker': this._mousemove,\n 'touchmove.colorpicker': this._mousemove,\n 'mouseup.colorpicker': this._mouseup,\n 'touchend.colorpicker': this._mouseup\n });\n return false;\n }\n\n /**\n * Function triggered when the input has changed, so the colorpicker gets updated.\n *\n * @private\n * @param {Event} e\n * @returns {boolean}\n */\n\n }, {\n key: '_change',\n value: function _change(e) {\n this.lastEvent.name = 'change';\n this.lastEvent.e = e;\n\n var val = this.input.val();\n\n if (val !== this.toInputColorString()) {\n this.setValue(val);\n }\n }\n\n /**\n * Function triggered after a keyboard key has been released.\n *\n * @private\n * @param {Event} e\n * @returns {boolean}\n */\n\n }, {\n key: '_keyup',\n value: function _keyup(e) {\n this.lastEvent.name = 'keyup';\n this.lastEvent.e = e;\n\n var val = this.input.val();\n\n if (val !== this.toInputColorString()) {\n this.setValue(val);\n }\n }\n }, {\n key: 'fallbackColor',\n get: function get() {\n return this.options.fallbackColor ? this.options.fallbackColor : this.hasColor() ? this.color : '#000';\n }\n }, {\n key: 'format',\n get: function get() {\n if (this.options.format) {\n return this.options.format;\n }\n\n if (this.hasColor() && this.color.hasTransparency() && this.color.format.match(/^hex/)) {\n return this.options.enableHex8 ? 'hex8' : this.isAlphaEnabled() ? 'rgba' : 'hex';\n }\n\n if (this.hasColor()) {\n return this.color.format;\n }\n\n return null;\n }\n }]);\n\n return Colorpicker;\n}();\n\nexports.default = Colorpicker;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _tinycolor2 = __webpack_require__(6);\n\nvar _tinycolor3 = _interopRequireDefault(_tinycolor2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction unwrapColor(color) {\n if (color instanceof _tinycolor3.default) {\n return {\n r: color._r,\n g: color._g,\n b: color._b,\n a: color._a\n };\n }\n return color;\n}\n\n/**\n * Sanitizes a format string, so it is compatible with tinycolor,\n * or returns the same value if it is not a string.\n *\n * @param {String} format\n * @returns {String|*}\n * @private\n */\nfunction getCompatibleFormat(format) {\n if (format instanceof String || typeof format === 'string') {\n return format.replace(/a$/gi, '');\n }\n\n return format;\n}\n\n/**\n * Color manipulation class that extends the tinycolor library class.\n */\n\nvar Color = function (_tinycolor) {\n _inherits(Color, _tinycolor);\n\n _createClass(Color, [{\n key: 'id',\n\n /**\n * Identifier of the color instance.\n *\n * @type {int}\n * @readonly\n */\n get: function get() {\n return this._tc_id;\n }\n\n /**\n * Format of the parsed color.\n *\n * @type {String}\n * @readonly\n */\n\n }, {\n key: 'format',\n get: function get() {\n return this._format;\n }\n\n /**\n * All options of the current instance.\n *\n * @type {{format: String, gradientType: String}}\n * @readonly\n */\n\n }, {\n key: 'options',\n get: function get() {\n return {\n format: this._format,\n gradientType: this._gradientType\n };\n }\n\n /**\n * @returns {{h, s, v, a}}\n */\n\n }, {\n key: 'hsva',\n get: function get() {\n return this.toHsv();\n }\n\n /**\n * @returns {{h, s, v, a}}\n */\n\n }, {\n key: 'hsvaRatio',\n get: function get() {\n var hsv = this.hsva;\n\n return {\n h: hsv.h / 360,\n s: hsv.s,\n v: hsv.v,\n a: hsv.a\n };\n }\n\n /**\n * foo bar\n * @param {Color|*} color\n * @param {{format}} [options]\n * @constructor\n */\n\n }]);\n\n function Color(color) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { format: null };\n\n _classCallCheck(this, Color);\n\n if (options.format) {\n options.format = getCompatibleFormat(options.format);\n }\n\n /**\n * @type {Color|*}\n */\n var _this = _possibleConstructorReturn(this, (Color.__proto__ || Object.getPrototypeOf(Color)).call(this, unwrapColor(color), options));\n\n _this._originalInput = color; // keep real original color\n /**\n * Hue backup to not lose the information when saturation is 0.\n * @type {number}\n */\n _this._hbak = _this.hsva.h;\n /**\n * If set, it contains a reference to a previous color that caused the creation of this one.\n * @type {Color}\n */\n _this.previous = null;\n return _this;\n }\n\n /**\n * Compares a color object with this one and returns true if it is equal or false if not.\n *\n * @param {Color} color\n * @returns {boolean}\n */\n\n\n _createClass(Color, [{\n key: 'equals',\n value: function equals(color) {\n if (!(color instanceof _tinycolor3.default)) {\n return false;\n }\n return this._r === color._r && this._g === color._g && this._b === color._b && this._a === color._a && this._roundA === color._roundA && this._format === color._format && this._gradientType === color._gradientType && this._ok === color._ok;\n }\n\n /**\n * Imports all variables of the given color to this instance, excepting `_tc_id`.\n * @param {Color} color\n */\n\n }, {\n key: 'importColor',\n value: function importColor(color) {\n if (!(color instanceof _tinycolor3.default)) {\n throw new Error('Color.importColor: The color argument is not an instance of tinycolor.');\n }\n this._originalInput = color._originalInput;\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this._a = color._a;\n this._roundA = color._roundA;\n this._format = getCompatibleFormat(color._format);\n this._gradientType = color._gradientType;\n this._ok = color._ok;\n // omit .previous and ._tc_id import\n }\n\n /**\n * Imports the _r, _g, _b, _a, _hbak and _ok variables of the given color to this instance.\n * @param {Color} color\n */\n\n }, {\n key: 'importRgb',\n value: function importRgb(color) {\n if (!color instanceof Color) {\n throw new Error('Color.importColor: The color argument is not an instance of tinycolor.');\n }\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this._a = color._a;\n this._ok = color._ok;\n this._hbak = color._hbak;\n }\n\n /**\n * @param {{h,s,v,a}} hsv\n */\n\n }, {\n key: 'importHsv',\n value: function importHsv(hsv) {\n this._hbak = hsv.h;\n this.importRgb(new Color(hsv, this.options));\n }\n\n /**\n * @returns {Color}\n */\n\n }, {\n key: 'getCopy',\n value: function getCopy() {\n return new Color(this.hsva, this.options);\n }\n\n /**\n * @returns {Color}\n */\n\n }, {\n key: 'getHueOnlyCopy',\n value: function getHueOnlyCopy() {\n return new Color({ h: this._hbak ? this._hbak : this.hsva.h, s: 100, v: 100 }, this.options);\n }\n\n /**\n * @returns {Color}\n */\n\n }, {\n key: 'getOpaqueCopy',\n value: function getOpaqueCopy() {\n return new Color(Object.assign({}, this.hsva, { a: 1 }), this.options);\n }\n\n /**\n * @param {number} h Degrees from 0 to 360\n */\n\n }, {\n key: 'setHue',\n value: function setHue(h) {\n this.importHsv(Object.assign({}, this.hsva, { h: h }));\n }\n\n /**\n * @param {number} s Percent from 0 o 100\n */\n\n }, {\n key: 'setSaturation',\n value: function setSaturation(s) {\n this.importHsv(Object.assign({}, this.hsva, { s: s }));\n }\n\n /**\n * @param {number} v Percent from 0 o 100\n */\n\n }, {\n key: 'setBrightness',\n value: function setBrightness(v) {\n this.importHsv(Object.assign({}, this.hsva, { v: v }));\n }\n\n /**\n * @param {number} h Ratio from 0.0 to 1.0\n */\n\n }, {\n key: 'setHueRatio',\n value: function setHueRatio(h) {\n if (h === 0) {\n return;\n }\n this.setHue((1 - h) * 360);\n }\n\n /**\n * @param {number} s Ratio from 0.0 to 1.0\n */\n\n }, {\n key: 'setSaturationRatio',\n value: function setSaturationRatio(s) {\n this.setSaturation(s);\n }\n\n /**\n * @param {number} v Ratio from 0.0 to 1.0\n */\n\n }, {\n key: 'setBrightnessRatio',\n value: function setBrightnessRatio(v) {\n this.setBrightness(1 - v);\n }\n\n /**\n * @param {number} a Ratio from 0.0 to 1.0\n */\n\n }, {\n key: 'setAlphaRatio',\n value: function setAlphaRatio(a) {\n this.setAlpha(1 - a);\n }\n\n /**\n * @returns {boolean}\n */\n\n }, {\n key: 'isTransparent',\n value: function isTransparent() {\n return this._a === 0;\n }\n\n /**\n * @returns {boolean}\n */\n\n }, {\n key: 'hasTransparency',\n value: function hasTransparency() {\n return this._a !== 1;\n }\n\n /**\n * @param {string|null} [format] One of \"rgb\", \"prgb\", \"hex\"/\"hex6\", \"hex3\", \"hex8\", \"hsl\", \"hsv\"/\"hsb\", \"name\"\n * @returns {String}\n */\n\n }, {\n key: 'toString',\n value: function toString() {\n var format = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n format = format ? getCompatibleFormat(format) : this.format;\n\n var colorStr = _get(Color.prototype.__proto__ || Object.getPrototypeOf(Color.prototype), 'toString', this).call(this, format);\n\n if (colorStr && colorStr.match(/^#[0-9a-f]{3,8}$/i)) {\n // Support transparent for hex formats\n if (this.isTransparent() && this._r === 0 && this._g === 0 && this._b === 0) {\n return 'transparent';\n }\n }\n\n return colorStr;\n }\n }]);\n\n return Color;\n}(_tinycolor3.default);\n\nexports.default = Color;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_RESULT__;// TinyColor v1.4.1\n// https://github.com/bgrins/TinyColor\n// Brian Grinstead, MIT License\n\n(function(Math) {\n\nvar trimLeft = /^\\s+/,\n trimRight = /\\s+$/,\n tinyCounter = 0,\n mathRound = Math.round,\n mathMin = Math.min,\n mathMax = Math.max,\n mathRandom = Math.random;\n\nfunction tinycolor (color, opts) {\n\n color = (color) ? color : '';\n opts = opts || { };\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n\n var rgb = inputToRGB(color);\n this._originalInput = color,\n this._r = rgb.r,\n this._g = rgb.g,\n this._b = rgb.b,\n this._a = rgb.a,\n this._roundA = mathRound(100*this._a) / 100,\n this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) { this._r = mathRound(this._r); }\n if (this._g < 1) { this._g = mathRound(this._g); }\n if (this._b < 1) { this._b = mathRound(this._b); }\n\n this._ok = rgb.ok;\n this._tc_id = tinyCounter++;\n}\n\ntinycolor.prototype = {\n isDark: function() {\n return this.getBrightness() < 128;\n },\n isLight: function() {\n return !this.isDark();\n },\n isValid: function() {\n return this._ok;\n },\n getOriginalInput: function() {\n return this._originalInput;\n },\n getFormat: function() {\n return this._format;\n },\n getAlpha: function() {\n return this._a;\n },\n getBrightness: function() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r/255;\n GsRGB = rgb.g/255;\n BsRGB = rgb.b/255;\n\n if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);}\n if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);}\n if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);}\n return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);\n },\n setAlpha: function(value) {\n this._a = boundAlpha(value);\n this._roundA = mathRound(100*this._a) / 100;\n return this;\n },\n toHsv: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };\n },\n toHsvString: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);\n return (this._a == 1) ?\n \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" :\n \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \"+ this._roundA + \")\";\n },\n toHsl: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };\n },\n toHslString: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);\n return (this._a == 1) ?\n \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" :\n \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \"+ this._roundA + \")\";\n },\n toHex: function(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function(allow3Char) {\n return '#' + this.toHex(allow3Char);\n },\n toHex8: function(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function(allow4Char) {\n return '#' + this.toHex8(allow4Char);\n },\n toRgb: function() {\n return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };\n },\n toRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \")\" :\n \"rgba(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function() {\n return { r: mathRound(bound01(this._r, 255) * 100) + \"%\", g: mathRound(bound01(this._g, 255) * 100) + \"%\", b: mathRound(bound01(this._b, 255) * 100) + \"%\", a: this._a };\n },\n toPercentageRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%)\" :\n \"rgba(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function() {\n if (this._a === 0) {\n return \"transparent\";\n }\n\n if (this._a < 1) {\n return false;\n }\n\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function(secondColor) {\n var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n\n return \"progid:DXImageTransform.Microsoft.gradient(\"+gradientType+\"startColorstr=\"+hex8String+\",endColorstr=\"+secondHex8String+\")\";\n },\n toString: function(format) {\n var formatSet = !!format;\n format = format || this._format;\n\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n\n return formattedString || this.toHexString();\n },\n clone: function() {\n return tinycolor(this.toString());\n },\n\n _applyModification: function(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function() {\n return this._applyModification(lighten, arguments);\n },\n brighten: function() {\n return this._applyModification(brighten, arguments);\n },\n darken: function() {\n return this._applyModification(darken, arguments);\n },\n desaturate: function() {\n return this._applyModification(desaturate, arguments);\n },\n saturate: function() {\n return this._applyModification(saturate, arguments);\n },\n greyscale: function() {\n return this._applyModification(greyscale, arguments);\n },\n spin: function() {\n return this._applyModification(spin, arguments);\n },\n\n _applyCombination: function(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function() {\n return this._applyCombination(analogous, arguments);\n },\n complement: function() {\n return this._applyCombination(complement, arguments);\n },\n monochromatic: function() {\n return this._applyCombination(monochromatic, arguments);\n },\n splitcomplement: function() {\n return this._applyCombination(splitcomplement, arguments);\n },\n triad: function() {\n return this._applyCombination(triad, arguments);\n },\n tetrad: function() {\n return this._applyCombination(tetrad, arguments);\n }\n};\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function(color, opts) {\n if (typeof color == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n }\n else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n\n return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n// \"red\"\n// \"#f00\" or \"f00\"\n// \"#ff0000\" or \"ff0000\"\n// \"#ff000000\" or \"ff000000\"\n// \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n// \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n// \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n// \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n// \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n// \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n// \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n\n var rgb = { r: 0, g: 0, b: 0 };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n\n if (typeof color == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n\n a = boundAlpha(a);\n\n return {\n ok: ok,\n format: color.format || format,\n r: mathMin(255, mathMax(rgb.r, 0)),\n g: mathMin(255, mathMax(rgb.g, 0)),\n b: mathMin(255, mathMax(rgb.b, 0)),\n a: a\n };\n}\n\n\n// Conversion Functions\n// --------------------\n\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// \n\n// `rgbToRgb`\n// Handle bounds / percentage checking to conform to CSS color spec\n// \n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b){\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n}\n\n// `rgbToHsl`\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, l = (max + min) / 2;\n\n if(max == min) {\n h = s = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n\n h /= 6;\n }\n\n return { h: h, s: s, l: l };\n}\n\n// `hslToRgb`\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n var r, g, b;\n\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n\n function hue2rgb(p, q, t) {\n if(t < 0) t += 1;\n if(t > 1) t -= 1;\n if(t < 1/6) return p + (q - p) * 6 * t;\n if(t < 1/2) return q;\n if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n return p;\n }\n\n if(s === 0) {\n r = g = b = l; // achromatic\n }\n else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, v = max;\n\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if(max == min) {\n h = 0; // achromatic\n }\n else {\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h /= 6;\n }\n return { h: h, s: s, v: v };\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\n function hsvToRgb(h, s, v) {\n\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHex`\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToHex`\n// Converts an RGBA color plus alpha transparency to hex\n// Assumes r, g, b are contained in the set [0, 255] and\n// a in [0, 1]. Returns a 4 or 8 character rgba hex\nfunction rgbaToHex(r, g, b, a, allow4Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16)),\n pad2(convertDecimalToHex(a))\n ];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToArgbHex`\n// Converts an RGBA color to an ARGB Hex8 string\n// Rarely used, but required for \"toFilter()\"\nfunction rgbaToArgbHex(r, g, b, a) {\n\n var hex = [\n pad2(convertDecimalToHex(a)),\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n return hex.join(\"\");\n}\n\n// `equals`\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) { return false; }\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\n\ntinycolor.random = function() {\n return tinycolor.fromRatio({\n r: mathRandom(),\n g: mathRandom(),\n b: mathRandom()\n });\n};\n\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// \n\nfunction desaturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction saturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction greyscale(color) {\n return tinycolor(color).desaturate(100);\n}\n\nfunction lighten (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\nfunction brighten(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var rgb = tinycolor(color).toRgb();\n rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));\n rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));\n rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));\n return tinycolor(rgb);\n}\n\nfunction darken (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\n// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n// Values outside of this range will be wrapped into this range.\nfunction spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n}\n\n// Combination Functions\n// ---------------------\n// Thanks to jQuery xColor for some of the ideas behind these\n// \n\nfunction complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n}\n\nfunction triad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction tetrad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),\n tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})\n ];\n}\n\nfunction analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n\n for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n}\n\nfunction monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h, s = hsv.s, v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n\n while (results--) {\n ret.push(tinycolor({ h: h, s: s, v: v}));\n v = (v + modification) % 1;\n }\n\n return ret;\n}\n\n// Utility Functions\n// ---------------------\n\ntinycolor.mix = function(color1, color2, amount) {\n amount = (amount === 0) ? 0 : (amount || 50);\n\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n\n var p = amount / 100;\n\n var rgba = {\n r: ((rgb2.r - rgb1.r) * p) + rgb1.r,\n g: ((rgb2.g - rgb1.g) * p) + rgb1.g,\n b: ((rgb2.b - rgb1.b) * p) + rgb1.b,\n a: ((rgb2.a - rgb1.a) * p) + rgb1.a\n };\n\n return tinycolor(rgba);\n};\n\n\n// Readability Functions\n// ---------------------\n// false\n// tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\ntinycolor.isReadable = function(color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n\n out = false;\n\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n\n};\n\n// `mostReadable`\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// Optionally returns Black or White if the most readable color is unreadable.\n// *Example*\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\ntinycolor.mostReadable = function(baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size ;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors ;\n level = args.level;\n size = args.size;\n\n for (var i= 0; i < colorList.length ; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n\n if (tinycolor.isReadable(baseColor, bestColor, {\"level\":level,\"size\":size}) || !includeFallbackColors) {\n return bestColor;\n }\n else {\n args.includeFallbackColors=false;\n return tinycolor.mostReadable(baseColor,[\"#fff\", \"#000\"],args);\n }\n};\n\n\n// Big List of Colors\n// ------------------\n// \nvar names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n};\n\n// Make it easy to access colors via `hexNames[hex]`\nvar hexNames = tinycolor.hexNames = flip(names);\n\n\n// Utilities\n// ---------\n\n// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\nfunction flip(o) {\n var flipped = { };\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n a = parseFloat(a);\n\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n\n return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n if (isOnePointZero(n)) { n = \"100%\"; }\n\n var processPercent = isPercentage(n);\n n = mathMin(max, mathMax(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if ((Math.abs(n - max) < 0.000001)) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return (n % max) / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n return mathMin(1, mathMax(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// \nfunction isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n return typeof n === \"string\" && n.indexOf('%') != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n return c.length == 1 ? '0' + c : '' + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n if (n <= 1) {\n n = (n * 100) + \"%\";\n }\n\n return n;\n}\n\n// Converts a decimal to a hex value\nfunction convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n return (parseIntFromHex(h) / 255);\n}\n\nvar matchers = (function() {\n\n // \n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // \n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n})();\n\n// `isValidCSSUnit`\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see `matchers` above for definition).\nfunction isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n}\n\n// `stringInputToObject`\n// Permissive string parsing. Take in a number of formats, and output an object\n// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\nfunction stringInputToObject(color) {\n\n color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n }\n else if (color == 'transparent') {\n return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if ((match = matchers.rgb.exec(color))) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n if ((match = matchers.rgba.exec(color))) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n if ((match = matchers.hsl.exec(color))) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n if ((match = matchers.hsla.exec(color))) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n if ((match = matchers.hsv.exec(color))) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n if ((match = matchers.hsva.exec(color))) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n if ((match = matchers.hex8.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex6.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if ((match = matchers.hex4.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n a: convertHexToDecimal(match[4] + '' + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex3.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n\n return false;\n}\n\nfunction validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\"level\":\"AA\", \"size\":\"small\"};\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\"level\":level, \"size\":size};\n}\n\n// Node: Export function\nif (typeof module !== \"undefined\" && module.exports) {\n module.exports = tinycolor;\n}\n// AMD/requirejs: Define the module\nelse if (true) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = function () {return tinycolor;}.call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n}\n// Browser: Expose to window\nelse {\n window.tinycolor = tinycolor;\n}\n\n})(Math);\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @module\n */\n\n/**\n * Colorpicker default options\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = {\n /**\n * If true, loads the Debugger extension automatically into the current instance\n * @type {boolean}\n * @default false\n */\n debug: false,\n /**\n * Forces a color, ignoring the one from the elements value or data-color attribute.\n *\n * @type {(String|Color|boolean)}\n * @default false\n */\n color: false,\n /**\n * Forces an specific color format. If false, it will be automatically detected the first time,\n * but if null it will be always recalculated.\n *\n * Note that the ending 'a' of the format meaning \"alpha\" has currently no effect, meaning that rgb is the same as\n * rgba excepting if the alpha channel is disabled (see useAlpha).\n *\n * @type {('rgb'|'rgba'|'prgb'|'prgba'|'hex'|'hex3'|'hex6'|'hex8'|'hsl'|'hsla'|'hsv'|'hsva'|'name'|boolean)}\n * @default false\n */\n format: false,\n /**\n * Horizontal mode layout.\n *\n * If true, the hue and alpha channel bars will be rendered horizontally, above the saturation selector.\n *\n * @type {boolean}\n * @default false\n */\n horizontal: false,\n /**\n * Forces to show the colorpicker as an inline element\n *\n * @type {boolean}\n * @default false\n */\n inline: false,\n /**\n * Children input CSS selector\n *\n * @type {String}\n * @default 'input'\n */\n input: 'input',\n /**\n * Colorpicker container CSS selector. If given, the colorpicker will be placed inside this container.\n * If true, the colorpicker element itself will be used as the container.\n *\n * @type {String|boolean}\n * @default false\n */\n container: false, // container selector\n /**\n * Children color component CSS selector.\n * If it exists, the child element background will be changed on color change.\n *\n * @type {String|boolean}\n * @default '.add-on, .input-group-addon'\n */\n component: '.add-on, .input-group-addon',\n /**\n * Fallback color to use when the given color is invalid.\n * If false, the latest valid color will be used as a fallback.\n *\n * @type {String|Color|boolean}\n * @default false\n */\n fallbackColor: false,\n /**\n * If enabled, the input content will be replaced always with a valid color,\n * if not enabled the invalid color will be left in the input, but valid in the internal color object.\n *\n * @type {boolean}\n * @default false\n */\n autoInputFallback: false,\n /**\n * If true a hash will be prepended to hexadecimal colors.\n * If false, the hash will be removed.\n * This only affects the input values.\n *\n * @type {boolean}\n * @default false\n */\n useHashPrefix: true,\n /**\n * If true or false the alpha adjustment bar will be displayed no matter what.\n * If false it will be always hidden and alpha channel won't be allowed programmatically for this instance,\n * so the selected or typed color will be always opaque.\n *\n * @type {boolean}\n * @default true\n */\n useAlpha: true,\n /**\n * This only applies when the color format is hexadecimal.\n * If true, the alpha channel will be allowed for hexadecimal formatted colors, making them having 4 or 8 chars\n * (RGBA or RRGGBBAA). This format is not yet supported in all modern browsers, so it is disabled by default.\n * If false, rgba will be used whenever there is an alpha change different than 1 and the color format is\n * automatic.\n *\n * @type {boolean}\n * @default true\n */\n enableHex8: false,\n /**\n * Vertical sliders configuration\n * @type {Object}\n */\n sliders: {\n saturation: {\n maxLeft: 100,\n maxTop: 100,\n callLeft: 'setSaturationRatio',\n callTop: 'setBrightnessRatio'\n },\n hue: {\n maxLeft: 0,\n maxTop: 100,\n callLeft: false,\n callTop: 'setHueRatio'\n },\n alpha: {\n maxLeft: 0,\n maxTop: 100,\n callLeft: false,\n callTop: 'setAlphaRatio'\n }\n },\n /**\n * Horizontal sliders configuration\n * @type {Object}\n */\n slidersHorz: {\n saturation: {\n maxLeft: 100,\n maxTop: 100,\n callLeft: 'setSaturationRatio',\n callTop: 'setBrightnessRatio'\n },\n hue: {\n maxLeft: 100,\n maxTop: 0,\n callLeft: 'setHueRatio',\n callTop: false\n },\n alpha: {\n maxLeft: 100,\n maxTop: 0,\n callLeft: 'setAlphaRatio',\n callTop: false\n }\n },\n /**\n * Colorpicker popup alignment.\n * For now only right is supported.\n *\n * @type {('right')}\n * @default 'right'\n */ // TODO: add 'left' and 'auto' support.\n align: 'right',\n /**\n * Custom class to be added to the colorpicker element\n *\n * @type {String}\n */\n customClass: null,\n /**\n * Colorpicker widget template\n * @type {String}\n * @example\n * \n *
        \n *
        \n *
        \n *
        \n *
        \n *
        \n */\n template: '
        \\n
        \\n
        \\n
        ',\n /**\n *\n * Associative object with the extension class name and its config.\n * Colorpicker comes with many bundled extensions: debugger, palette, preview and swatches (a superset of Palette).\n *\n * @type {Object}\n * @example\n * extensions: [\n * {\n * name: 'swatches'\n * colors: {\n * 'primary': '#337ab7',\n * 'success': '#5cb85c',\n * 'info': '#5bc0de',\n * 'warning': '#f0ad4e',\n * 'danger': '#d9534f'\n * },\n * namesAsValues: true\n * }\n * ]\n */\n extensions: [{\n name: 'preview',\n showText: false\n }]\n};\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Palette = exports.Swatches = exports.Preview = exports.Debugger = undefined;\n\nvar _Debugger = __webpack_require__(9);\n\nvar _Debugger2 = _interopRequireDefault(_Debugger);\n\nvar _Preview = __webpack_require__(10);\n\nvar _Preview2 = _interopRequireDefault(_Preview);\n\nvar _Swatches = __webpack_require__(11);\n\nvar _Swatches2 = _interopRequireDefault(_Swatches);\n\nvar _Palette = __webpack_require__(2);\n\nvar _Palette2 = _interopRequireDefault(_Palette);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.Debugger = _Debugger2.default;\nexports.Preview = _Preview2.default;\nexports.Swatches = _Swatches2.default;\nexports.Palette = _Palette2.default;\nexports.default = {\n 'debugger': _Debugger2.default,\n 'preview': _Preview2.default,\n 'swatches': _Swatches2.default,\n 'palette': _Palette2.default\n};\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _Extension2 = __webpack_require__(1);\n\nvar _Extension3 = _interopRequireDefault(_Extension2);\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Debugger = function (_Extension) {\n _inherits(Debugger, _Extension);\n\n function Debugger(colorpicker) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Debugger);\n\n /**\n * @type {number}\n */\n var _this = _possibleConstructorReturn(this, (Debugger.__proto__ || Object.getPrototypeOf(Debugger)).call(this, colorpicker, options));\n\n _this.eventCounter = 0;\n if (_this.colorpicker.hasInput()) {\n _this.colorpicker.input.on('change.colorpicker-ext', _jquery2.default.proxy(_this.onChangeInput, _this));\n }\n return _this;\n }\n\n /**\n * @fires colorpickerDebug\n * @param {string} eventName\n * @param {*} args\n */\n\n\n _createClass(Debugger, [{\n key: 'log',\n value: function log(eventName) {\n var _console;\n\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n this.eventCounter += 1;\n\n var logMessage = '#' + this.eventCounter + ': Colorpicker#' + this.colorpicker.id + ' [' + eventName + ']';\n\n (_console = console).debug.apply(_console, [logMessage].concat(args));\n\n /**\n * (Colorpicker) Fired by the ConsoleDebug extension whenever it logs something\n *\n * @event colorpickerDebug\n */\n this.colorpicker.element.trigger({\n type: 'colorpickerDebug',\n colorpicker: this.colorpicker,\n color: this.color,\n debug: {\n debugger: this,\n eventName: eventName,\n logArgs: args,\n logMessage: logMessage\n }\n });\n }\n }, {\n key: 'resolveColor',\n value: function resolveColor(color) {\n this.log('resolveColor()', color);\n return false;\n }\n }, {\n key: 'onCreate',\n value: function onCreate(event) {\n this.log('colorpickerCreate');\n return _get(Debugger.prototype.__proto__ || Object.getPrototypeOf(Debugger.prototype), 'onCreate', this).call(this, event);\n }\n }, {\n key: 'onDestroy',\n value: function onDestroy(event) {\n this.log('colorpickerDestroy');\n this.eventCounter = 0;\n\n if (this.colorpicker.hasInput()) {\n this.colorpicker.input.off('.colorpicker-ext');\n }\n\n return _get(Debugger.prototype.__proto__ || Object.getPrototypeOf(Debugger.prototype), 'onDestroy', this).call(this, event);\n }\n }, {\n key: 'onUpdate',\n value: function onUpdate(event) {\n this.log('colorpickerUpdate');\n }\n\n /**\n * @listens _change\n * @param {Event} event\n */\n\n }, {\n key: 'onChangeInput',\n value: function onChangeInput(event) {\n this.log('input:change.colorpicker', event.value, event.color);\n }\n }, {\n key: 'onChange',\n value: function onChange(event) {\n this.log('colorpickerChange', event.value, event.color);\n }\n }, {\n key: 'onInvalid',\n value: function onInvalid(event) {\n this.log('colorpickerInvalid', event.value, event.color);\n }\n }, {\n key: 'onHide',\n value: function onHide(event) {\n this.log('colorpickerHide');\n this.eventCounter = 0;\n }\n }, {\n key: 'onShow',\n value: function onShow(event) {\n this.log('colorpickerShow');\n }\n }, {\n key: 'onDisable',\n value: function onDisable(event) {\n this.log('colorpickerDisable');\n }\n }, {\n key: 'onEnable',\n value: function onEnable(event) {\n this.log('colorpickerEnable');\n }\n }]);\n\n return Debugger;\n}(_Extension3.default);\n\nexports.default = Debugger;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _Extension2 = __webpack_require__(1);\n\nvar _Extension3 = _interopRequireDefault(_Extension2);\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Preview = function (_Extension) {\n _inherits(Preview, _Extension);\n\n function Preview(colorpicker) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Preview);\n\n var _this = _possibleConstructorReturn(this, (Preview.__proto__ || Object.getPrototypeOf(Preview)).call(this, colorpicker, Object.assign({}, {\n template: '
        ',\n showText: true,\n format: colorpicker.format\n }, options)));\n\n _this.element = (0, _jquery2.default)(_this.options.template);\n _this.elementInner = _this.element.find('div');\n return _this;\n }\n\n _createClass(Preview, [{\n key: 'onCreate',\n value: function onCreate(event) {\n _get(Preview.prototype.__proto__ || Object.getPrototypeOf(Preview.prototype), 'onCreate', this).call(this, event);\n this.colorpicker.picker.append(this.element);\n }\n }, {\n key: 'onUpdate',\n value: function onUpdate(event) {\n _get(Preview.prototype.__proto__ || Object.getPrototypeOf(Preview.prototype), 'onUpdate', this).call(this, event);\n\n this.elementInner.css('backgroundColor', event.color.toRgbString());\n\n if (this.options.showText) {\n this.elementInner.html(event.color.toString(this.options.format || this.colorpicker.format));\n\n if (event.color.isDark()) {\n this.elementInner.css('color', 'white');\n } else {\n this.elementInner.css('color', 'black');\n }\n }\n }\n }]);\n\n return Preview;\n}(_Extension3.default);\n\nexports.default = Preview;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _Palette2 = __webpack_require__(2);\n\nvar _Palette3 = _interopRequireDefault(_Palette2);\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar defaults = {\n barTemplate: '
        ',\n swatchTemplate: ''\n};\n\nvar Swatches = function (_Palette) {\n _inherits(Swatches, _Palette);\n\n function Swatches(colorpicker) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Swatches);\n\n return _possibleConstructorReturn(this, (Swatches.__proto__ || Object.getPrototypeOf(Swatches)).call(this, colorpicker, Object.assign({}, defaults, options)));\n }\n\n _createClass(Swatches, [{\n key: 'isEnabled',\n value: function isEnabled() {\n return this.getLength() > 0;\n }\n }, {\n key: 'onCreate',\n value: function onCreate(event) {\n var _this2 = this;\n\n _get(Swatches.prototype.__proto__ || Object.getPrototypeOf(Swatches.prototype), 'onCreate', this).call(this, event);\n\n if (!this.isEnabled()) {\n return;\n }\n\n var colorpicker = this.colorpicker,\n swatchContainer = (0, _jquery2.default)(this.options.barTemplate),\n isAliased = this.options.namesAsValues === true && !Array.isArray(this.colors);\n\n _jquery2.default.each(this.colors, function (name, value) {\n var $swatch = (0, _jquery2.default)(_this2.options.swatchTemplate).css('background-color', value).attr('data-name', name).attr('data-value', value).attr('title', name + ': ' + value);\n\n $swatch.on('mousedown.colorpicker touchstart.colorpicker', function (e) {\n e.preventDefault();\n colorpicker.setValue(isAliased ? (0, _jquery2.default)(this).data('name') : (0, _jquery2.default)(this).data('value'));\n });\n swatchContainer.append($swatch);\n });\n\n colorpicker.picker.append(swatchContainer);\n }\n }]);\n\n return Swatches;\n}(_Palette3.default);\n\nexports.default = Swatches;\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// bootstrap-colorpicker.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 32081b809d19519bb29c","module.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jQuery\"\n// module id = 0\n// module chunks = 0 1","'use strict';\n\nimport $ from 'jquery';\n\n/**\n * Colorpicker extension class.\n */\nclass Extension {\n /**\n * @param {Colorpicker} colorpicker\n * @param {Object} options\n */\n constructor(colorpicker, options = {}) {\n /**\n * @type {Colorpicker}\n */\n this.colorpicker = colorpicker;\n /**\n * @type {Object}\n */\n this.options = options;\n\n if (!(this.colorpicker.element && this.colorpicker.element.length)) {\n throw new Error('Extension: this.colorpicker.element is not valid');\n }\n\n this.colorpicker.element.on('colorpickerCreate.colorpicker-ext', $.proxy(this.onCreate, this));\n this.colorpicker.element.on('colorpickerDestroy.colorpicker-ext', $.proxy(this.onDestroy, this));\n this.colorpicker.element.on('colorpickerUpdate.colorpicker-ext', $.proxy(this.onUpdate, this));\n this.colorpicker.element.on('colorpickerChange.colorpicker-ext', $.proxy(this.onChange, this));\n this.colorpicker.element.on('colorpickerInvalid.colorpicker-ext', $.proxy(this.onInvalid, this));\n this.colorpicker.element.on('colorpickerShow.colorpicker-ext', $.proxy(this.onShow, this));\n this.colorpicker.element.on('colorpickerHide.colorpicker-ext', $.proxy(this.onHide, this));\n this.colorpicker.element.on('colorpickerEnable.colorpicker-ext', $.proxy(this.onEnable, this));\n this.colorpicker.element.on('colorpickerDisable.colorpicker-ext', $.proxy(this.onDisable, this));\n }\n\n /**\n * Function called every time a new color needs to be created.\n * Return false to skip this resolver and continue with other extensions' ones\n * or return anything else to consider the color resolved.\n *\n * @param {Color|String|*} color\n * @return {Color|String|*}\n */\n resolveColor(color) {\n return false;\n }\n\n /**\n * @listens colorpickerCreate\n * @param {Event} event\n */\n onCreate(event) {\n // to be extended\n }\n\n /**\n * @listens colorpickerDestroy\n * @param {Event} event\n */\n onDestroy(event) {\n this.colorpicker.element.off('.colorpicker-ext');\n }\n\n /**\n * @listens colorpickerUpdate\n * @param {Event} event\n */\n onUpdate(event) {\n // to be extended\n }\n\n /**\n * @listens colorpickerChange\n * @param {Event} event\n */\n onChange(event) {\n // to be extended\n }\n\n /**\n * @listens colorpickerInvalid\n * @param {Event} event\n */\n onInvalid(event) {\n // to be extended\n }\n\n /**\n * @listens colorpickerHide\n * @param {Event} event\n */\n onHide(event) {\n // to be extended\n }\n\n /**\n * @listens colorpickerShow\n * @param {Event} event\n */\n onShow(event) {\n // to be extended\n }\n\n /**\n * @listens colorpickerDisable\n * @param {Event} event\n */\n onDisable(event) {\n // to be extended\n }\n\n /**\n * @listens colorpickerEnable\n * @param {Event} event\n */\n onEnable(event) {\n // to be extended\n }\n}\n\nexport default Extension;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/Extension.js","'use strict';\n\nimport Extension from 'Extension';\n\nlet defaults = {\n /**\n * Key-value pairs defining a color alias and its CSS color representation.\n *\n * They can also be just an array of values. In that case, no special names are used, only the real colors.\n *\n * @type {Object|Array}\n * @default null\n * @example\n * {\n * 'black': '#000000',\n * 'white': '#ffffff',\n * 'red': '#FF0000',\n * 'default': '#777777',\n * 'primary': '#337ab7',\n * 'success': '#5cb85c',\n * 'info': '#5bc0de',\n * 'warning': '#f0ad4e',\n * 'danger': '#d9534f'\n * }\n *\n * @example ['#f0ad4e', '#337ab7', '#5cb85c']\n */\n colors: null,\n /**\n * If true, the when a color swatch is selected the name (alias) will be used as input value,\n * otherwise the swatch real color value will be used.\n *\n * @type {boolean}\n * @default true\n */\n namesAsValues: true\n};\n\nclass Palette extends Extension {\n\n /**\n * @returns {Object|Array}\n */\n get colors() {\n return this.options.colors;\n }\n\n constructor(colorpicker, options = {}) {\n super(colorpicker, Object.assign({}, defaults, options));\n\n if ((!Array.isArray(this.options.colors)) && (typeof this.options.colors !== 'object')) {\n this.options.colors = null;\n }\n }\n\n /**\n * @returns {int}\n */\n getLength() {\n if (!this.options.colors) {\n return 0;\n }\n\n if (Array.isArray(this.options.colors)) {\n return this.options.colors.length;\n }\n\n if (typeof this.options.colors === 'object') {\n return Object.keys(this.options.colors).length;\n }\n\n return 0;\n }\n\n resolveColor(color) {\n if (this.getLength() <= 0) {\n return false;\n }\n\n if (Array.isArray(this.options.colors)) {\n if (this.options.colors.indexOf(color) >= 0) {\n return color;\n }\n if (this.options.colors.indexOf(color.toUpperCase()) >= 0) {\n return color.toUpperCase();\n }\n if (this.options.colors.indexOf(color.toLowerCase()) >= 0) {\n return color.toLowerCase();\n }\n return false;\n }\n\n if (typeof this.options.colors !== 'object') {\n return false;\n }\n\n if (!this.options.namesAsValues) {\n return this.getValue(color, false);\n }\n return this.getName(color, this.getName('#' + color, this.getValue(color, false)));\n }\n\n /**\n * Given a color value, returns the corresponding color name or defaultValue.\n *\n * @param {String} value\n * @param {*} defaultValue\n * @returns {*}\n */\n getName(value, defaultValue = false) {\n if (!(typeof value === 'string') || !this.options.colors) {\n return defaultValue;\n }\n for (let name in this.options.colors) {\n if (!this.options.colors.hasOwnProperty(name)) {\n continue;\n }\n if (this.options.colors[name].toLowerCase() === value.toLowerCase()) {\n return name;\n }\n }\n return defaultValue;\n }\n\n /**\n * Given a color name, returns the corresponding color value or defaultValue.\n *\n * @param {String} name\n * @param {*} defaultValue\n * @returns {*}\n */\n getValue(name, defaultValue = false) {\n if (!(typeof name === 'string') || !this.options.colors) {\n return defaultValue;\n }\n if (this.options.colors.hasOwnProperty(name)) {\n return this.options.colors[name];\n }\n return defaultValue;\n }\n}\n\nexport default Palette;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/extensions/Palette.js","'use strict';\n\nimport Colorpicker from './Colorpicker';\nimport $ from 'jquery';\n\nlet plugin = 'colorpicker';\n\n$[plugin] = Colorpicker;\n\n$.fn[plugin] = function (option) {\n let apiArgs = Array.prototype.slice.call(arguments, 1),\n isSingleElement = (this.length === 1),\n returnValue = null;\n\n let $jq = this.each(function () {\n let $this = $(this),\n inst = $this.data(plugin),\n options = ((typeof option === 'object') ? option : {});\n\n if (!inst) {\n inst = new Colorpicker(this, options);\n $this.data(plugin, inst);\n }\n\n if (typeof option === 'string') {\n if (option === 'colorpicker') {\n returnValue = inst;\n } else if ($.isFunction(inst[option])) {\n returnValue = inst[option].apply(inst, apiArgs);\n } else { // its a property ?\n if (apiArgs.length) {\n // set property\n inst[option] = apiArgs[0];\n }\n returnValue = inst[option];\n }\n } else {\n returnValue = $this;\n }\n });\n\n return isSingleElement ? returnValue : $jq;\n};\n\n$.fn[plugin].constructor = Colorpicker;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/jquery-plugin.js","'use strict';\n\nimport Color from './Color';\nimport Extension from './Extension';\nimport defaults from './options';\nimport bundledExtensions from 'extensions';\nimport $ from 'jquery';\n\nlet colorPickerIdCounter = 0;\n\n/**\n * Colorpicker widget class\n */\nclass Colorpicker {\n /**\n * Color class\n *\n * @static\n * @type {Color}\n */\n static get Color() {\n return Color;\n }\n\n /**\n * Extension class\n *\n * @static\n * @type {Extension}\n */\n static get Extension() {\n return Extension;\n }\n\n /**\n * Colorpicker bundled extension classes\n *\n * @static\n * @type {{Extension}}\n */\n static get Extensions() {\n return bundledExtensions;\n }\n\n /**\n * color getter\n *\n * @type {Color|null}\n */\n get color() {\n return this.element.data('color');\n }\n\n /**\n * color setter\n *\n * @ignore\n * @param {Color|null} value\n */\n set color(value) {\n this.element.data('color', value);\n }\n\n /**\n * @fires colorpickerCreate\n * @param {Object|String} element\n * @param {Object} options\n * @constructor\n */\n constructor(element, options) {\n colorPickerIdCounter += 1;\n /**\n * The colorpicker instance number\n * @type {number}\n */\n this.id = colorPickerIdCounter;\n\n /**\n * @type {*|jQuery}\n */\n this.element = $(element).addClass('colorpicker-element');\n this.element.attr('data-colorpicker-id', this.id);\n\n /**\n * @type {defaults}\n */\n this.options = Object.assign({}, defaults, options, this.element.data());\n\n /**\n * @type {Extension[]}\n */\n this.extensions = [];\n\n if (!Array.isArray(this.options.extensions)) {\n this.options.extensions = [];\n }\n\n /**\n * @type {*|jQuery}\n */\n this.component = this.options.component;\n this.component = (this.component !== false) ? this.element.find(this.component) : false;\n if (this.component && (this.component.length === 0)) {\n this.component = false;\n }\n\n /**\n * @type {*|jQuery}\n */\n this.container = (this.options.container === true) ? this.element : this.options.container;\n this.container = (this.container !== false) ? $(this.container) : false;\n\n /**\n * @type {*|String}\n * @private\n */\n this.currentSlider = null;\n\n /**\n * @type {{left: number, top: number}}\n * @private\n */\n this.mousePointer = {\n left: 0,\n top: 0\n };\n\n /**\n * Latest external event\n *\n * @type {{name: String, e: *}}\n * @private\n */\n this.lastEvent = {\n name: null,\n e: null\n };\n\n // Is the element an input? Should we search inside for any input?\n /**\n * @type {*|jQuery}\n */\n this.input = this.element.is('input') ? this.element : (this.options.input ?\n this.element.find(this.options.input) : false);\n\n if (this.input && (this.input.length === 0)) {\n this.input = false;\n }\n\n if (this.options.debug) {\n this.options.extensions.push({name: 'Debugger'});\n }\n\n // Register extensions\n this.options.extensions.forEach((ext) => {\n this.addExtension(ext.name, bundledExtensions[ext.name.toLowerCase()], ext);\n });\n\n let colorValue = this.options.color !== false ? this.options.color : this.getValue();\n\n this.color = colorValue ? this.createColor(colorValue) : false;\n\n if (this.options.format === false) {\n // If format is false, use the first parsed one from now on\n this.options.format = this.color.format;\n }\n\n /**\n * @type {boolean}\n * @private\n */\n this.disabled = false;\n\n // Setup picker\n let $picker = this.picker = $(this.options.template);\n\n if (this.options.customClass) {\n $picker.addClass(this.options.customClass);\n }\n if (this.options.inline) {\n $picker.addClass('colorpicker-inline colorpicker-visible');\n } else {\n $picker.addClass('colorpicker-hidden');\n }\n if (this.options.horizontal) {\n $picker.addClass('colorpicker-horizontal');\n }\n\n if (\n (this.options.useAlpha || (this.hasColor() && this.color.hasTransparency())) &&\n (this.options.useAlpha !== false)\n ) {\n this.options.useAlpha = true;\n $picker.addClass('colorpicker-with-alpha');\n }\n\n if (this.options.align === 'right') {\n $picker.addClass('colorpicker-right');\n }\n if (this.options.inline === true) {\n $picker.addClass('colorpicker-no-arrow');\n }\n\n // Prevent closing the colorpicker when clicking on itself\n $picker.on('mousedown.colorpicker touchstart.colorpicker', $.proxy(function (e) {\n if (e.target === e.currentTarget) {\n e.preventDefault();\n }\n }, this));\n\n // Bind click/tap events on the sliders\n $picker.find('.colorpicker-saturation, .colorpicker-hue, .colorpicker-alpha')\n .on('mousedown.colorpicker touchstart.colorpicker', $.proxy(this._mousedown, this));\n\n $picker.appendTo(this.container ? this.container : $('body'));\n\n // Bind other events\n if (this.hasInput()) {\n this.input.on({\n 'keyup.colorpicker': $.proxy(this._keyup, this)\n });\n this.input.on({\n 'change.colorpicker': $.proxy(this._change, this)\n });\n if (this.component === false) {\n this.element.on({\n 'focus.colorpicker': $.proxy(this.show, this)\n });\n }\n if (this.options.inline === false) {\n this.element.on({\n 'focusout.colorpicker': $.proxy(this.hide, this)\n });\n }\n }\n\n if (this.component !== false) {\n this.component.on({\n 'click.colorpicker': $.proxy(this.show, this)\n });\n }\n\n if ((this.hasInput() === false) && (this.component === false) && !this.element.has('.colorpicker')) {\n this.element.on({\n 'click.colorpicker': $.proxy(this.show, this)\n });\n }\n\n // for HTML5 input[type='color']\n if (this.hasInput() && (this.component !== false) && (this.input.attr('type') === 'color')) {\n this.input.on({\n 'click.colorpicker': $.proxy(this.show, this),\n 'focus.colorpicker': $.proxy(this.show, this)\n });\n }\n\n // Update if there is a color option\n this.update(this.options.color !== false);\n\n $($.proxy(function () {\n /**\n * (Colorpicker) When the Colorpicker instance has been created and the DOM is ready.\n *\n * @event colorpickerCreate\n */\n this.element.trigger({\n type: 'colorpickerCreate',\n colorpicker: this,\n color: this.color\n });\n }, this));\n }\n\n /**\n * Creates and registers the given extension\n *\n * @param {String|Extension} extensionName\n * @param {Extension} ExtensionClass\n * @param {Object} [config]\n * @returns {Extension}\n */\n addExtension(extensionName, ExtensionClass, config = {}) {\n let ext = (extensionName instanceof Extension) ? extensionName : new ExtensionClass(this, config);\n\n this.extensions.push(ext);\n return ext;\n }\n\n /**\n * Destroys the current instance\n *\n * @fires colorpickerDestroy\n */\n destroy() {\n this.picker.remove();\n this.element.removeData('colorpicker', 'color').off('.colorpicker');\n if (this.hasInput()) {\n this.input.off('.colorpicker');\n }\n if (this.component !== false) {\n this.component.off('.colorpicker');\n }\n this.element.removeClass('colorpicker-element');\n\n /**\n * (Colorpicker) When the instance is destroyed with all events unbound.\n *\n * @event colorpickerDestroy\n */\n this.element.trigger({\n type: 'colorpickerDestroy',\n colorpicker: this,\n color: this.color\n });\n }\n\n /**\n * Returns true if the current color object is an instance of Color, false otherwise.\n * @returns {boolean}\n */\n hasColor() {\n return this.color instanceof Color;\n }\n\n /**\n * @returns {*|String|Color}\n */\n get fallbackColor() {\n return this.options.fallbackColor ? this.options.fallbackColor : (this.hasColor() ? this.color : '#000');\n }\n\n get format() {\n if (this.options.format) {\n return this.options.format;\n }\n\n if (this.hasColor() && this.color.hasTransparency() && this.color.format.match(/^hex/)) {\n return this.options.enableHex8 ? 'hex8' : (this.isAlphaEnabled() ? 'rgba' : 'hex');\n }\n\n if (this.hasColor()) {\n return this.color.format;\n }\n\n return null;\n }\n\n /**\n * Formatted color string, with the formatting options applied\n * (e.g. useHashPrefix)\n * @returns {String}\n */\n toInputColorString() {\n let str = this.toCssColorString();\n\n if (!str) {\n return str;\n }\n\n if (this.options.useHashPrefix === false) {\n str = str.replace(/^#/g, '');\n }\n\n return this._resolveColor(str);\n }\n\n /**\n * Formatted color string, suitable for CSS\n * @returns {String}\n */\n toCssColorString() {\n if (!this.hasColor()) {\n return '';\n }\n return this.color.toString(this.format);\n }\n\n /**\n * If the widget is not inside a container or inline, rearranges its position relative to its element offset.\n *\n * @param {Event} [e]\n * @private\n * @returns {boolean} Returns false if the widget is inside a container or inline, true otherwise\n */\n _reposition(e) {\n this.lastEvent.name = 'reposition';\n this.lastEvent.e = e;\n\n if (this.options.inline !== false || this.options.container) {\n return false;\n }\n let type = this.container && this.container[0] !== window.document.body ? 'position' : 'offset';\n let element = this.component || this.element;\n let offset = element[type]();\n\n if (this.options.align === 'right') {\n offset.left -= this.picker.outerWidth() - element.outerWidth();\n }\n this.picker.css({\n top: offset.top + element.outerHeight(),\n left: offset.left\n });\n return true;\n }\n\n /**\n * Shows the colorpicker widget if hidden.\n * If the input is disabled this call will be ignored.\n *\n * @fires colorpickerShow\n * @param {Event} [e]\n * @returns {boolean} True if was hidden and afterwards visible, false if nothing happened.\n */\n show(e) {\n this.lastEvent.name = 'show';\n this.lastEvent.e = e;\n\n if (this.isVisible() || this.isDisabled()) {\n // Don't show the widget if it's already visible or it is disabled\n return false;\n }\n this.picker.addClass('colorpicker-visible').removeClass('colorpicker-hidden');\n\n this._reposition(e);\n $(window).on('resize.colorpicker', $.proxy(this._reposition, this));\n\n if (e && (!this.hasInput() || this.input.attr('type') === 'color')) {\n if (e.stopPropagation && e.preventDefault) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n if ((this.component || !this.input) && (this.options.inline === false)) {\n $(window.document).on({\n 'mousedown.colorpicker': $.proxy(this.hide, this)\n });\n }\n\n /**\n * (Colorpicker) When show() is called and the widget can be shown.\n *\n * @event colorpickerShow\n */\n this.element.trigger({\n type: 'colorpickerShow',\n colorpicker: this,\n color: this.color\n });\n\n return true;\n }\n\n /**\n * Hides the colorpicker widget.\n * Hide is prevented when it is triggered by an event whose target element has been clicked/touched.\n *\n * @fires colorpickerHide\n * @param {Event} [e]\n * @returns {boolean} True if was visible and afterwards hidden, false if nothing happened.\n */\n hide(e) {\n this.lastEvent.name = 'hide';\n this.lastEvent.e = e;\n\n if (this.isHidden()) {\n // Do not trigger if already hidden\n return false;\n }\n if ((typeof e !== 'undefined') && e.target) {\n // Prevent hide if triggered by an event and an element inside the colorpicker has been clicked/touched\n if (\n $(e.currentTarget).parents('.colorpicker').length > 0 ||\n $(e.target).parents('.colorpicker').length > 0\n ) {\n return false;\n }\n }\n this.picker.addClass('colorpicker-hidden').removeClass('colorpicker-visible');\n $(window).off('resize.colorpicker', this._reposition);\n $(window.document).off({\n 'mousedown.colorpicker': this.hide\n });\n\n /**\n * (Colorpicker) When hide() is called and the widget can be hidden.\n *\n * @event colorpickerHide\n */\n this.element.trigger({\n type: 'colorpickerHide',\n colorpicker: this,\n color: this.color\n });\n return true;\n }\n\n /**\n * Returns true if the colorpicker element has the colorpicker-visible class and not the colorpicker-hidden one.\n * False otherwise.\n *\n * @returns {boolean}\n */\n isVisible() {\n return this.picker.hasClass('colorpicker-visible') && !this.picker.hasClass('colorpicker-hidden');\n }\n\n /**\n * Returns true if the colorpicker element has the colorpicker-hidden class and not the colorpicker-visible one.\n * False otherwise.\n *\n * @returns {boolean}\n */\n isHidden() {\n return this.picker.hasClass('colorpicker-hidden') && !this.picker.hasClass('colorpicker-visible');\n }\n\n /**\n * If the input element is present, it updates the value with the current color object color string.\n * If value is set, this method fires a \"change\" event on the input element.\n *\n * @fires change\n * @private\n */\n _updateInput() {\n if (this.hasInput()) {\n let val = this.toInputColorString();\n\n if (val === this.input.prop('value')) {\n // No need to set value or trigger any event if nothing changed\n return;\n }\n\n this.input.prop('value', val ? val : '');\n\n /**\n * (Input) Triggered on the input element when a new color is selected.\n *\n * @event change\n */\n this.input.trigger({\n type: 'change',\n colorpicker: this,\n color: this.color,\n value: val\n });\n }\n }\n\n /**\n * Changes the color adjustment bars using the current color object information.\n * @private\n */\n _updatePicker() {\n if (!this.hasColor()) {\n return;\n }\n\n let vertical = (this.options.horizontal === false),\n sl = vertical ? this.options.sliders : this.options.slidersHorz;\n\n let saturationGuide = this.picker.find('.colorpicker-saturation .colorpicker-guide'),\n hueGuide = this.picker.find('.colorpicker-hue .colorpicker-guide'),\n alphaGuide = this.picker.find('.colorpicker-alpha .colorpicker-guide');\n\n let hsva = this.color.hsvaRatio;\n\n if (hueGuide.length) {\n hueGuide.css(vertical ? 'top' : 'left', (vertical ? sl.hue.maxTop : sl.hue.maxLeft) * (1 - hsva.h));\n }\n\n if (alphaGuide.length) {\n alphaGuide.css(vertical ? 'top' : 'left', (vertical ? sl.alpha.maxTop : sl.alpha.maxLeft) * (1 - hsva.a));\n }\n\n if (saturationGuide.length) {\n saturationGuide.css({\n 'top': sl.saturation.maxTop - hsva.v * sl.saturation.maxTop,\n 'left': hsva.s * sl.saturation.maxLeft\n });\n }\n\n this.picker.find('.colorpicker-saturation')\n .css('backgroundColor', this.color.getHueOnlyCopy().toHexString()); // we only need hue\n\n this.picker.find('.colorpicker-alpha')\n .css('backgroundColor', this.color.toString('hex6')); // we don't need alpha\n }\n\n /**\n * If the component element is present, its background color is updated\n * @private\n */\n _updateComponent() {\n if (!this.hasColor()) {\n return;\n }\n\n if (this.component !== false) {\n let icn = this.component.find('i').eq(0);\n\n if (icn.length > 0) {\n icn.css({\n 'backgroundColor': this.toCssColorString()\n });\n } else {\n this.component.css({\n 'backgroundColor': this.toCssColorString()\n });\n }\n }\n }\n\n /**\n * @private\n * @returns {boolean}\n */\n _shouldUpdate() {\n return (this.hasColor() && ((this.getValue(false) !== false)));\n }\n\n /**\n * Updated the component color, the input value and the widget if a color is present.\n *\n * If force is true, it is updated anyway.\n *\n * @fires colorpickerUpdate\n * @param {boolean} [force]\n */\n update(force = false) {\n if (this._shouldUpdate() || (force === true)) {\n // Update only if the current value (from input or data) is not empty\n this._updateComponent();\n\n // Do not update input when autoInputFallback is disabled and last event is keyup.\n let preventInputUpdate = (\n (this.options.autoInputFallback !== true) &&\n (\n // this.isInvalidColor() || // prevent also on invalid color (on create, leaves invalid colors)\n (this.lastEvent.name === 'keyup')\n )\n );\n\n if (!preventInputUpdate) {\n this._updateInput();\n }\n\n this._updatePicker();\n\n /**\n * (Colorpicker) Fired when the widget is updated.\n *\n * @event colorpickerUpdate\n */\n this.element.trigger({\n type: 'colorpickerUpdate',\n colorpicker: this,\n color: this.color\n });\n }\n }\n\n /**\n * Returns the color string from the input value or the 'data-color' attribute of the input or element.\n * If empty, it returns the defaultValue parameter.\n *\n * @param {String|*} [defaultValue]\n * @returns {String|*}\n */\n getValue(defaultValue = null) {\n defaultValue = (typeof defaultValue === 'undefined') ? this.fallbackColor : defaultValue;\n let candidates = [], val = false;\n\n if (this.hasInput()) {\n candidates.push(this.input.val());\n candidates.push(this.input.data('color'));\n }\n candidates.push(this.element.data('color'));\n\n candidates.map((item) => {\n if (item && (val === false)) {\n val = item;\n }\n });\n\n val = ((val === false) ? defaultValue : val);\n\n if (val instanceof Color) {\n return val.toString(this.format);\n }\n\n return val;\n }\n\n /**\n * Sets the color manually\n *\n * @fires colorpickerChange\n * @param {String|Color} val\n */\n setValue(val) {\n if (this.hasColor() && this.color.equals(val)) {\n // equal color object\n return;\n }\n\n let color = val ? this.createColor(val) : false;\n\n if (!this.hasColor() && !color) {\n // color was empty and the new one too\n return;\n }\n\n // force update if color is changed to empty\n let shouldForceUpdate = this.hasColor() && !color;\n\n this.color = color;\n\n /**\n * (Colorpicker) When the color is set programmatically with setValue().\n *\n * @event colorpickerChange\n */\n this.element.trigger({\n type: 'colorpickerChange',\n colorpicker: this,\n color: this.color,\n value: val\n });\n\n // force update if color has changed to empty\n this.update(shouldForceUpdate);\n }\n\n /**\n * Creates a new color using the widget instance options (fallbackColor, format).\n *\n * @fires colorpickerInvalid\n * @param {*} val\n * @param {boolean} useFallback\n * @returns {Color}\n */\n createColor(val, useFallback = true) {\n let color = new Color(this._resolveColor(val), {format: this.format});\n\n if (!color.isValid()) {\n let invalidColor = color, fallback;\n\n if (useFallback) {\n fallback = ((this.fallbackColor instanceof Color) && this.fallbackColor.isValid()) ?\n this.fallbackColor : this._resolveColor(this.fallbackColor);\n\n color = new Color(fallback, {format: this.format});\n\n if (!color.isValid() && useFallback) {\n throw new Error('The fallback color is invalid.');\n }\n }\n\n color.previous = invalidColor;\n\n /**\n * (Colorpicker) Fired when the color is invalid and the fallback color is going to be used.\n *\n * @event colorpickerInvalid\n */\n this.element.trigger({\n type: 'colorpickerInvalid',\n colorpicker: this,\n color: color,\n value: val\n });\n }\n\n if (!this.isAlphaEnabled() && color.hasTransparency()) {\n // Alpha is disabled\n color.setAlpha(1);\n }\n\n if (!this.hasColor()) {\n // No previous color, so no need to compare\n return color;\n }\n\n let hsva = color.hsvaRatio;\n let prevHsva = this.color.hsvaRatio;\n\n if (\n hsva.s === 0 &&\n hsva.h === 0 &&\n prevHsva.h !== 0\n ) {\n // Hue was set to 0 because saturation was 0, use previous hue, since it was not meant to change...\n color.setHueRatio(prevHsva.h);\n }\n\n if (!this.isAlphaEnabled() && color.hasTransparency()) {\n // Alpha is disabled\n color.setAlpha(1);\n }\n\n return color;\n }\n\n /**\n * Checks if there is a color object, that it is valid and it is not a fallback\n * @returns {boolean}\n */\n isInvalidColor() {\n return !this.hasColor() || !this.color.isValid() || !!this.color.previous;\n }\n\n /**\n * Returns true if the useAlpha option is exactly true, false otherwise\n * @returns {boolean}\n */\n isAlphaEnabled() {\n return this.options.useAlpha === true;\n }\n\n /**\n * Resolves a color, in case is not in a standard format (e.g. a custom color alias)\n *\n * @private\n * @param {String|*} color\n * @returns {String|*|null}\n */\n _resolveColor(color) {\n let extResolvedColor = false;\n\n $.each(this.extensions, function (name, ext) {\n if (extResolvedColor !== false) {\n // skip if resolved\n return;\n }\n extResolvedColor = ext.resolveColor(color);\n });\n\n if (extResolvedColor !== false) {\n color = extResolvedColor;\n }\n\n return color;\n }\n\n /**\n * Returns true if the widget has an associated input element, false otherwise\n * @returns {boolean}\n */\n hasInput() {\n return (this.input !== false);\n }\n\n /**\n * Returns true if this instance is disabled\n * @returns {boolean}\n */\n isDisabled() {\n return this.disabled === true;\n }\n\n /**\n * Disables the widget and the input if any\n *\n * @fires colorpickerDisable\n * @returns {boolean}\n */\n disable() {\n if (this.hasInput()) {\n this.input.prop('disabled', true);\n }\n this.disabled = true;\n\n /**\n * (Colorpicker) When the widget has been disabled.\n *\n * @event colorpickerDisable\n */\n this.element.trigger({\n type: 'colorpickerDisable',\n colorpicker: this,\n color: this.color\n });\n return true;\n }\n\n /**\n * Enables the widget and the input if any\n *\n * @fires colorpickerEnable\n * @returns {boolean}\n */\n enable() {\n if (this.hasInput()) {\n this.input.prop('disabled', false);\n }\n this.disabled = false;\n\n /**\n * (Colorpicker) When the widget has been enabled.\n *\n * @event colorpickerEnable\n */\n this.element.trigger({\n type: 'colorpickerEnable',\n colorpicker: this,\n color: this.color\n });\n return true;\n }\n\n /**\n * Function triggered when clicking in one of the color adjustment bars\n *\n * @private\n * @fires mousemove\n * @param {Event} e\n * @returns {boolean}\n */\n _mousedown(e) {\n this.lastEvent.name = 'mousedown';\n this.lastEvent.e = e;\n\n if (!e.pageX && !e.pageY && e.originalEvent && e.originalEvent.touches) {\n e.pageX = e.originalEvent.touches[0].pageX;\n e.pageY = e.originalEvent.touches[0].pageY;\n }\n e.stopPropagation();\n e.preventDefault();\n\n let target = $(e.target);\n\n // detect the slider and set the limits and callbacks\n let zone = target.closest('div');\n let sl = this.options.horizontal ? this.options.slidersHorz : this.options.sliders;\n\n if (!zone.is('.colorpicker')) {\n if (zone.is('.colorpicker-saturation')) {\n this.currentSlider = $.extend({}, sl.saturation);\n } else if (zone.is('.colorpicker-hue')) {\n this.currentSlider = $.extend({}, sl.hue);\n } else if (zone.is('.colorpicker-alpha')) {\n this.currentSlider = $.extend({}, sl.alpha);\n } else {\n return false;\n }\n let offset = zone.offset();\n // reference to guide's style\n\n this.currentSlider.guide = zone.find('.colorpicker-guide')[0].style;\n this.currentSlider.left = e.pageX - offset.left;\n this.currentSlider.top = e.pageY - offset.top;\n this.mousePointer = {\n left: e.pageX,\n top: e.pageY\n };\n\n /**\n * (window.document) Triggered on mousedown for the document object,\n * so the color adjustment guide is moved to the clicked position.\n *\n * @event mousemove\n */\n $(window.document).on({\n 'mousemove.colorpicker': $.proxy(this._mousemove, this),\n 'touchmove.colorpicker': $.proxy(this._mousemove, this),\n 'mouseup.colorpicker': $.proxy(this._mouseup, this),\n 'touchend.colorpicker': $.proxy(this._mouseup, this)\n }).trigger('mousemove');\n }\n return false;\n }\n\n /**\n * Function triggered when dragging a guide inside one of the color adjustment bars.\n *\n * @private\n * @param {Event} e\n * @returns {boolean}\n */\n _mousemove(e) {\n this.lastEvent.name = 'mousemove';\n this.lastEvent.e = e;\n\n let color = !this.hasColor() ? this.createColor(this.fallbackColor) : this.color.getCopy();\n\n if (!e.pageX && !e.pageY && e.originalEvent && e.originalEvent.touches) {\n e.pageX = e.originalEvent.touches[0].pageX;\n e.pageY = e.originalEvent.touches[0].pageY;\n }\n e.stopPropagation();\n e.preventDefault();\n let left = Math.max(\n 0,\n Math.min(\n this.currentSlider.maxLeft,\n this.currentSlider.left + ((e.pageX || this.mousePointer.left) - this.mousePointer.left)\n )\n );\n let top = Math.max(\n 0,\n Math.min(\n this.currentSlider.maxTop,\n this.currentSlider.top + ((e.pageY || this.mousePointer.top) - this.mousePointer.top)\n )\n );\n\n this.currentSlider.guide.left = left + 'px';\n this.currentSlider.guide.top = top + 'px';\n if (this.currentSlider.callLeft) {\n color[this.currentSlider.callLeft].call(color, left / this.currentSlider.maxLeft);\n }\n if (this.currentSlider.callTop) {\n color[this.currentSlider.callTop].call(color, top / this.currentSlider.maxTop);\n }\n\n this.setValue(color);\n return false;\n }\n\n /**\n * Function triggered when releasing the click in one of the color adjustment bars.\n *\n * @private\n * @param {Event} e\n * @returns {boolean}\n */\n _mouseup(e) {\n this.lastEvent.name = 'mouseup';\n this.lastEvent.e = e;\n\n e.stopPropagation();\n e.preventDefault();\n $(window.document).off({\n 'mousemove.colorpicker': this._mousemove,\n 'touchmove.colorpicker': this._mousemove,\n 'mouseup.colorpicker': this._mouseup,\n 'touchend.colorpicker': this._mouseup\n });\n return false;\n }\n\n /**\n * Function triggered when the input has changed, so the colorpicker gets updated.\n *\n * @private\n * @param {Event} e\n * @returns {boolean}\n */\n _change(e) {\n this.lastEvent.name = 'change';\n this.lastEvent.e = e;\n\n let val = this.input.val();\n\n if (val !== this.toInputColorString()) {\n this.setValue(val);\n }\n }\n\n /**\n * Function triggered after a keyboard key has been released.\n *\n * @private\n * @param {Event} e\n * @returns {boolean}\n */\n _keyup(e) {\n this.lastEvent.name = 'keyup';\n this.lastEvent.e = e;\n\n let val = this.input.val();\n\n if (val !== this.toInputColorString()) {\n this.setValue(val);\n }\n }\n}\n\nexport default Colorpicker;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/Colorpicker.js","'use strict';\n\nimport tinycolor from 'tinycolor2';\n\nfunction unwrapColor(color) {\n if (color instanceof tinycolor) {\n return {\n r: color._r,\n g: color._g,\n b: color._b,\n a: color._a\n };\n }\n return color;\n}\n\n/**\n * Sanitizes a format string, so it is compatible with tinycolor,\n * or returns the same value if it is not a string.\n *\n * @param {String} format\n * @returns {String|*}\n * @private\n */\nfunction getCompatibleFormat(format) {\n if (format instanceof String || typeof format === 'string') {\n return format.replace(/a$/gi, '');\n }\n\n return format;\n}\n\n/**\n * Color manipulation class that extends the tinycolor library class.\n */\nclass Color extends tinycolor {\n /**\n * Identifier of the color instance.\n *\n * @type {int}\n * @readonly\n */\n get id() {\n return this._tc_id;\n }\n\n /**\n * Format of the parsed color.\n *\n * @type {String}\n * @readonly\n */\n get format() {\n return this._format;\n }\n\n /**\n * All options of the current instance.\n *\n * @type {{format: String, gradientType: String}}\n * @readonly\n */\n get options() {\n return {\n format: this._format,\n gradientType: this._gradientType\n };\n }\n\n /**\n * @returns {{h, s, v, a}}\n */\n get hsva() {\n return this.toHsv();\n }\n\n /**\n * @returns {{h, s, v, a}}\n */\n get hsvaRatio() {\n let hsv = this.hsva;\n\n return {\n h: hsv.h / 360,\n s: hsv.s,\n v: hsv.v,\n a: hsv.a\n };\n }\n\n /**\n * foo bar\n * @param {Color|*} color\n * @param {{format}} [options]\n * @constructor\n */\n constructor(color, options = {format: null}) {\n if (options.format) {\n options.format = getCompatibleFormat(options.format);\n }\n super(unwrapColor(color), options);\n\n /**\n * @type {Color|*}\n */\n this._originalInput = color; // keep real original color\n /**\n * Hue backup to not lose the information when saturation is 0.\n * @type {number}\n */\n this._hbak = this.hsva.h;\n /**\n * If set, it contains a reference to a previous color that caused the creation of this one.\n * @type {Color}\n */\n this.previous = null;\n }\n\n /**\n * Compares a color object with this one and returns true if it is equal or false if not.\n *\n * @param {Color} color\n * @returns {boolean}\n */\n equals(color) {\n if (!(color instanceof tinycolor)) {\n return false;\n }\n return this._r === color._r &&\n this._g === color._g &&\n this._b === color._b &&\n this._a === color._a &&\n this._roundA === color._roundA &&\n this._format === color._format &&\n this._gradientType === color._gradientType &&\n this._ok === color._ok;\n }\n\n /**\n * Imports all variables of the given color to this instance, excepting `_tc_id`.\n * @param {Color} color\n */\n importColor(color) {\n if (!(color instanceof tinycolor)) {\n throw new Error('Color.importColor: The color argument is not an instance of tinycolor.');\n }\n this._originalInput = color._originalInput;\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this._a = color._a;\n this._roundA = color._roundA;\n this._format = getCompatibleFormat(color._format);\n this._gradientType = color._gradientType;\n this._ok = color._ok;\n // omit .previous and ._tc_id import\n }\n\n /**\n * Imports the _r, _g, _b, _a, _hbak and _ok variables of the given color to this instance.\n * @param {Color} color\n */\n importRgb(color) {\n if (!color instanceof Color) {\n throw new Error('Color.importColor: The color argument is not an instance of tinycolor.');\n }\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this._a = color._a;\n this._ok = color._ok;\n this._hbak = color._hbak;\n }\n\n /**\n * @param {{h,s,v,a}} hsv\n */\n importHsv(hsv) {\n this._hbak = hsv.h;\n this.importRgb(new Color(hsv, this.options));\n }\n\n /**\n * @returns {Color}\n */\n getCopy() {\n return new Color(this.hsva, this.options);\n }\n\n /**\n * @returns {Color}\n */\n getHueOnlyCopy() {\n return new Color({h: this._hbak ? this._hbak : this.hsva.h, s: 100, v: 100}, this.options);\n }\n\n /**\n * @returns {Color}\n */\n getOpaqueCopy() {\n return new Color(Object.assign({}, this.hsva, {a: 1}), this.options);\n }\n\n /**\n * @param {number} h Degrees from 0 to 360\n */\n setHue(h) {\n this.importHsv(Object.assign({}, this.hsva, {h: h}));\n }\n\n /**\n * @param {number} s Percent from 0 o 100\n */\n setSaturation(s) {\n this.importHsv(Object.assign({}, this.hsva, {s: s}));\n }\n\n /**\n * @param {number} v Percent from 0 o 100\n */\n setBrightness(v) {\n this.importHsv(Object.assign({}, this.hsva, {v: v}));\n }\n\n /**\n * @param {number} h Ratio from 0.0 to 1.0\n */\n setHueRatio(h) {\n if (h === 0) {\n return;\n }\n this.setHue((1 - h) * 360);\n }\n\n /**\n * @param {number} s Ratio from 0.0 to 1.0\n */\n setSaturationRatio(s) {\n this.setSaturation(s);\n }\n\n /**\n * @param {number} v Ratio from 0.0 to 1.0\n */\n setBrightnessRatio(v) {\n this.setBrightness(1 - v);\n }\n\n /**\n * @param {number} a Ratio from 0.0 to 1.0\n */\n setAlphaRatio(a) {\n this.setAlpha(1 - a);\n }\n\n /**\n * @returns {boolean}\n */\n isTransparent() {\n return this._a === 0;\n }\n\n /**\n * @returns {boolean}\n */\n hasTransparency() {\n return this._a !== 1;\n }\n\n /**\n * @param {string|null} [format] One of \"rgb\", \"prgb\", \"hex\"/\"hex6\", \"hex3\", \"hex8\", \"hsl\", \"hsv\"/\"hsb\", \"name\"\n * @returns {String}\n */\n toString(format = null) {\n format = format ? getCompatibleFormat(format) : this.format;\n\n let colorStr = super.toString(format);\n\n if (colorStr && colorStr.match(/^#[0-9a-f]{3,8}$/i)) {\n // Support transparent for hex formats\n if (this.isTransparent() && (this._r === 0) && (this._g === 0) && (this._b === 0)) {\n return 'transparent';\n }\n }\n\n return colorStr;\n }\n}\n\nexport default Color;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/Color.js","// TinyColor v1.4.1\n// https://github.com/bgrins/TinyColor\n// Brian Grinstead, MIT License\n\n(function(Math) {\n\nvar trimLeft = /^\\s+/,\n trimRight = /\\s+$/,\n tinyCounter = 0,\n mathRound = Math.round,\n mathMin = Math.min,\n mathMax = Math.max,\n mathRandom = Math.random;\n\nfunction tinycolor (color, opts) {\n\n color = (color) ? color : '';\n opts = opts || { };\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n\n var rgb = inputToRGB(color);\n this._originalInput = color,\n this._r = rgb.r,\n this._g = rgb.g,\n this._b = rgb.b,\n this._a = rgb.a,\n this._roundA = mathRound(100*this._a) / 100,\n this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) { this._r = mathRound(this._r); }\n if (this._g < 1) { this._g = mathRound(this._g); }\n if (this._b < 1) { this._b = mathRound(this._b); }\n\n this._ok = rgb.ok;\n this._tc_id = tinyCounter++;\n}\n\ntinycolor.prototype = {\n isDark: function() {\n return this.getBrightness() < 128;\n },\n isLight: function() {\n return !this.isDark();\n },\n isValid: function() {\n return this._ok;\n },\n getOriginalInput: function() {\n return this._originalInput;\n },\n getFormat: function() {\n return this._format;\n },\n getAlpha: function() {\n return this._a;\n },\n getBrightness: function() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r/255;\n GsRGB = rgb.g/255;\n BsRGB = rgb.b/255;\n\n if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);}\n if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);}\n if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);}\n return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);\n },\n setAlpha: function(value) {\n this._a = boundAlpha(value);\n this._roundA = mathRound(100*this._a) / 100;\n return this;\n },\n toHsv: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };\n },\n toHsvString: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);\n return (this._a == 1) ?\n \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" :\n \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \"+ this._roundA + \")\";\n },\n toHsl: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };\n },\n toHslString: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);\n return (this._a == 1) ?\n \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" :\n \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \"+ this._roundA + \")\";\n },\n toHex: function(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function(allow3Char) {\n return '#' + this.toHex(allow3Char);\n },\n toHex8: function(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function(allow4Char) {\n return '#' + this.toHex8(allow4Char);\n },\n toRgb: function() {\n return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };\n },\n toRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \")\" :\n \"rgba(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function() {\n return { r: mathRound(bound01(this._r, 255) * 100) + \"%\", g: mathRound(bound01(this._g, 255) * 100) + \"%\", b: mathRound(bound01(this._b, 255) * 100) + \"%\", a: this._a };\n },\n toPercentageRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%)\" :\n \"rgba(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function() {\n if (this._a === 0) {\n return \"transparent\";\n }\n\n if (this._a < 1) {\n return false;\n }\n\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function(secondColor) {\n var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n\n return \"progid:DXImageTransform.Microsoft.gradient(\"+gradientType+\"startColorstr=\"+hex8String+\",endColorstr=\"+secondHex8String+\")\";\n },\n toString: function(format) {\n var formatSet = !!format;\n format = format || this._format;\n\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n\n return formattedString || this.toHexString();\n },\n clone: function() {\n return tinycolor(this.toString());\n },\n\n _applyModification: function(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function() {\n return this._applyModification(lighten, arguments);\n },\n brighten: function() {\n return this._applyModification(brighten, arguments);\n },\n darken: function() {\n return this._applyModification(darken, arguments);\n },\n desaturate: function() {\n return this._applyModification(desaturate, arguments);\n },\n saturate: function() {\n return this._applyModification(saturate, arguments);\n },\n greyscale: function() {\n return this._applyModification(greyscale, arguments);\n },\n spin: function() {\n return this._applyModification(spin, arguments);\n },\n\n _applyCombination: function(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function() {\n return this._applyCombination(analogous, arguments);\n },\n complement: function() {\n return this._applyCombination(complement, arguments);\n },\n monochromatic: function() {\n return this._applyCombination(monochromatic, arguments);\n },\n splitcomplement: function() {\n return this._applyCombination(splitcomplement, arguments);\n },\n triad: function() {\n return this._applyCombination(triad, arguments);\n },\n tetrad: function() {\n return this._applyCombination(tetrad, arguments);\n }\n};\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function(color, opts) {\n if (typeof color == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n }\n else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n\n return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n// \"red\"\n// \"#f00\" or \"f00\"\n// \"#ff0000\" or \"ff0000\"\n// \"#ff000000\" or \"ff000000\"\n// \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n// \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n// \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n// \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n// \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n// \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n// \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n\n var rgb = { r: 0, g: 0, b: 0 };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n\n if (typeof color == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n\n a = boundAlpha(a);\n\n return {\n ok: ok,\n format: color.format || format,\n r: mathMin(255, mathMax(rgb.r, 0)),\n g: mathMin(255, mathMax(rgb.g, 0)),\n b: mathMin(255, mathMax(rgb.b, 0)),\n a: a\n };\n}\n\n\n// Conversion Functions\n// --------------------\n\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// \n\n// `rgbToRgb`\n// Handle bounds / percentage checking to conform to CSS color spec\n// \n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b){\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n}\n\n// `rgbToHsl`\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, l = (max + min) / 2;\n\n if(max == min) {\n h = s = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n\n h /= 6;\n }\n\n return { h: h, s: s, l: l };\n}\n\n// `hslToRgb`\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n var r, g, b;\n\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n\n function hue2rgb(p, q, t) {\n if(t < 0) t += 1;\n if(t > 1) t -= 1;\n if(t < 1/6) return p + (q - p) * 6 * t;\n if(t < 1/2) return q;\n if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n return p;\n }\n\n if(s === 0) {\n r = g = b = l; // achromatic\n }\n else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, v = max;\n\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if(max == min) {\n h = 0; // achromatic\n }\n else {\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h /= 6;\n }\n return { h: h, s: s, v: v };\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\n function hsvToRgb(h, s, v) {\n\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHex`\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToHex`\n// Converts an RGBA color plus alpha transparency to hex\n// Assumes r, g, b are contained in the set [0, 255] and\n// a in [0, 1]. Returns a 4 or 8 character rgba hex\nfunction rgbaToHex(r, g, b, a, allow4Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16)),\n pad2(convertDecimalToHex(a))\n ];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToArgbHex`\n// Converts an RGBA color to an ARGB Hex8 string\n// Rarely used, but required for \"toFilter()\"\nfunction rgbaToArgbHex(r, g, b, a) {\n\n var hex = [\n pad2(convertDecimalToHex(a)),\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n return hex.join(\"\");\n}\n\n// `equals`\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) { return false; }\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\n\ntinycolor.random = function() {\n return tinycolor.fromRatio({\n r: mathRandom(),\n g: mathRandom(),\n b: mathRandom()\n });\n};\n\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// \n\nfunction desaturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction saturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction greyscale(color) {\n return tinycolor(color).desaturate(100);\n}\n\nfunction lighten (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\nfunction brighten(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var rgb = tinycolor(color).toRgb();\n rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));\n rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));\n rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));\n return tinycolor(rgb);\n}\n\nfunction darken (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\n// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n// Values outside of this range will be wrapped into this range.\nfunction spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n}\n\n// Combination Functions\n// ---------------------\n// Thanks to jQuery xColor for some of the ideas behind these\n// \n\nfunction complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n}\n\nfunction triad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction tetrad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),\n tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})\n ];\n}\n\nfunction analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n\n for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n}\n\nfunction monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h, s = hsv.s, v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n\n while (results--) {\n ret.push(tinycolor({ h: h, s: s, v: v}));\n v = (v + modification) % 1;\n }\n\n return ret;\n}\n\n// Utility Functions\n// ---------------------\n\ntinycolor.mix = function(color1, color2, amount) {\n amount = (amount === 0) ? 0 : (amount || 50);\n\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n\n var p = amount / 100;\n\n var rgba = {\n r: ((rgb2.r - rgb1.r) * p) + rgb1.r,\n g: ((rgb2.g - rgb1.g) * p) + rgb1.g,\n b: ((rgb2.b - rgb1.b) * p) + rgb1.b,\n a: ((rgb2.a - rgb1.a) * p) + rgb1.a\n };\n\n return tinycolor(rgba);\n};\n\n\n// Readability Functions\n// ---------------------\n// false\n// tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\ntinycolor.isReadable = function(color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n\n out = false;\n\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n\n};\n\n// `mostReadable`\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// Optionally returns Black or White if the most readable color is unreadable.\n// *Example*\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\ntinycolor.mostReadable = function(baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size ;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors ;\n level = args.level;\n size = args.size;\n\n for (var i= 0; i < colorList.length ; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n\n if (tinycolor.isReadable(baseColor, bestColor, {\"level\":level,\"size\":size}) || !includeFallbackColors) {\n return bestColor;\n }\n else {\n args.includeFallbackColors=false;\n return tinycolor.mostReadable(baseColor,[\"#fff\", \"#000\"],args);\n }\n};\n\n\n// Big List of Colors\n// ------------------\n// \nvar names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n};\n\n// Make it easy to access colors via `hexNames[hex]`\nvar hexNames = tinycolor.hexNames = flip(names);\n\n\n// Utilities\n// ---------\n\n// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\nfunction flip(o) {\n var flipped = { };\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n a = parseFloat(a);\n\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n\n return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n if (isOnePointZero(n)) { n = \"100%\"; }\n\n var processPercent = isPercentage(n);\n n = mathMin(max, mathMax(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if ((Math.abs(n - max) < 0.000001)) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return (n % max) / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n return mathMin(1, mathMax(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// \nfunction isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n return typeof n === \"string\" && n.indexOf('%') != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n return c.length == 1 ? '0' + c : '' + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n if (n <= 1) {\n n = (n * 100) + \"%\";\n }\n\n return n;\n}\n\n// Converts a decimal to a hex value\nfunction convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n return (parseIntFromHex(h) / 255);\n}\n\nvar matchers = (function() {\n\n // \n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // \n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n})();\n\n// `isValidCSSUnit`\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see `matchers` above for definition).\nfunction isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n}\n\n// `stringInputToObject`\n// Permissive string parsing. Take in a number of formats, and output an object\n// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\nfunction stringInputToObject(color) {\n\n color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n }\n else if (color == 'transparent') {\n return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if ((match = matchers.rgb.exec(color))) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n if ((match = matchers.rgba.exec(color))) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n if ((match = matchers.hsl.exec(color))) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n if ((match = matchers.hsla.exec(color))) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n if ((match = matchers.hsv.exec(color))) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n if ((match = matchers.hsva.exec(color))) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n if ((match = matchers.hex8.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex6.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if ((match = matchers.hex4.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n a: convertHexToDecimal(match[4] + '' + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex3.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n\n return false;\n}\n\nfunction validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\"level\":\"AA\", \"size\":\"small\"};\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\"level\":level, \"size\":size};\n}\n\n// Node: Export function\nif (typeof module !== \"undefined\" && module.exports) {\n module.exports = tinycolor;\n}\n// AMD/requirejs: Define the module\nelse if (typeof define === 'function' && define.amd) {\n define(function () {return tinycolor;});\n}\n// Browser: Expose to window\nelse {\n window.tinycolor = tinycolor;\n}\n\n})(Math);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/tinycolor2/tinycolor.js\n// module id = 6\n// module chunks = 0 1","'use strict';\n/**\n * @module\n */\n\n/**\n * Colorpicker default options\n */\nexport default {\n /**\n * If true, loads the Debugger extension automatically into the current instance\n * @type {boolean}\n * @default false\n */\n debug: false,\n /**\n * Forces a color, ignoring the one from the elements value or data-color attribute.\n *\n * @type {(String|Color|boolean)}\n * @default false\n */\n color: false,\n /**\n * Forces an specific color format. If false, it will be automatically detected the first time,\n * but if null it will be always recalculated.\n *\n * Note that the ending 'a' of the format meaning \"alpha\" has currently no effect, meaning that rgb is the same as\n * rgba excepting if the alpha channel is disabled (see useAlpha).\n *\n * @type {('rgb'|'rgba'|'prgb'|'prgba'|'hex'|'hex3'|'hex6'|'hex8'|'hsl'|'hsla'|'hsv'|'hsva'|'name'|boolean)}\n * @default false\n */\n format: false,\n /**\n * Horizontal mode layout.\n *\n * If true, the hue and alpha channel bars will be rendered horizontally, above the saturation selector.\n *\n * @type {boolean}\n * @default false\n */\n horizontal: false,\n /**\n * Forces to show the colorpicker as an inline element\n *\n * @type {boolean}\n * @default false\n */\n inline: false,\n /**\n * Children input CSS selector\n *\n * @type {String}\n * @default 'input'\n */\n input: 'input',\n /**\n * Colorpicker container CSS selector. If given, the colorpicker will be placed inside this container.\n * If true, the colorpicker element itself will be used as the container.\n *\n * @type {String|boolean}\n * @default false\n */\n container: false, // container selector\n /**\n * Children color component CSS selector.\n * If it exists, the child element background will be changed on color change.\n *\n * @type {String|boolean}\n * @default '.add-on, .input-group-addon'\n */\n component: '.add-on, .input-group-addon',\n /**\n * Fallback color to use when the given color is invalid.\n * If false, the latest valid color will be used as a fallback.\n *\n * @type {String|Color|boolean}\n * @default false\n */\n fallbackColor: false,\n /**\n * If enabled, the input content will be replaced always with a valid color,\n * if not enabled the invalid color will be left in the input, but valid in the internal color object.\n *\n * @type {boolean}\n * @default false\n */\n autoInputFallback: false,\n /**\n * If true a hash will be prepended to hexadecimal colors.\n * If false, the hash will be removed.\n * This only affects the input values.\n *\n * @type {boolean}\n * @default false\n */\n useHashPrefix: true,\n /**\n * If true or false the alpha adjustment bar will be displayed no matter what.\n * If false it will be always hidden and alpha channel won't be allowed programmatically for this instance,\n * so the selected or typed color will be always opaque.\n *\n * @type {boolean}\n * @default true\n */\n useAlpha: true,\n /**\n * This only applies when the color format is hexadecimal.\n * If true, the alpha channel will be allowed for hexadecimal formatted colors, making them having 4 or 8 chars\n * (RGBA or RRGGBBAA). This format is not yet supported in all modern browsers, so it is disabled by default.\n * If false, rgba will be used whenever there is an alpha change different than 1 and the color format is\n * automatic.\n *\n * @type {boolean}\n * @default true\n */\n enableHex8: false,\n /**\n * Vertical sliders configuration\n * @type {Object}\n */\n sliders: {\n saturation: {\n maxLeft: 100,\n maxTop: 100,\n callLeft: 'setSaturationRatio',\n callTop: 'setBrightnessRatio'\n },\n hue: {\n maxLeft: 0,\n maxTop: 100,\n callLeft: false,\n callTop: 'setHueRatio'\n },\n alpha: {\n maxLeft: 0,\n maxTop: 100,\n callLeft: false,\n callTop: 'setAlphaRatio'\n }\n },\n /**\n * Horizontal sliders configuration\n * @type {Object}\n */\n slidersHorz: {\n saturation: {\n maxLeft: 100,\n maxTop: 100,\n callLeft: 'setSaturationRatio',\n callTop: 'setBrightnessRatio'\n },\n hue: {\n maxLeft: 100,\n maxTop: 0,\n callLeft: 'setHueRatio',\n callTop: false\n },\n alpha: {\n maxLeft: 100,\n maxTop: 0,\n callLeft: 'setAlphaRatio',\n callTop: false\n }\n },\n /**\n * Colorpicker popup alignment.\n * For now only right is supported.\n *\n * @type {('right')}\n * @default 'right'\n */ // TODO: add 'left' and 'auto' support.\n align: 'right',\n /**\n * Custom class to be added to the colorpicker element\n *\n * @type {String}\n */\n customClass: null,\n /**\n * Colorpicker widget template\n * @type {String}\n * @example\n * \n *
        \n *
        \n *
        \n *
        \n *
        \n *
        \n */\n template: `
        \n
        \n
        \n
        `,\n /**\n *\n * Associative object with the extension class name and its config.\n * Colorpicker comes with many bundled extensions: debugger, palette, preview and swatches (a superset of Palette).\n *\n * @type {Object}\n * @example\n * extensions: [\n * {\n * name: 'swatches'\n * colors: {\n * 'primary': '#337ab7',\n * 'success': '#5cb85c',\n * 'info': '#5bc0de',\n * 'warning': '#f0ad4e',\n * 'danger': '#d9534f'\n * },\n * namesAsValues: true\n * }\n * ]\n */\n extensions: [\n {\n name: 'preview',\n showText: false\n }\n ]\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/options.js","import Debugger from './Debugger';\nimport Preview from './Preview';\nimport Swatches from './Swatches';\nimport Palette from './Palette';\n\nexport {\n Debugger, Preview, Swatches, Palette\n};\n\nexport default {\n 'debugger': Debugger,\n 'preview': Preview,\n 'swatches': Swatches,\n 'palette': Palette\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/extensions/index.js","'use strict';\n\nimport Extension from 'Extension';\nimport $ from 'jquery';\n\nclass Debugger extends Extension {\n constructor(colorpicker, options = {}) {\n super(colorpicker, options);\n\n /**\n * @type {number}\n */\n this.eventCounter = 0;\n if (this.colorpicker.hasInput()) {\n this.colorpicker.input.on('change.colorpicker-ext', $.proxy(this.onChangeInput, this));\n }\n }\n\n /**\n * @fires colorpickerDebug\n * @param {string} eventName\n * @param {*} args\n */\n log(eventName, ...args) {\n this.eventCounter += 1;\n\n let logMessage = `#${this.eventCounter}: Colorpicker#${this.colorpicker.id} [${eventName}]`;\n\n console.debug(logMessage, ...args);\n\n /**\n * (Colorpicker) Fired by the ConsoleDebug extension whenever it logs something\n *\n * @event colorpickerDebug\n */\n this.colorpicker.element.trigger({\n type: 'colorpickerDebug',\n colorpicker: this.colorpicker,\n color: this.color,\n debug: {\n debugger: this,\n eventName: eventName,\n logArgs: args,\n logMessage: logMessage\n }\n });\n }\n\n resolveColor(color) {\n this.log('resolveColor()', color);\n return false;\n }\n\n onCreate(event) {\n this.log('colorpickerCreate');\n return super.onCreate(event);\n }\n\n onDestroy(event) {\n this.log('colorpickerDestroy');\n this.eventCounter = 0;\n\n if (this.colorpicker.hasInput()) {\n this.colorpicker.input.off('.colorpicker-ext');\n }\n\n return super.onDestroy(event);\n }\n\n onUpdate(event) {\n this.log('colorpickerUpdate');\n }\n\n /**\n * @listens _change\n * @param {Event} event\n */\n onChangeInput(event) {\n this.log('input:change.colorpicker', event.value, event.color);\n }\n\n onChange(event) {\n this.log('colorpickerChange', event.value, event.color);\n }\n\n onInvalid(event) {\n this.log('colorpickerInvalid', event.value, event.color);\n }\n\n onHide(event) {\n this.log('colorpickerHide');\n this.eventCounter = 0;\n }\n\n onShow(event) {\n this.log('colorpickerShow');\n }\n\n onDisable(event) {\n this.log('colorpickerDisable');\n }\n\n onEnable(event) {\n this.log('colorpickerEnable');\n }\n}\n\nexport default Debugger;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/extensions/Debugger.js","'use strict';\n\nimport Extension from 'Extension';\nimport $ from 'jquery';\n\nclass Preview extends Extension {\n constructor(colorpicker, options = {}) {\n super(colorpicker, Object.assign({},\n {\n template: '
        ',\n showText: true,\n format: colorpicker.format\n },\n options\n ));\n\n this.element = $(this.options.template);\n this.elementInner = this.element.find('div');\n }\n\n onCreate(event) {\n super.onCreate(event);\n this.colorpicker.picker.append(this.element);\n }\n\n onUpdate(event) {\n super.onUpdate(event);\n\n this.elementInner\n .css('backgroundColor', event.color.toRgbString());\n\n if (this.options.showText) {\n this.elementInner\n .html(event.color.toString(this.options.format || this.colorpicker.format));\n\n if (event.color.isDark()) {\n this.elementInner.css('color', 'white');\n } else {\n this.elementInner.css('color', 'black');\n }\n }\n }\n}\n\nexport default Preview;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/extensions/Preview.js","'use strict';\n\nimport Palette from './Palette';\nimport $ from 'jquery';\n\nlet defaults = {\n barTemplate: '
        ',\n swatchTemplate: ''\n};\n\nclass Swatches extends Palette {\n constructor(colorpicker, options = {}) {\n super(colorpicker, Object.assign({}, defaults, options));\n }\n\n isEnabled() {\n return this.getLength() > 0;\n }\n\n onCreate(event) {\n super.onCreate(event);\n\n if (!this.isEnabled()) {\n return;\n }\n\n let colorpicker = this.colorpicker,\n swatchContainer = $(this.options.barTemplate),\n isAliased = (this.options.namesAsValues === true) && !Array.isArray(this.colors);\n\n $.each(this.colors, (name, value) => {\n let $swatch = $(this.options.swatchTemplate)\n .css('background-color', value)\n .attr('data-name', name)\n .attr('data-value', value)\n .attr('title', `${name}: ${value}`);\n\n $swatch.on('mousedown.colorpicker touchstart.colorpicker',\n function (e) {\n e.preventDefault();\n colorpicker.setValue(isAliased ? $(this).data('name') : $(this).data('value'));\n }\n );\n swatchContainer.append($swatch);\n });\n\n colorpicker.picker.append(swatchContainer);\n }\n}\n\nexport default Swatches;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/extensions/Swatches.js"],"sourceRoot":""} \ No newline at end of file diff --git a/src/main/resources/static/plugins/fileinput/fileinput.min.css b/src/main/resources/static/plugins/fileinput/fileinput.min.css deleted file mode 100755 index a47e5ddbf..000000000 --- a/src/main/resources/static/plugins/fileinput/fileinput.min.css +++ /dev/null @@ -1,12 +0,0 @@ -/*! - * bootstrap-fileinput v4.5.0 - * http://plugins.krajee.com/file-input - * - * Krajee default styling for bootstrap-fileinput. - * - * Author: Kartik Visweswaran - * Copyright: 2014 - 2018, Kartik Visweswaran, Krajee.com - * - * Licensed under the BSD 3-Clause - * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md - */.btn-file input[type=file],.file-caption-icon,.file-no-browse,.file-preview .fileinput-remove,.file-zoom-dialog .btn-navigate,.file-zoom-dialog .floating-buttons,.krajee-default .file-thumb-progress{position:absolute}.file-loading input[type=file],input[type=file].file-loading{width:0;height:0}.file-no-browse{left:50%;bottom:20%;width:1px;height:1px;font-size:0;opacity:0;border:none;background:0 0;outline:0;box-shadow:none}.file-caption-icon,.file-input-ajax-new .fileinput-remove-button,.file-input-ajax-new .fileinput-upload-button,.file-input-ajax-new .no-browse .input-group-btn,.file-input-new .close,.file-input-new .file-preview,.file-input-new .fileinput-remove-button,.file-input-new .fileinput-upload-button,.file-input-new .glyphicon-file,.file-input-new .no-browse .input-group-btn,.file-zoom-dialog .modal-header:after,.file-zoom-dialog .modal-header:before,.hide-content .kv-file-content,.kv-hidden{display:none}.btn-file,.file-caption,.file-input,.file-loading:before,.file-preview,.file-zoom-dialog .modal-dialog,.krajee-default .file-thumbnail-footer,.krajee-default.file-preview-frame{position:relative}.file-error-message pre,.file-error-message ul,.krajee-default .file-actions,.krajee-default .file-other-error{text-align:left}.file-error-message pre,.file-error-message ul{margin:0}.krajee-default .file-drag-handle,.krajee-default .file-upload-indicator{float:left;margin:5px 0 -5px;width:16px;height:16px}.krajee-default .file-thumb-progress .progress,.krajee-default .file-thumb-progress .progress-bar{height:11px;font-family:Verdana,Helvetica,sans-serif;font-size:9px}.krajee-default .file-caption-info,.krajee-default .file-size-info{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:160px;height:15px;margin:auto}.file-zoom-content>.file-object.type-flash,.file-zoom-content>.file-object.type-image,.file-zoom-content>.file-object.type-video{max-width:100%;max-height:100%;width:auto}.file-zoom-content>.file-object.type-flash,.file-zoom-content>.file-object.type-video{height:100%}.file-zoom-content>.file-object.type-default,.file-zoom-content>.file-object.type-html,.file-zoom-content>.file-object.type-pdf,.file-zoom-content>.file-object.type-text{width:100%}.file-loading:before{content:" Loading...";display:inline-block;padding-left:20px;line-height:16px;font-size:13px;font-variant:small-caps;color:#999;background:url(../img/loading.gif) top left no-repeat}.file-object{margin:0 0 -5px;padding:0}.btn-file{overflow:hidden}.btn-file input[type=file]{top:0;left:0;min-width:100%;min-height:100%;text-align:right;opacity:0;background:none;cursor:inherit;display:block}.btn-file ::-ms-browse{font-size:10000px;width:100%;height:100%}.file-caption .file-caption-name{width:100%;margin:0;padding:0;box-shadow:none;border:none;background:0 0;outline:0}.file-caption.icon-visible .file-caption-icon{display:inline-block}.file-caption.icon-visible .file-caption-name{padding-left:15px}.file-caption-icon{left:8px}.file-error-message{color:#a94442;background-color:#f2dede;margin:5px;border:1px solid #ebccd1;border-radius:4px;padding:15px}.file-error-message pre{margin:5px 0}.file-caption-disabled{background-color:#eee;cursor:not-allowed;opacity:1}.file-preview{border-radius:5px;border:1px solid #ddd;padding:8px;width:100%;margin-bottom:5px}.file-preview .btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.file-preview .fileinput-remove{top:1px;right:1px;line-height:10px}.file-preview .clickable{cursor:pointer}.file-preview-image{font:40px Impact,Charcoal,sans-serif;color:green}.krajee-default.file-preview-frame{margin:8px;border:1px solid #ddd;box-shadow:1px 1px 5px 0 #a2958a;padding:6px;float:left;text-align:center}.krajee-default.file-preview-frame .kv-file-content{width:213px;height:160px}.krajee-default.file-preview-frame .kv-file-content.kv-pdf-rendered{width:400px}.krajee-default.file-preview-frame .file-thumbnail-footer{height:70px}.krajee-default.file-preview-frame:not(.file-preview-error):hover{box-shadow:3px 3px 5px 0 #333}.krajee-default .file-preview-text{display:block;color:#428bca;border:1px solid #ddd;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;outline:0;padding:8px;resize:none}.krajee-default .file-preview-html{border:1px solid #ddd;padding:8px;overflow:auto}.krajee-default .file-other-icon{font-size:6em}.krajee-default .file-footer-buttons{float:right}.krajee-default .file-footer-caption{display:block;text-align:center;padding-top:4px;font-size:11px;color:#777;margin-bottom:15px}.krajee-default .file-preview-error{opacity:.65;box-shadow:none}.krajee-default .file-thumb-progress{height:11px;top:37px;left:0;right:0}.krajee-default.kvsortable-ghost{background:#e1edf7;border:2px solid #a1abff}.krajee-default .file-preview-other:hover{opacity:.8}.krajee-default .file-preview-frame:not(.file-preview-error) .file-footer-caption:hover{color:#000}.kv-upload-progress .progress{height:20px;margin:10px 0;overflow:hidden}.kv-upload-progress .progress-bar{height:20px;font-family:Verdana,Helvetica,sans-serif}.file-zoom-dialog .file-other-icon{font-size:22em;font-size:50vmin}.file-zoom-dialog .modal-dialog{width:auto}.file-zoom-dialog .modal-header{display:flex;align-items:center;justify-content:space-between}.file-zoom-dialog .btn-navigate{padding:0;margin:0;background:0 0;text-decoration:none;outline:0;opacity:.7;top:45%;font-size:4em;color:#1c94c4}.file-zoom-dialog .btn-navigate:not([disabled]):hover{outline:0;box-shadow:none;opacity:.6}.file-zoom-dialog .floating-buttons{top:5px;right:10px}.file-zoom-dialog .btn-navigate[disabled]{opacity:.3}.file-zoom-dialog .btn-prev{left:1px}.file-zoom-dialog .btn-next{right:1px}.file-zoom-dialog .kv-zoom-title{font-weight:300;color:#999;max-width:50%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.file-input-ajax-new .no-browse .form-control,.file-input-new .no-browse .form-control{border-top-right-radius:4px;border-bottom-right-radius:4px}.file-caption-main{width:100%}.file-thumb-loading{background:url(../img/loading.gif) center center no-repeat content-box!important}.file-drop-zone{border:1px dashed #aaa;border-radius:4px;height:100%;text-align:center;vertical-align:middle;margin:12px 15px 12px 12px;padding:5px}.file-drop-zone.clickable:hover{border:2px dashed #999}.file-drop-zone.clickable:focus{border:2px solid #5acde2}.file-drop-zone .file-preview-thumbnails{cursor:default}.file-drop-zone-title{color:#aaa;font-size:1.6em;padding:85px 10px;cursor:default}.file-highlighted{border:2px dashed #999!important;background-color:#eee}.file-uploading{background:url(../img/loading-sm.gif) center bottom 10px no-repeat;opacity:.65}.file-zoom-fullscreen .modal-dialog{min-width:100%;margin:0}.file-zoom-fullscreen .modal-content{border-radius:0;box-shadow:none;min-height:100vh}.file-zoom-fullscreen .modal-body{overflow-y:auto}.floating-buttons{z-index:3000}.floating-buttons .btn-kv{margin-left:3px;z-index:3000}.file-zoom-content{height:480px;text-align:center}.file-zoom-content .file-preview-image,.file-zoom-content .file-preview-video{max-height:100%}.file-zoom-content>.file-object.type-image{height:auto;min-height:inherit}.file-zoom-content>.file-object.type-audio{width:auto;height:30px}@media (min-width:576px){.file-zoom-dialog .modal-dialog{max-width:500px}}@media (min-width:992px){.file-zoom-dialog .modal-lg{max-width:800px}}@media (max-width:767px){.file-preview-thumbnails{display:flex;justify-content:center;align-items:center;flex-direction:column}.file-zoom-dialog .modal-header{flex-direction:column}}@media (max-width:350px){.krajee-default.file-preview-frame .kv-file-content{width:160px}}@media (max-width:420px){.krajee-default.file-preview-frame .kv-file-content.kv-pdf-rendered{width:100%}}.file-loading[dir=rtl]:before{background:url(../img/loading.gif) top right no-repeat;padding-left:0;padding-right:20px}.file-sortable .file-drag-handle{cursor:move;opacity:1}.file-sortable .file-drag-handle:hover{opacity:.7}.clickable .file-drop-zone-title{cursor:pointer}.kv-zoom-actions .btn-kv{margin-left:3px}.file-preview-initial.sortable-chosen{background-color:#d9edf7} \ No newline at end of file diff --git a/src/main/resources/static/plugins/hz2py/jQuery.Hz2Py-min.js b/src/main/resources/static/plugins/hz2py/jQuery.Hz2Py-min.js deleted file mode 100644 index 445411ff0..000000000 --- a/src/main/resources/static/plugins/hz2py/jQuery.Hz2Py-min.js +++ /dev/null @@ -1,464 +0,0 @@ -/** - * date: 20150814 - * gan - * content:汉字转拼音 - **/ -(function(b) -{ - b.fn.toPinyin = function(h) - { - var f = b(this).val(); - var e = f.length; - var l = ""; - var k = new RegExp("[a-zA-Z0-9- ]"); - for (var j = 0; j < e; j++) - { - var m = f.substr(j, 1); - var g = c(m, d); - if (k.test(m)) - { - l += m - } - else - { - if (g !== false) - { - l += g - } - } - } - l = l.replace(/ /g, "-"); - while (l.indexOf("--") > 0) - { - l = l.replace("--", "-") - } - return l - }; - /**拼音字典**/ - var d = { - a: "\u554a\u963f\u9515", - ai: "\u57c3\u6328\u54ce\u5509\u54c0\u7691\u764c\u853c\u77ee\u827e\u788d\u7231\u9698\u8bf6\u6371\u55f3\u55cc\u5ad2\u7477\u66a7\u7839\u953f\u972d", - an: "\u978d\u6c28\u5b89\u4ffa\u6309\u6697\u5cb8\u80fa\u6848\u8c19\u57ef\u63de\u72b4\u5eb5\u6849\u94f5\u9e4c\u9878\u9eef", - ang: "\u80ae\u6602\u76ce", - ao: "\u51f9\u6556\u71ac\u7ff1\u8884\u50b2\u5965\u61ca\u6fb3\u5773\u62d7\u55f7\u5662\u5c99\u5ed2\u9068\u5aaa\u9a9c\u8071\u87af\u93ca\u9ccc\u93d6", - ba: "\u82ad\u634c\u6252\u53ed\u5427\u7b06\u516b\u75a4\u5df4\u62d4\u8dcb\u9776\u628a\u8019\u575d\u9738\u7f62\u7238\u8307\u83dd\u8406\u636d\u5c9c\u705e\u6777\u94af\u7c91\u9c85\u9b43", - bai: "\u767d\u67cf\u767e\u6446\u4f70\u8d25\u62dc\u7a17\u859c\u63b0\u97b4", - ban: "\u6591\u73ed\u642c\u6273\u822c\u9881\u677f\u7248\u626e\u62cc\u4f34\u74e3\u534a\u529e\u7eca\u962a\u5742\u8c73\u94a3\u7622\u764d\u8228", - bang: "\u90a6\u5e2e\u6886\u699c\u8180\u7ed1\u68d2\u78c5\u868c\u9551\u508d\u8c24\u84a1\u8783", - bao: "\u82de\u80de\u5305\u8912\u96f9\u4fdd\u5821\u9971\u5b9d\u62b1\u62a5\u66b4\u8c79\u9c8d\u7206\u52f9\u8446\u5b80\u5b62\u7172\u9e28\u8913\u8db5\u9f85", - bo: "\u5265\u8584\u73bb\u83e0\u64ad\u62e8\u94b5\u6ce2\u535a\u52c3\u640f\u94c2\u7b94\u4f2f\u5e1b\u8236\u8116\u818a\u6e24\u6cca\u9a73\u4eb3\u8543\u5575\u997d\u6a97\u64d8\u7934\u94b9\u9e41\u7c38\u8ddb", - bei: "\u676f\u7891\u60b2\u5351\u5317\u8f88\u80cc\u8d1d\u94a1\u500d\u72c8\u5907\u60eb\u7119\u88ab\u5b5b\u9642\u90b6\u57e4\u84d3\u5457\u602b\u6096\u789a\u9e4e\u8919\u943e", - ben: "\u5954\u82ef\u672c\u7b28\u755a\u574c\u951b", - beng: "\u5d29\u7ef7\u752d\u6cf5\u8e66\u8ff8\u552a\u5623\u750f", - bi: "\u903c\u9f3b\u6bd4\u9119\u7b14\u5f7c\u78a7\u84d6\u853d\u6bd5\u6bd9\u6bd6\u5e01\u5e87\u75f9\u95ed\u655d\u5f0a\u5fc5\u8f9f\u58c1\u81c2\u907f\u965b\u5315\u4ef3\u4ffe\u8298\u835c\u8378\u5421\u54d4\u72f4\u5eb3\u610e\u6ed7\u6fde\u5f3c\u59a3\u5a62\u5b16\u74a7\u8d32\u7540\u94cb\u79d5\u88e8\u7b5a\u7b85\u7be6\u822d\u895e\u8df8\u9ac0", - bian: "\u97ad\u8fb9\u7f16\u8d2c\u6241\u4fbf\u53d8\u535e\u8fa8\u8fa9\u8fab\u904d\u533e\u5f01\u82c4\u5fed\u6c74\u7f0f\u7178\u782d\u78a5\u7a39\u7a86\u8759\u7b3e\u9cca", - biao: "\u6807\u5f6a\u8198\u8868\u5a4a\u9aa0\u98d1\u98d9\u98da\u706c\u9556\u9573\u762d\u88f1\u9cd4", - bie: "\u9cd6\u618b\u522b\u762a\u8e69\u9cd8", - bin: "\u5f6c\u658c\u6fd2\u6ee8\u5bbe\u6448\u50a7\u6d5c\u7f24\u73a2\u6ba1\u8191\u9554\u9acc\u9b13", - bing: "\u5175\u51b0\u67c4\u4e19\u79c9\u997c\u70b3\u75c5\u5e76\u7980\u90b4\u6452\u7ee0\u678b\u69df\u71f9", - bu: "\u6355\u535c\u54fa\u8865\u57e0\u4e0d\u5e03\u6b65\u7c3f\u90e8\u6016\u62ca\u535f\u900b\u74ff\u6661\u949a\u91ad", - ca: "\u64e6\u5693\u7924", - cai: "\u731c\u88c1\u6750\u624d\u8d22\u776c\u8e29\u91c7\u5f69\u83dc\u8521", - can: "\u9910\u53c2\u8695\u6b8b\u60ed\u60e8\u707f\u9a96\u74a8\u7cb2\u9eea", - cang: "\u82cd\u8231\u4ed3\u6ca7\u85cf\u4f27", - cao: "\u64cd\u7cd9\u69fd\u66f9\u8349\u8279\u5608\u6f15\u87ac\u825a", - ce: "\u5395\u7b56\u4fa7\u518c\u6d4b\u5202\u5e3b\u607b", - ceng: "\u5c42\u8e6d\u564c", - cha: "\u63d2\u53c9\u832c\u8336\u67e5\u78b4\u643d\u5bdf\u5c94\u5dee\u8be7\u7339\u9987\u6c4a\u59f9\u6748\u6942\u69ce\u6aab\u9497\u9538\u9572\u8869", - chai: "\u62c6\u67f4\u8c7a\u4faa\u8308\u7625\u867f\u9f87", - chan: "\u6400\u63ba\u8749\u998b\u8c17\u7f20\u94f2\u4ea7\u9610\u98a4\u5181\u8c04\u8c36\u8487\u5edb\u5fcf\u6f7a\u6fb6\u5b71\u7fbc\u5a75\u5b17\u9aa3\u89c7\u7985\u9561\u88e3\u87fe\u8e94", - chang: "\u660c\u7316\u573a\u5c1d\u5e38\u957f\u507f\u80a0\u5382\u655e\u7545\u5531\u5021\u4f25\u9b2f\u82cc\u83d6\u5f9c\u6005\u60dd\u960a\u5a3c\u5ae6\u6636\u6c05\u9cb3", - chao: "\u8d85\u6284\u949e\u671d\u5632\u6f6e\u5de2\u5435\u7092\u600a\u7ec9\u6641\u8016", - che: "\u8f66\u626f\u64a4\u63a3\u5f7b\u6f88\u577c\u5c6e\u7817", - chen: "\u90f4\u81e3\u8fb0\u5c18\u6668\u5ff1\u6c89\u9648\u8d81\u886c\u79f0\u8c0c\u62bb\u55d4\u5bb8\u741b\u6987\u809c\u80c2\u789c\u9f80", - cheng: "\u6491\u57ce\u6a59\u6210\u5448\u4e58\u7a0b\u60e9\u6f84\u8bda\u627f\u901e\u9a8b\u79e4\u57d5\u5d4a\u5fb5\u6d48\u67a8\u67fd\u6a18\u665f\u584d\u77a0\u94d6\u88ce\u86cf\u9172", - chi: "\u5403\u75f4\u6301\u5319\u6c60\u8fdf\u5f1b\u9a70\u803b\u9f7f\u4f88\u5c3a\u8d64\u7fc5\u65a5\u70bd\u50ba\u5880\u82aa\u830c\u640b\u53f1\u54e7\u557b\u55e4\u5f73\u996c\u6cb2\u5ab8\u6555\u80dd\u7719\u7735\u9e31\u761b\u892b\u86a9\u87ad\u7b1e\u7bea\u8c49\u8e05\u8e1f\u9b51", - chong: "\u5145\u51b2\u866b\u5d07\u5ba0\u833a\u5fe1\u61a7\u94f3\u825f", - chou: "\u62bd\u916c\u7574\u8e0c\u7a20\u6101\u7b79\u4ec7\u7ef8\u7785\u4e11\u4fe6\u5733\u5e31\u60c6\u6eb4\u59af\u7633\u96e0\u9c8b", - chu: "\u81ed\u521d\u51fa\u6a71\u53a8\u8e87\u9504\u96cf\u6ec1\u9664\u695a\u7840\u50a8\u77d7\u6410\u89e6\u5904\u4e8d\u520d\u61b7\u7ecc\u6775\u696e\u6a17\u870d\u8e70\u9edc", - chuan: "\u63e3\u5ddd\u7a7f\u693d\u4f20\u8239\u5598\u4e32\u63be\u821b\u60f4\u9044\u5ddb\u6c1a\u948f\u9569\u8221", - chuang: "\u75ae\u7a97\u5e62\u5e8a\u95ef\u521b\u6006", - chui: "\u5439\u708a\u6376\u9524\u5782\u9672\u68f0\u69cc", - chun: "\u6625\u693f\u9187\u5507\u6df3\u7eaf\u8822\u4fc3\u83bc\u6c8c\u80ab\u6710\u9e51\u877d", - chuo: "\u6233\u7ef0\u851f\u8fb6\u8f8d\u955e\u8e14\u9f8a", - ci: "\u75b5\u8328\u78c1\u96cc\u8f9e\u6148\u74f7\u8bcd\u6b64\u523a\u8d50\u6b21\u8360\u5472\u5d6f\u9e5a\u8785\u7ccd\u8d91", - cong: "\u806a\u8471\u56f1\u5306\u4ece\u4e1b\u506c\u82c1\u6dd9\u9aa2\u742e\u7481\u679e", - cu: "\u51d1\u7c97\u918b\u7c07\u731d\u6b82\u8e59", - cuan: "\u8e7f\u7be1\u7a9c\u6c46\u64ba\u6615\u7228", - cui: "\u6467\u5d14\u50ac\u8106\u7601\u7cb9\u6dec\u7fe0\u8403\u60b4\u7480\u69b1\u96b9", - cun: "\u6751\u5b58\u5bf8\u78cb\u5fd6\u76b4", - cuo: "\u64ae\u6413\u63aa\u632b\u9519\u539d\u811e\u9509\u77ec\u75e4\u9e7e\u8e49\u8e9c", - da: "\u642d\u8fbe\u7b54\u7629\u6253\u5927\u8037\u54d2\u55d2\u601b\u59b2\u75b8\u8921\u7b2a\u977c\u9791", - dai: "\u5446\u6b79\u50a3\u6234\u5e26\u6b86\u4ee3\u8d37\u888b\u5f85\u902e\u6020\u57ed\u7519\u5454\u5cb1\u8fe8\u902f\u9a80\u7ed0\u73b3\u9edb", - dan: "\u803d\u62c5\u4e39\u5355\u90f8\u63b8\u80c6\u65e6\u6c2e\u4f46\u60ee\u6de1\u8bde\u5f39\u86cb\u4ebb\u510b\u5369\u840f\u5556\u6fb9\u6a90\u6b9a\u8d55\u7708\u7605\u8043\u7baa", - dang: "\u5f53\u6321\u515a\u8361\u6863\u8c20\u51fc\u83ea\u5b95\u7800\u94db\u88c6", - dao: "\u5200\u6363\u8e48\u5012\u5c9b\u7977\u5bfc\u5230\u7a3b\u60bc\u9053\u76d7\u53e8\u5541\u5fc9\u6d2e\u6c18\u7118\u5fd1\u7e9b", - de: "\u5fb7\u5f97\u7684\u951d", - deng: "\u8e6c\u706f\u767b\u7b49\u77aa\u51f3\u9093\u5654\u5d9d\u6225\u78f4\u956b\u7c26", - di: "\u5824\u4f4e\u6ef4\u8fea\u654c\u7b1b\u72c4\u6da4\u7fdf\u5ae1\u62b5\u5e95\u5730\u8482\u7b2c\u5e1d\u5f1f\u9012\u7f14\u6c10\u7c74\u8bcb\u8c1b\u90b8\u577b\u839c\u837b\u5600\u5a23\u67e2\u68e3\u89cc\u7825\u78b2\u7747\u955d\u7f9d\u9ab6", - dian: "\u98a0\u6382\u6ec7\u7898\u70b9\u5178\u975b\u57ab\u7535\u4f43\u7538\u5e97\u60e6\u5960\u6dc0\u6bbf\u4e36\u963d\u576b\u57dd\u5dc5\u73b7\u765c\u766b\u7c1f\u8e2e", - diao: "\u7889\u53fc\u96d5\u51cb\u5201\u6389\u540a\u9493\u8c03\u8f7a\u94de\u8729\u7c9c\u8c82", - die: "\u8dcc\u7239\u789f\u8776\u8fed\u8c0d\u53e0\u4f5a\u57a4\u581e\u63f2\u558b\u6e2b\u8f76\u7252\u74de\u8936\u800b\u8e40\u9cbd\u9cce", - ding: "\u4e01\u76ef\u53ee\u9489\u9876\u9f0e\u952d\u5b9a\u8ba2\u4e22\u4ec3\u5576\u738e\u815a\u7887\u753a\u94e4\u7594\u8035\u914a", - dong: "\u4e1c\u51ac\u8463\u61c2\u52a8\u680b\u4f97\u606b\u51bb\u6d1e\u578c\u549a\u5cbd\u5cd2\u5902\u6c21\u80e8\u80f4\u7850\u9e2b", - dou: "\u515c\u6296\u6597\u9661\u8c46\u9017\u75d8\u8538\u94ad\u7aa6\u7aac\u86aa\u7bfc\u9161", - du: "\u90fd\u7763\u6bd2\u728a\u72ec\u8bfb\u5835\u7779\u8d4c\u675c\u9540\u809a\u5ea6\u6e21\u5992\u828f\u561f\u6e0e\u691f\u6a50\u724d\u8839\u7b03\u9ad1\u9ee9", - duan: "\u7aef\u77ed\u953b\u6bb5\u65ad\u7f0e\u5f56\u6934\u7145\u7c16", - dui: "\u5806\u5151\u961f\u5bf9\u603c\u619d\u7893", - dun: "\u58a9\u5428\u8e72\u6566\u987f\u56e4\u949d\u76fe\u9041\u7096\u7818\u7905\u76f9\u9566\u8db8", - duo: "\u6387\u54c6\u591a\u593a\u579b\u8eb2\u6735\u8dfa\u8235\u5241\u60f0\u5815\u5484\u54da\u7f0d\u67c1\u94ce\u88f0\u8e31", - e: "\u86fe\u5ce8\u9e45\u4fc4\u989d\u8bb9\u5a25\u6076\u5384\u627c\u904f\u9102\u997f\u5669\u8c14\u57a9\u57ad\u82ca\u83aa\u843c\u5443\u6115\u5c59\u5a40\u8f6d\u66f7\u816d\u786a\u9507\u9537\u9e57\u989a\u9cc4", - en: "\u6069\u84bd\u6441\u5514\u55ef", - er: "\u800c\u513f\u8033\u5c14\u9975\u6d31\u4e8c\u8d30\u8fe9\u73e5\u94d2\u9e38\u9c95", - fa: "\u53d1\u7f5a\u7b4f\u4f10\u4e4f\u9600\u6cd5\u73d0\u57a1\u781d", - fan: "\u85e9\u5e06\u756a\u7ffb\u6a0a\u77fe\u9492\u7e41\u51e1\u70e6\u53cd\u8fd4\u8303\u8d29\u72af\u996d\u6cdb\u8629\u5e61\u72ad\u68b5\u6535\u71d4\u7548\u8e6f", - fang: "\u574a\u82b3\u65b9\u80aa\u623f\u9632\u59a8\u4eff\u8bbf\u7eba\u653e\u531a\u90a1\u5f77\u94ab\u822b\u9c82", - fei: "\u83f2\u975e\u5561\u98de\u80a5\u532a\u8bfd\u5420\u80ba\u5e9f\u6cb8\u8d39\u82be\u72d2\u60b1\u6ddd\u5983\u7ecb\u7eef\u69a7\u8153\u6590\u6249\u7953\u7829\u9544\u75f1\u871a\u7bda\u7fe1\u970f\u9cb1", - fen: "\u82ac\u915a\u5429\u6c1b\u5206\u7eb7\u575f\u711a\u6c7e\u7c89\u594b\u4efd\u5fff\u6124\u7caa\u507e\u7035\u68fc\u610d\u9cbc\u9f22", - feng: "\u4e30\u5c01\u67ab\u8702\u5cf0\u950b\u98ce\u75af\u70fd\u9022\u51af\u7f1d\u8bbd\u5949\u51e4\u4ff8\u9146\u8451\u6ca3\u781c", - fu: "\u4f5b\u5426\u592b\u6577\u80a4\u5b75\u6276\u62c2\u8f90\u5e45\u6c1f\u7b26\u4f0f\u4fd8\u670d\u6d6e\u6daa\u798f\u88b1\u5f17\u752b\u629a\u8f85\u4fef\u91dc\u65a7\u812f\u8151\u5e9c\u8150\u8d74\u526f\u8986\u8d4b\u590d\u5085\u4ed8\u961c\u7236\u8179\u8d1f\u5bcc\u8ba3\u9644\u5987\u7f1a\u5490\u5310\u51eb\u90db\u8299\u82fb\u832f\u83a9\u83d4\u544b\u5e5e\u6ecf\u8274\u5b5a\u9a78\u7ec2\u6874\u8d59\u9efb\u9efc\u7f58\u7a03\u99a5\u864d\u86a8\u8709\u8760\u876e\u9eb8\u8dba\u8dd7\u9cc6", - ga: "\u5676\u560e\u86e4\u5c2c\u5477\u5c15\u5c1c\u65ee\u9486", - gai: "\u8be5\u6539\u6982\u9499\u76d6\u6e89\u4e10\u9654\u5793\u6224\u8d45\u80f2", - gan: "\u5e72\u7518\u6746\u67d1\u7aff\u809d\u8d76\u611f\u79c6\u6562\u8d63\u5769\u82f7\u5c34\u64c0\u6cd4\u6de6\u6f89\u7ec0\u6a44\u65f0\u77f8\u75b3\u9150", - gang: "\u5188\u521a\u94a2\u7f38\u809b\u7eb2\u5c97\u6e2f\u6206\u7f61\u9883\u7b7b", - gong: "\u6760\u5de5\u653b\u529f\u606d\u9f9a\u4f9b\u8eac\u516c\u5bab\u5f13\u5de9\u6c5e\u62f1\u8d21\u5171\u857b\u5efe\u54a3\u73d9\u80b1\u86a3\u86e9\u89e5", - gao: "\u7bd9\u768b\u9ad8\u818f\u7f94\u7cd5\u641e\u9550\u7a3f\u544a\u777e\u8bf0\u90dc\u84bf\u85c1\u7f1f\u69d4\u69c1\u6772\u9506", - ge: "\u54e5\u6b4c\u6401\u6208\u9e3d\u80f3\u7599\u5272\u9769\u845b\u683c\u9601\u9694\u94ec\u4e2a\u5404\u9b32\u4ee1\u54ff\u5865\u55dd\u7ea5\u643f\u8188\u784c\u94ea\u9549\u88bc\u988c\u867c\u8238\u9abc\u9ac2", - gei: "\u7ed9", - gen: "\u6839\u8ddf\u4e98\u831b\u54cf\u826e", - geng: "\u8015\u66f4\u5e9a\u7fb9\u57c2\u803f\u6897\u54fd\u8d53\u9ca0", - gou: "\u94a9\u52fe\u6c9f\u82df\u72d7\u57a2\u6784\u8d2d\u591f\u4f5d\u8bdf\u5ca3\u9058\u5abe\u7f11\u89cf\u5f40\u9e32\u7b31\u7bdd\u97b2", - gu: "\u8f9c\u83c7\u5495\u7b8d\u4f30\u6cbd\u5b64\u59d1\u9f13\u53e4\u86ca\u9aa8\u8c37\u80a1\u6545\u987e\u56fa\u96c7\u560f\u8bc2\u83f0\u54cc\u5d2e\u6c69\u688f\u8f71\u726f\u727f\u80cd\u81cc\u6bc2\u77bd\u7f5f\u94b4\u9522\u74e0\u9e2a\u9e44\u75fc\u86c4\u9164\u89da\u9cb4\u9ab0\u9e58", - gua: "\u522e\u74dc\u5250\u5be1\u6302\u8902\u5366\u8bd6\u5471\u681d\u9e39", - guai: "\u4e56\u62d0\u602a\u54d9", - guan: "\u68fa\u5173\u5b98\u51a0\u89c2\u7ba1\u9986\u7f50\u60ef\u704c\u8d2f\u500c\u839e\u63bc\u6dab\u76e5\u9e73\u9ccf", - guang: "\u5149\u5e7f\u901b\u72b7\u6844\u80f1\u7592", - gui: "\u7470\u89c4\u572d\u7845\u5f52\u9f9f\u95fa\u8f68\u9b3c\u8be1\u7678\u6842\u67dc\u8dea\u8d35\u523d\u5326\u523f\u5e8b\u5b84\u59ab\u6867\u7085\u6677\u7688\u7c0b\u9c91\u9cdc", - gun: "\u8f8a\u6eda\u68cd\u4e28\u886e\u7ef2\u78d9\u9ca7", - guo: "\u9505\u90ed\u56fd\u679c\u88f9\u8fc7\u9998\u8803\u57da\u63b4\u5459\u56d7\u5e3c\u5d1e\u7313\u6901\u8662\u951e\u8052\u872e\u873e\u8748", - ha: "\u54c8", - hai: "\u9ab8\u5b69\u6d77\u6c26\u4ea5\u5bb3\u9a87\u54b4\u55e8\u988f\u91a2", - han: "\u9163\u61a8\u90af\u97e9\u542b\u6db5\u5bd2\u51fd\u558a\u7f55\u7ff0\u64bc\u634d\u65f1\u61be\u608d\u710a\u6c57\u6c49\u9097\u83e1\u6496\u961a\u701a\u6657\u7113\u9894\u86b6\u9f3e", - hen: "\u592f\u75d5\u5f88\u72e0\u6068", - hang: "\u676d\u822a\u6c86\u7ed7\u73e9\u6841", - hao: "\u58d5\u568e\u8c6a\u6beb\u90dd\u597d\u8017\u53f7\u6d69\u8585\u55e5\u5686\u6fe0\u704f\u660a\u7693\u98a2\u869d", - he: "\u5475\u559d\u8377\u83cf\u6838\u79be\u548c\u4f55\u5408\u76d2\u8c89\u9602\u6cb3\u6db8\u8d6b\u8910\u9e64\u8d3a\u8bc3\u52be\u58d1\u85ff\u55d1\u55ec\u9616\u76cd\u86b5\u7fee", - hei: "\u563f\u9ed1", - heng: "\u54fc\u4ea8\u6a2a\u8861\u6052\u8a07\u8605", - hong: "\u8f70\u54c4\u70d8\u8679\u9e3f\u6d2a\u5b8f\u5f18\u7ea2\u9ec9\u8ba7\u836d\u85a8\u95f3\u6cd3", - hou: "\u5589\u4faf\u7334\u543c\u539a\u5019\u540e\u5820\u5f8c\u9005\u760a\u7bcc\u7cc7\u9c8e\u9aba", - hu: "\u547c\u4e4e\u5ffd\u745a\u58f6\u846b\u80e1\u8774\u72d0\u7cca\u6e56\u5f27\u864e\u552c\u62a4\u4e92\u6caa\u6237\u51b1\u553f\u56eb\u5cb5\u7322\u6019\u60da\u6d52\u6ef9\u7425\u69f2\u8f77\u89f3\u70c0\u7173\u623d\u6248\u795c\u9e55\u9e71\u7b0f\u9190\u659b", - hua: "\u82b1\u54d7\u534e\u733e\u6ed1\u753b\u5212\u5316\u8bdd\u5290\u6d4d\u9a85\u6866\u94e7\u7a1e", - huai: "\u69d0\u5f8a\u6000\u6dee\u574f\u8fd8\u8e1d", - huan: "\u6b22\u73af\u6853\u7f13\u6362\u60a3\u5524\u75ea\u8c62\u7115\u6da3\u5ba6\u5e7b\u90c7\u5942\u57b8\u64d0\u571c\u6d39\u6d63\u6f36\u5bf0\u902d\u7f33\u953e\u9ca9\u9b1f", - huang: "\u8352\u614c\u9ec4\u78fa\u8757\u7c27\u7687\u51f0\u60f6\u714c\u6643\u5e4c\u604d\u8c0e\u968d\u5fa8\u6e5f\u6f62\u9051\u749c\u8093\u7640\u87e5\u7bc1\u9cc7", - hui: "\u7070\u6325\u8f89\u5fbd\u6062\u86d4\u56de\u6bc1\u6094\u6167\u5349\u60e0\u6666\u8d3f\u79fd\u4f1a\u70e9\u6c47\u8bb3\u8bf2\u7ed8\u8bd9\u8334\u835f\u8559\u54d5\u5599\u96b3\u6d04\u5f57\u7f0b\u73f2\u6656\u605a\u867a\u87ea\u9ebe", - hun: "\u8364\u660f\u5a5a\u9b42\u6d51\u6df7\u8be8\u9984\u960d\u6eb7\u7f17", - huo: "\u8c41\u6d3b\u4f19\u706b\u83b7\u6216\u60d1\u970d\u8d27\u7978\u6509\u56af\u5925\u94ac\u952a\u956c\u8020\u8816", - ji: "\u51fb\u573e\u57fa\u673a\u7578\u7a3d\u79ef\u7b95\u808c\u9965\u8ff9\u6fc0\u8ba5\u9e21\u59ec\u7ee9\u7f09\u5409\u6781\u68d8\u8f91\u7c4d\u96c6\u53ca\u6025\u75be\u6c72\u5373\u5ac9\u7ea7\u6324\u51e0\u810a\u5df1\u84df\u6280\u5180\u5b63\u4f0e\u796d\u5242\u60b8\u6d4e\u5bc4\u5bc2\u8ba1\u8bb0\u65e2\u5fcc\u9645\u5993\u7ee7\u7eaa\u5c45\u4e0c\u4e69\u525e\u4f76\u4f74\u8114\u58bc\u82a8\u82b0\u8401\u84ba\u857a\u638e\u53fd\u54ad\u54dc\u5527\u5c8c\u5d74\u6d0e\u5f50\u5c50\u9aa5\u757f\u7391\u696b\u6b9b\u621f\u6222\u8d4d\u89ca\u7284\u9f51\u77f6\u7f81\u5d47\u7a37\u7620\u7635\u866e\u7b08\u7b04\u66a8\u8dfb\u8dfd\u9701\u9c9a\u9cab\u9afb\u9e82", - jia: "\u5609\u67b7\u5939\u4f73\u5bb6\u52a0\u835a\u988a\u8d3e\u7532\u94be\u5047\u7a3c\u4ef7\u67b6\u9a7e\u5ac1\u4f3d\u90cf\u62ee\u5cac\u6d43\u8fe6\u73c8\u621b\u80db\u605d\u94d7\u9553\u75c2\u86f1\u7b33\u8888\u8dcf", - jian: "\u6b7c\u76d1\u575a\u5c16\u7b3a\u95f4\u714e\u517c\u80a9\u8270\u5978\u7f04\u8327\u68c0\u67ec\u78b1\u7877\u62e3\u6361\u7b80\u4fed\u526a\u51cf\u8350\u69db\u9274\u8df5\u8d31\u89c1\u952e\u7bad\u4ef6\u5065\u8230\u5251\u996f\u6e10\u6e85\u6da7\u5efa\u50ed\u8c0f\u8c2b\u83c5\u84b9\u641b\u56dd\u6e54\u8e47\u8b07\u7f23\u67a7\u67d9\u6957\u620b\u622c\u726e\u728d\u6bfd\u8171\u7751\u950f\u9e63\u88e5\u7b15\u7bb4\u7fe6\u8dbc\u8e3a\u9ca3\u97af", - jiang: "\u50f5\u59dc\u5c06\u6d46\u6c5f\u7586\u848b\u6868\u5956\u8bb2\u5320\u9171\u964d\u8333\u6d1a\u7edb\u7f30\u729f\u7913\u8029\u7ce8\u8c47", - jiao: "\u8549\u6912\u7901\u7126\u80f6\u4ea4\u90ca\u6d47\u9a84\u5a07\u56bc\u6405\u94f0\u77eb\u4fa5\u811a\u72e1\u89d2\u997a\u7f34\u7ede\u527f\u6559\u9175\u8f7f\u8f83\u53eb\u4f7c\u50ec\u832d\u6322\u564d\u5ce4\u5fbc\u59e3\u7e9f\u656b\u768e\u9e6a\u86df\u91ae\u8de4\u9c9b", - jie: "\u7a96\u63ed\u63a5\u7686\u79f8\u8857\u9636\u622a\u52ab\u8282\u6854\u6770\u6377\u776b\u7aed\u6d01\u7ed3\u89e3\u59d0\u6212\u85c9\u82a5\u754c\u501f\u4ecb\u75a5\u8beb\u5c4a\u5048\u8ba6\u8bd8\u5588\u55df\u736c\u5a55\u5b51\u6840\u7352\u78a3\u9534\u7596\u88b7\u9889\u86a7\u7faf\u9c92\u9ab1\u9aeb", - jin: "\u5dfe\u7b4b\u65a4\u91d1\u4eca\u6d25\u895f\u7d27\u9526\u4ec5\u8c28\u8fdb\u9773\u664b\u7981\u8fd1\u70ec\u6d78\u5c3d\u537a\u8369\u5807\u5664\u9991\u5ed1\u5997\u7f19\u747e\u69ff\u8d46\u89d0\u9485\u9513\u887f\u77dc", - jing: "\u52b2\u8346\u5162\u830e\u775b\u6676\u9cb8\u4eac\u60ca\u7cbe\u7cb3\u7ecf\u4e95\u8b66\u666f\u9888\u9759\u5883\u656c\u955c\u5f84\u75c9\u9756\u7adf\u7ade\u51c0\u522d\u5106\u9631\u83c1\u734d\u61ac\u6cfe\u8ff3\u5f2a\u5a67\u80bc\u80eb\u8148\u65cc", - jiong: "\u70af\u7a98\u5182\u8fe5\u6243", - jiu: "\u63ea\u7a76\u7ea0\u7396\u97ed\u4e45\u7078\u4e5d\u9152\u53a9\u6551\u65e7\u81fc\u8205\u548e\u5c31\u759a\u50e6\u557e\u9604\u67e9\u6855\u9e6b\u8d73\u9b0f", - ju: "\u97a0\u62d8\u72d9\u75bd\u9a79\u83ca\u5c40\u5480\u77e9\u4e3e\u6cae\u805a\u62d2\u636e\u5de8\u5177\u8ddd\u8e1e\u952f\u4ff1\u53e5\u60e7\u70ac\u5267\u5028\u8bb5\u82e3\u82f4\u8392\u63ac\u907d\u5c66\u741a\u67b8\u6910\u6998\u6989\u6a58\u728b\u98d3\u949c\u9514\u7aad\u88fe\u8d84\u91b5\u8e3d\u9f83\u96ce\u97ab", - juan: "\u6350\u9e43\u5a1f\u5026\u7737\u5377\u7ee2\u9104\u72f7\u6d93\u684a\u8832\u9529\u954c\u96bd", - jue: "\u6485\u652b\u6289\u6398\u5014\u7235\u89c9\u51b3\u8bc0\u7edd\u53a5\u5282\u8c32\u77cd\u8568\u5658\u5d1b\u7357\u5b53\u73cf\u6877\u6a5b\u721d\u9562\u8e76\u89d6", - jun: "\u5747\u83cc\u94a7\u519b\u541b\u5cfb\u4fca\u7ae3\u6d5a\u90e1\u9a8f\u6343\u72fb\u76b2\u7b60\u9e87", - ka: "\u5580\u5496\u5361\u4f67\u5494\u80e9", - ke: "\u54af\u5777\u82db\u67ef\u68f5\u78d5\u9897\u79d1\u58f3\u54b3\u53ef\u6e34\u514b\u523b\u5ba2\u8bfe\u5ca2\u606a\u6e98\u9a92\u7f02\u73c2\u8f72\u6c2a\u778c\u94b6\u75b4\u7aa0\u874c\u9ac1", - kai: "\u5f00\u63e9\u6977\u51ef\u6168\u5240\u57b2\u8488\u5ffe\u607a\u94e0\u950e", - kan: "\u520a\u582a\u52d8\u574e\u780d\u770b\u4f83\u51f5\u83b0\u83b6\u6221\u9f9b\u77b0", - kang: "\u5eb7\u6177\u7ce0\u625b\u6297\u4ea2\u7095\u5751\u4f09\u95f6\u94aa", - kao: "\u8003\u62f7\u70e4\u9760\u5c3b\u6832\u7292\u94d0", - ken: "\u80af\u5543\u57a6\u6073\u57a0\u88c9\u9880", - keng: "\u542d\u5fd0\u94ff", - kong: "\u7a7a\u6050\u5b54\u63a7\u5025\u5d06\u7b9c", - kou: "\u62a0\u53e3\u6263\u5bc7\u82a4\u853b\u53e9\u770d\u7b58", - ku: "\u67af\u54ed\u7a9f\u82e6\u9177\u5e93\u88e4\u5233\u5800\u55be\u7ed4\u9ab7", - kua: "\u5938\u57ae\u630e\u8de8\u80ef\u4f89", - kuai: "\u5757\u7b77\u4fa9\u5feb\u84af\u90d0\u8489\u72ef\u810d", - kuan: "\u5bbd\u6b3e\u9acb", - kuang: "\u5321\u7b50\u72c2\u6846\u77ff\u7736\u65f7\u51b5\u8bd3\u8bf3\u909d\u5739\u593c\u54d0\u7ea9\u8d36", - kui: "\u4e8f\u76d4\u5cbf\u7aa5\u8475\u594e\u9b41\u5080\u9988\u6127\u6e83\u9997\u532e\u5914\u9697\u63c6\u55b9\u559f\u609d\u6126\u9615\u9035\u668c\u777d\u8069\u8770\u7bd1\u81fe\u8dec", - kun: "\u5764\u6606\u6346\u56f0\u6083\u9603\u7428\u951f\u918c\u9cb2\u9ae1", - kuo: "\u62ec\u6269\u5ed3\u9614\u86de", - la: "\u5783\u62c9\u5587\u8721\u814a\u8fa3\u5566\u524c\u647a\u908b\u65ef\u782c\u760c", - lai: "\u83b1\u6765\u8d56\u5d03\u5f95\u6d9e\u6fd1\u8d49\u7750\u94fc\u765e\u7c41", - lan: "\u84dd\u5a6a\u680f\u62e6\u7bee\u9611\u5170\u6f9c\u8c30\u63fd\u89c8\u61d2\u7f06\u70c2\u6ee5\u5549\u5c9a\u61d4\u6f24\u6984\u6593\u7f71\u9567\u8934", - lang: "\u7405\u6994\u72fc\u5eca\u90ce\u6717\u6d6a\u83a8\u8497\u5577\u9606\u9512\u7a02\u8782", - lao: "\u635e\u52b3\u7262\u8001\u4f6c\u59e5\u916a\u70d9\u6d9d\u5520\u5d02\u6833\u94d1\u94f9\u75e8\u91aa", - le: "\u52d2\u4e50\u808b\u4ec2\u53fb\u561e\u6cd0\u9cd3", - lei: "\u96f7\u956d\u857e\u78ca\u7d2f\u5121\u5792\u64c2\u7c7b\u6cea\u7fb8\u8bd4\u837d\u54a7\u6f2f\u5ad8\u7f27\u6a91\u8012\u9179", - ling: "\u68f1\u51b7\u62ce\u73b2\u83f1\u96f6\u9f84\u94c3\u4f36\u7f9a\u51cc\u7075\u9675\u5cad\u9886\u53e6\u4ee4\u9143\u5844\u82d3\u5464\u56f9\u6ce0\u7eeb\u67c3\u68c2\u74f4\u8046\u86c9\u7fce\u9cae", - leng: "\u695e\u6123", - li: "\u5398\u68a8\u7281\u9ece\u7bf1\u72f8\u79bb\u6f13\u7406\u674e\u91cc\u9ca4\u793c\u8389\u8354\u540f\u6817\u4e3d\u5389\u52b1\u783e\u5386\u5229\u5088\u4f8b\u4fd0\u75e2\u7acb\u7c92\u6ca5\u96b6\u529b\u7483\u54e9\u4fea\u4fda\u90e6\u575c\u82c8\u8385\u84e0\u85dc\u6369\u5456\u5533\u55b1\u7301\u6ea7\u6fa7\u9026\u5a0c\u5ae0\u9a8a\u7f21\u73de\u67a5\u680e\u8f79\u623e\u783a\u8a48\u7f79\u9502\u9e42\u75a0\u75ac\u86ce\u870a\u8821\u7b20\u7be5\u7c9d\u91b4\u8dde\u96f3\u9ca1\u9ce2\u9ee7", - lian: "\u4fe9\u8054\u83b2\u8fde\u9570\u5ec9\u601c\u6d9f\u5e18\u655b\u8138\u94fe\u604b\u70bc\u7ec3\u631b\u8539\u5941\u6f4b\u6fc2\u5a08\u740f\u695d\u6b93\u81c1\u81a6\u88e2\u880a\u9ca2", - liang: "\u7cae\u51c9\u6881\u7cb1\u826f\u4e24\u8f86\u91cf\u667e\u4eae\u8c05\u589a\u690b\u8e09\u9753\u9b49", - liao: "\u64a9\u804a\u50da\u7597\u71ce\u5be5\u8fbd\u6f66\u4e86\u6482\u9563\u5ed6\u6599\u84fc\u5c25\u5639\u7360\u5bee\u7f2d\u948c\u9e69\u8022", - lie: "\u5217\u88c2\u70c8\u52a3\u730e\u51bd\u57d2\u6d0c\u8d94\u8e90\u9b23", - lin: "\u7433\u6797\u78f7\u9716\u4e34\u90bb\u9cde\u6dcb\u51db\u8d41\u541d\u853a\u5d99\u5eea\u9074\u6aa9\u8f9a\u77b5\u7cbc\u8e8f\u9e9f", - liu: "\u6e9c\u7409\u69b4\u786b\u998f\u7559\u5218\u7624\u6d41\u67f3\u516d\u62a1\u507b\u848c\u6cd6\u6d4f\u905b\u9a9d\u7efa\u65d2\u7198\u950d\u954f\u9e68\u938f", - "long": "\u9f99\u804b\u5499\u7b3c\u7abf\u9686\u5784\u62e2\u9647\u5f04\u5785\u830f\u6cf7\u73d1\u680a\u80e7\u783b\u7643", - lou: "\u697c\u5a04\u6402\u7bd3\u6f0f\u964b\u55bd\u5d5d\u9542\u7618\u8027\u877c\u9ac5", - lu: "\u82a6\u5362\u9885\u5e90\u7089\u63b3\u5364\u864f\u9c81\u9e93\u788c\u9732\u8def\u8d42\u9e7f\u6f5e\u7984\u5f55\u9646\u622e\u5786\u6445\u64b8\u565c\u6cf8\u6e0c\u6f09\u7490\u680c\u6a79\u8f73\u8f82\u8f98\u6c07\u80ea\u9565\u9e2c\u9e6d\u7c0f\u823b\u9c88", - lv: "\u9a74\u5415\u94dd\u4fa3\u65c5\u5c65\u5c61\u7f15\u8651\u6c2f\u5f8b\u7387\u6ee4\u7eff\u634b\u95fe\u6988\u8182\u7a06\u891b", - luan: "\u5ce6\u5b6a\u6ee6\u5375\u4e71\u683e\u9e3e\u92ae", - lue: "\u63a0\u7565\u950a", - lun: "\u8f6e\u4f26\u4ed1\u6ca6\u7eb6\u8bba\u56f5", - luo: "\u841d\u87ba\u7f57\u903b\u9523\u7ba9\u9aa1\u88f8\u843d\u6d1b\u9a86\u7edc\u502e\u8366\u645e\u7321\u6cfa\u6924\u8136\u9559\u7630\u96d2", - ma: "\u5988\u9ebb\u739b\u7801\u8682\u9a6c\u9a82\u561b\u5417\u551b\u72b8\u5b37\u6769\u9ebd", - mai: "\u57cb\u4e70\u9ea6\u5356\u8fc8\u8109\u52a2\u836c\u54aa\u973e", - man: "\u7792\u9992\u86ee\u6ee1\u8513\u66fc\u6162\u6f2b\u8c29\u5881\u5e54\u7f26\u71b3\u9558\u989f\u87a8\u9cd7\u9794", - mang: "\u8292\u832b\u76f2\u5fd9\u83bd\u9099\u6f2d\u6726\u786d\u87d2", - meng: "\u6c13\u840c\u8499\u6aac\u76df\u9530\u731b\u68a6\u5b5f\u52d0\u750d\u77a2\u61f5\u791e\u867b\u8722\u8813\u824b\u8268\u9efe", - miao: "\u732b\u82d7\u63cf\u7784\u85d0\u79d2\u6e3a\u5e99\u5999\u55b5\u9088\u7f08\u7f2a\u676a\u6dfc\u7707\u9e4b\u8731", - mao: "\u8305\u951a\u6bdb\u77db\u94c6\u536f\u8302\u5192\u5e3d\u8c8c\u8d38\u4f94\u88a4\u52d6\u8306\u5cc1\u7441\u6634\u7266\u8004\u65c4\u61cb\u7780\u86d1\u8765\u87ca\u9ae6", - me: "\u4e48", - mei: "\u73ab\u679a\u6885\u9176\u9709\u7164\u6ca1\u7709\u5a92\u9541\u6bcf\u7f8e\u6627\u5bd0\u59b9\u5a9a\u5776\u8393\u5d4b\u7338\u6d7c\u6e44\u6963\u9545\u9e5b\u8882\u9b45", - men: "\u95e8\u95f7\u4eec\u626a\u739f\u7116\u61d1\u9494", - mi: "\u772f\u919a\u9761\u7cdc\u8ff7\u8c1c\u5f25\u7c73\u79d8\u89c5\u6ccc\u871c\u5bc6\u5e42\u8288\u5196\u8c27\u863c\u5627\u7315\u736f\u6c68\u5b93\u5f2d\u8112\u6549\u7cf8\u7e3b\u9e8b", - mian: "\u68c9\u7720\u7ef5\u5195\u514d\u52c9\u5a29\u7f05\u9762\u6c94\u6e4e\u817c\u7704", - mie: "\u8511\u706d\u54a9\u881b\u7bfe", - min: "\u6c11\u62bf\u76bf\u654f\u60af\u95fd\u82e0\u5cb7\u95f5\u6cef\u73c9", - ming: "\u660e\u879f\u9e23\u94ed\u540d\u547d\u51a5\u8317\u6e9f\u669d\u7791\u9169", - miu: "\u8c2c", - mo: "\u6478\u6479\u8611\u6a21\u819c\u78e8\u6469\u9b54\u62b9\u672b\u83ab\u58a8\u9ed8\u6cab\u6f20\u5bde\u964c\u8c1f\u8309\u84e6\u998d\u5aeb\u9546\u79e3\u763c\u8031\u87c6\u8c8a\u8c98", - mou: "\u8c0b\u725f\u67d0\u53b6\u54de\u5a7a\u7738\u936a", - mu: "\u62c7\u7261\u4ea9\u59c6\u6bcd\u5893\u66ae\u5e55\u52df\u6155\u6728\u76ee\u7766\u7267\u7a46\u4eeb\u82dc\u5452\u6c90\u6bea\u94bc", - na: "\u62ff\u54ea\u5450\u94a0\u90a3\u5a1c\u7eb3\u5185\u637a\u80ad\u954e\u8872\u7bac", - nai: "\u6c16\u4e43\u5976\u8010\u5948\u9f10\u827f\u8418\u67f0", - nan: "\u5357\u7537\u96be\u56ca\u5583\u56e1\u6960\u8169\u877b\u8d67", - nao: "\u6320\u8111\u607c\u95f9\u5b6c\u57b4\u7331\u7459\u7847\u94d9\u86f2", - ne: "\u6dd6\u5462\u8bb7", - nei: "\u9981", - nen: "\u5ae9\u80fd\u6798\u6041", - ni: "\u59ae\u9713\u502a\u6ce5\u5c3c\u62df\u4f60\u533f\u817b\u9006\u6eba\u4f32\u576d\u730a\u6029\u6ee0\u6635\u65ce\u7962\u615d\u7768\u94cc\u9cb5", - nian: "\u852b\u62c8\u5e74\u78be\u64b5\u637b\u5ff5\u5eff\u8f87\u9ecf\u9c87\u9cb6", - niang: "\u5a18\u917f", - niao: "\u9e1f\u5c3f\u8311\u5b32\u8132\u8885", - nie: "\u634f\u8042\u5b7d\u556e\u954a\u954d\u6d85\u4e5c\u9667\u8616\u55eb\u8080\u989e\u81ec\u8e51", - nin: "\u60a8\u67e0", - ning: "\u72de\u51dd\u5b81\u62e7\u6cde\u4f5e\u84e5\u549b\u752f\u804d", - niu: "\u725b\u626d\u94ae\u7ebd\u72c3\u5ff8\u599e\u86b4", - nong: "\u8113\u6d53\u519c\u4fac", - nu: "\u5974\u52aa\u6012\u5476\u5e11\u5f29\u80ec\u5b65\u9a7d", - nv: "\u5973\u6067\u9495\u8844", - nuan: "\u6696", - nuenue: "\u8650", - nue: "\u759f\u8c11", - nuo: "\u632a\u61e6\u7cef\u8bfa\u50a9\u6426\u558f\u9518", - ou: "\u54e6\u6b27\u9e25\u6bb4\u85d5\u5455\u5076\u6ca4\u6004\u74ef\u8026", - pa: "\u556a\u8db4\u722c\u5e15\u6015\u7436\u8469\u7b62", - pai: "\u62cd\u6392\u724c\u5f98\u6e43\u6d3e\u4ff3\u848e", - pan: "\u6500\u6f58\u76d8\u78d0\u76fc\u7554\u5224\u53db\u723f\u6cee\u88a2\u897b\u87e0\u8e52", - pang: "\u4e53\u5e9e\u65c1\u802a\u80d6\u6ec2\u9004", - pao: "\u629b\u5486\u5228\u70ae\u888d\u8dd1\u6ce1\u530f\u72cd\u5e96\u812c\u75b1", - pei: "\u5478\u80da\u57f9\u88f4\u8d54\u966a\u914d\u4f69\u6c9b\u638a\u8f94\u5e14\u6de0\u65c6\u952b\u9185\u9708", - pen: "\u55b7\u76c6\u6e53", - peng: "\u7830\u62a8\u70f9\u6f8e\u5f6d\u84ec\u68da\u787c\u7bf7\u81a8\u670b\u9e4f\u6367\u78b0\u576f\u580b\u562d\u6026\u87db", - pi: "\u7812\u9739\u6279\u62ab\u5288\u7435\u6bd7\u5564\u813e\u75b2\u76ae\u5339\u75de\u50fb\u5c41\u8b6c\u4e15\u9674\u90b3\u90eb\u572e\u9f19\u64d7\u567c\u5e80\u5ab2\u7eb0\u6787\u7513\u7765\u7f74\u94cd\u75e6\u7656\u758b\u868d\u8c94", - pian: "\u7bc7\u504f\u7247\u9a97\u8c1d\u9a88\u728f\u80fc\u890a\u7fe9\u8e41", - piao: "\u98d8\u6f02\u74e2\u7968\u527d\u560c\u5ad6\u7f25\u6b8d\u779f\u87b5", - pie: "\u6487\u77a5\u4e3f\u82e4\u6c15", - pin: "\u62fc\u9891\u8d2b\u54c1\u8058\u62da\u59d8\u5ad4\u6980\u725d\u98a6", - ping: "\u4e52\u576a\u82f9\u840d\u5e73\u51ed\u74f6\u8bc4\u5c4f\u4fdc\u5a09\u67b0\u9c86", - po: "\u5761\u6cfc\u9887\u5a46\u7834\u9b44\u8feb\u7c95\u53f5\u9131\u6ea5\u73c0\u948b\u94b7\u76a4\u7b38", - pou: "\u5256\u88d2\u8e23", - pu: "\u6251\u94fa\u4ec6\u8386\u8461\u83e9\u84b2\u57d4\u6734\u5703\u666e\u6d66\u8c31\u66dd\u7011\u530d\u5657\u6fee\u749e\u6c06\u9564\u9568\u8e7c", - qi: "\u671f\u6b3a\u6816\u621a\u59bb\u4e03\u51c4\u6f06\u67d2\u6c8f\u5176\u68cb\u5947\u6b67\u7566\u5d0e\u8110\u9f50\u65d7\u7948\u7941\u9a91\u8d77\u5c82\u4e5e\u4f01\u542f\u5951\u780c\u5668\u6c14\u8fc4\u5f03\u6c7d\u6ce3\u8bab\u4e9f\u4e93\u573b\u8291\u840b\u847a\u5601\u5c7a\u5c90\u6c54\u6dc7\u9a90\u7eee\u742a\u7426\u675e\u6864\u69ed\u6b39\u797a\u61a9\u789b\u86f4\u871e\u7da6\u7dae\u8dbf\u8e4a\u9ccd\u9e92", - qia: "\u6390\u6070\u6d3d\u845c", - qian: "\u7275\u6266\u948e\u94c5\u5343\u8fc1\u7b7e\u4edf\u8c26\u4e7e\u9ed4\u94b1\u94b3\u524d\u6f5c\u9063\u6d45\u8c34\u5811\u5d4c\u6b20\u6b49\u4f65\u9621\u828a\u82a1\u8368\u63ae\u5c8d\u60ad\u614a\u9a9e\u6434\u8930\u7f31\u6920\u80b7\u6106\u94a4\u8654\u7b9d", - qiang: "\u67aa\u545b\u8154\u7f8c\u5899\u8537\u5f3a\u62a2\u5af1\u6a2f\u6217\u709d\u9516\u9535\u956a\u8941\u8723\u7f9f\u8deb\u8dc4", - qiao: "\u6a47\u9539\u6572\u6084\u6865\u77a7\u4e54\u4fa8\u5de7\u9798\u64ac\u7fd8\u5ced\u4fcf\u7a8d\u5281\u8bee\u8c2f\u835e\u6100\u6194\u7f32\u6a35\u6bf3\u7857\u8df7\u9792", - qie: "\u5207\u8304\u4e14\u602f\u7a83\u90c4\u553c\u60ec\u59be\u6308\u9532\u7ba7", - qin: "\u94a6\u4fb5\u4eb2\u79e6\u7434\u52e4\u82b9\u64d2\u79bd\u5bdd\u6c81\u82a9\u84c1\u8572\u63ff\u5423\u55ea\u5659\u6eb1\u6a8e\u8793\u887e", - qing: "\u9752\u8f7b\u6c22\u503e\u537f\u6e05\u64ce\u6674\u6c30\u60c5\u9877\u8bf7\u5e86\u5029\u82d8\u570a\u6aa0\u78ec\u873b\u7f44\u7b90\u8b26\u9cad\u9ee5", - qiong: "\u743c\u7a77\u909b\u8315\u7a79\u7b47\u928e", - qiu: "\u79cb\u4e18\u90b1\u7403\u6c42\u56da\u914b\u6cc5\u4fc5\u6c3d\u5def\u827d\u72b0\u6e6b\u9011\u9052\u6978\u8d47\u9e20\u866c\u86af\u8764\u88d8\u7cd7\u9cc5\u9f3d", - qu: "\u8d8b\u533a\u86c6\u66f2\u8eaf\u5c48\u9a71\u6e20\u53d6\u5a36\u9f8b\u8da3\u53bb\u8bce\u52ac\u8556\u8627\u5c96\u8862\u9612\u74a9\u89d1\u6c0d\u795b\u78f2\u766f\u86d0\u883c\u9eb4\u77bf\u9ee2", - quan: "\u5708\u98a7\u6743\u919b\u6cc9\u5168\u75ca\u62f3\u72ac\u5238\u529d\u8be0\u8343\u737e\u609b\u7efb\u8f81\u754e\u94e8\u8737\u7b4c\u9b08", - que: "\u7f3a\u7094\u7638\u5374\u9e4a\u69b7\u786e\u96c0\u9619\u60ab", - qun: "\u88d9\u7fa4\u9021", - ran: "\u7136\u71c3\u5189\u67d3\u82d2\u9aef", - rang: "\u74e4\u58e4\u6518\u56b7\u8ba9\u79b3\u7a70", - rao: "\u9976\u6270\u7ed5\u835b\u5a06\u6861", - ruo: "\u60f9\u82e5\u5f31", - re: "\u70ed\u504c", - ren: "\u58ec\u4ec1\u4eba\u5fcd\u97e7\u4efb\u8ba4\u5203\u598a\u7eab\u4ede\u834f\u845a\u996a\u8f6b\u7a14\u887d", - reng: "\u6254\u4ecd", - ri: "\u65e5", - rong: "\u620e\u8338\u84c9\u8363\u878d\u7194\u6eb6\u5bb9\u7ed2\u5197\u5d58\u72e8\u7f1b\u6995\u877e", - rou: "\u63c9\u67d4\u8089\u7cc5\u8e42\u97a3", - ru: "\u8339\u8815\u5112\u5b7a\u5982\u8fb1\u4e73\u6c5d\u5165\u8925\u84d0\u85b7\u5685\u6d33\u6ebd\u6fe1\u94f7\u8966\u98a5", - ruan: "\u8f6f\u962e\u670a", - rui: "\u854a\u745e\u9510\u82ae\u8564\u777f\u868b", - run: "\u95f0\u6da6", - sa: "\u6492\u6d12\u8428\u5345\u4ee8\u6332\u98d2", - sai: "\u816e\u9cc3\u585e\u8d5b\u567b", - san: "\u4e09\u53c1\u4f1e\u6563\u5f61\u9993\u6c35\u6bf5\u7cc1\u9730", - sang: "\u6851\u55d3\u4e27\u6421\u78c9\u98a1", - sao: "\u6414\u9a9a\u626b\u5ac2\u57fd\u81ca\u7619\u9ccb", - se: "\u745f\u8272\u6da9\u556c\u94e9\u94ef\u7a51", - sen: "\u68ee", - seng: "\u50e7", - sha: "\u838e\u7802\u6740\u5239\u6c99\u7eb1\u50bb\u5565\u715e\u810e\u6b43\u75e7\u88df\u970e\u9ca8", - shai: "\u7b5b\u6652\u917e", - shan: "\u73ca\u82eb\u6749\u5c71\u5220\u717d\u886b\u95ea\u9655\u64c5\u8d61\u81b3\u5584\u6c55\u6247\u7f2e\u5261\u8baa\u912f\u57cf\u829f\u6f78\u59d7\u9a9f\u81bb\u9490\u759d\u87ee\u8222\u8dda\u9cdd", - shang: "\u5892\u4f24\u5546\u8d4f\u664c\u4e0a\u5c1a\u88f3\u57a7\u7ef1\u6b87\u71b5\u89de", - shao: "\u68a2\u634e\u7a0d\u70e7\u828d\u52fa\u97f6\u5c11\u54e8\u90b5\u7ecd\u52ad\u82d5\u6f72\u86f8\u7b24\u7b72\u8244", - she: "\u5962\u8d4a\u86c7\u820c\u820d\u8d66\u6444\u5c04\u6151\u6d89\u793e\u8bbe\u538d\u4f58\u731e\u7572\u9e9d", - shen: "\u7837\u7533\u547b\u4f38\u8eab\u6df1\u5a20\u7ec5\u795e\u6c88\u5ba1\u5a76\u751a\u80be\u614e\u6e17\u8bdc\u8c02\u5432\u54c2\u6e16\u6939\u77e7\u8703", - sheng: "\u58f0\u751f\u7525\u7272\u5347\u7ef3\u7701\u76db\u5269\u80dc\u5723\u4e1e\u6e11\u5ab5\u771a\u7b19", - shi: "\u5e08\u5931\u72ee\u65bd\u6e7f\u8bd7\u5c38\u8671\u5341\u77f3\u62fe\u65f6\u4ec0\u98df\u8680\u5b9e\u8bc6\u53f2\u77e2\u4f7f\u5c4e\u9a76\u59cb\u5f0f\u793a\u58eb\u4e16\u67ff\u4e8b\u62ed\u8a93\u901d\u52bf\u662f\u55dc\u566c\u9002\u4ed5\u4f8d\u91ca\u9970\u6c0f\u5e02\u6043\u5ba4\u89c6\u8bd5\u8c25\u57d8\u83b3\u84cd\u5f11\u5511\u9963\u8f7c\u8006\u8d33\u70bb\u793b\u94c8\u94ca\u87ab\u8210\u7b6e\u8c55\u9ca5\u9cba", - shou: "\u6536\u624b\u9996\u5b88\u5bff\u6388\u552e\u53d7\u7626\u517d\u624c\u72e9\u7ef6\u824f", - shu: "\u852c\u67a2\u68b3\u6b8a\u6292\u8f93\u53d4\u8212\u6dd1\u758f\u4e66\u8d4e\u5b70\u719f\u85af\u6691\u66d9\u7f72\u8700\u9ecd\u9f20\u5c5e\u672f\u8ff0\u6811\u675f\u620d\u7ad6\u5885\u5eb6\u6570\u6f31\u6055\u500f\u587e\u83fd\u5fc4\u6cad\u6d91\u6f8d\u59dd\u7ebe\u6bf9\u8167\u6bb3\u956f\u79eb\u9e6c", - shua: "\u5237\u800d\u5530\u6dae", - shuai: "\u6454\u8870\u7529\u5e05\u87c0", - shuan: "\u6813\u62f4\u95e9", - shuang: "\u971c\u53cc\u723d\u5b40", - shui: "\u8c01\u6c34\u7761\u7a0e", - shun: "\u542e\u77ac\u987a\u821c\u6042", - shuo: "\u8bf4\u7855\u6714\u70c1\u84b4\u6420\u55cd\u6fef\u5981\u69ca\u94c4", - si: "\u65af\u6495\u5636\u601d\u79c1\u53f8\u4e1d\u6b7b\u8086\u5bfa\u55e3\u56db\u4f3a\u4f3c\u9972\u5df3\u53ae\u4fdf\u5155\u83e5\u549d\u6c5c\u6cd7\u6f8c\u59d2\u9a77\u7f0c\u7940\u7960\u9536\u9e36\u801c\u86f3\u7b25", - song: "\u677e\u8038\u6002\u9882\u9001\u5b8b\u8bbc\u8bf5\u51c7\u83d8\u5d27\u5d69\u5fea\u609a\u6dde\u7ae6", - sou: "\u641c\u8258\u64de\u55fd\u53df\u55d6\u55fe\u998a\u6eb2\u98d5\u778d\u953c\u878b", - su: "\u82cf\u9165\u4fd7\u7d20\u901f\u7c9f\u50f3\u5851\u6eaf\u5bbf\u8bc9\u8083\u5919\u8c21\u850c\u55c9\u612b\u7c0c\u89eb\u7a23", - suan: "\u9178\u849c\u7b97", - sui: "\u867d\u968b\u968f\u7ee5\u9ad3\u788e\u5c81\u7a57\u9042\u96a7\u795f\u84d1\u51ab\u8c07\u6fc9\u9083\u71e7\u772d\u7762", - sun: "\u5b59\u635f\u7b0b\u836a\u72f2\u98e7\u69ab\u8de3\u96bc", - suo: "\u68ad\u5506\u7f29\u7410\u7d22\u9501\u6240\u5522\u55e6\u5a11\u686b\u7743\u7fa7", - ta: "\u584c\u4ed6\u5b83\u5979\u5854\u736d\u631e\u8e4b\u8e0f\u95fc\u6ebb\u9062\u69bb\u6c93", - tai: "\u80ce\u82d4\u62ac\u53f0\u6cf0\u915e\u592a\u6001\u6c70\u90b0\u85b9\u80bd\u70b1\u949b\u8dc6\u9c90", - tan: "\u574d\u644a\u8d2a\u762b\u6ee9\u575b\u6a80\u75f0\u6f6d\u8c2d\u8c08\u5766\u6bef\u8892\u78b3\u63a2\u53f9\u70ad\u90ef\u8548\u6619\u94bd\u952c\u8983", - tang: "\u6c64\u5858\u642a\u5802\u68e0\u819b\u5510\u7cd6\u50a5\u9967\u6e8f\u746d\u94f4\u9557\u8025\u8797\u87b3\u7fb0\u91a3", - thang: "\u5018\u8eba\u6dcc", - theng: "\u8d9f\u70eb", - tao: "\u638f\u6d9b\u6ed4\u7ee6\u8404\u6843\u9003\u6dd8\u9676\u8ba8\u5957\u6311\u9f17\u5555\u97ec\u9955", - te: "\u7279", - teng: "\u85e4\u817e\u75bc\u8a8a\u6ed5", - ti: "\u68af\u5254\u8e22\u9511\u63d0\u9898\u8e44\u557c\u4f53\u66ff\u568f\u60d5\u6d95\u5243\u5c49\u8351\u608c\u9016\u7ee8\u7f07\u9e48\u88fc\u918d", - tian: "\u5929\u6dfb\u586b\u7530\u751c\u606c\u8214\u8146\u63ad\u5fdd\u9617\u6b84\u754b\u94bf\u86ba", - tiao: "\u6761\u8fe2\u773a\u8df3\u4f7b\u7967\u94eb\u7a95\u9f86\u9ca6", - tie: "\u8d34\u94c1\u5e16\u841c\u992e", - ting: "\u5385\u542c\u70c3\u6c40\u5ef7\u505c\u4ead\u5ead\u633a\u8247\u839b\u8476\u5a77\u6883\u8713\u9706", - tong: "\u901a\u6850\u916e\u77b3\u540c\u94dc\u5f64\u7ae5\u6876\u6345\u7b52\u7edf\u75db\u4f5f\u50ee\u4edd\u833c\u55f5\u6078\u6f7c\u783c", - tou: "\u5077\u6295\u5934\u900f\u4ea0", - tu: "\u51f8\u79c3\u7a81\u56fe\u5f92\u9014\u6d82\u5c60\u571f\u5410\u5154\u580d\u837c\u83df\u948d\u9174", - tuan: "\u6e4d\u56e2\u7583", - tui: "\u63a8\u9893\u817f\u8715\u892a\u9000\u5fd2\u717a", - tun: "\u541e\u5c6f\u81c0\u9968\u66be\u8c5a\u7a80", - tuo: "\u62d6\u6258\u8131\u9e35\u9640\u9a6e\u9a7c\u692d\u59a5\u62d3\u553e\u4e47\u4f57\u5768\u5eb9\u6cb1\u67dd\u7823\u7ba8\u8204\u8dce\u9f0d", - wa: "\u6316\u54c7\u86d9\u6d3c\u5a03\u74e6\u889c\u4f64\u5a32\u817d", - wai: "\u6b6a\u5916", - wan: "\u8c4c\u5f2f\u6e7e\u73a9\u987d\u4e38\u70f7\u5b8c\u7897\u633d\u665a\u7696\u60cb\u5b9b\u5a49\u4e07\u8155\u525c\u8284\u82cb\u83c0\u7ea8\u7efe\u742c\u8118\u7579\u873f\u7ba2", - wang: "\u6c6a\u738b\u4ea1\u6789\u7f51\u5f80\u65fa\u671b\u5fd8\u5984\u7f54\u5c22\u60d8\u8f8b\u9b4d", - wei: "\u5a01\u5dcd\u5fae\u5371\u97e6\u8fdd\u6845\u56f4\u552f\u60df\u4e3a\u6f4d\u7ef4\u82c7\u840e\u59d4\u4f1f\u4f2a\u5c3e\u7eac\u672a\u851a\u5473\u754f\u80c3\u5582\u9b4f\u4f4d\u6e2d\u8c13\u5c09\u6170\u536b\u502d\u504e\u8bff\u9688\u8473\u8587\u5e0f\u5e37\u5d34\u5d6c\u7325\u732c\u95f1\u6ca9\u6d27\u6da0\u9036\u5a13\u73ae\u97ea\u8ece\u709c\u7168\u71a8\u75ff\u8249\u9c94", - wen: "\u761f\u6e29\u868a\u6587\u95fb\u7eb9\u543b\u7a33\u7d0a\u95ee\u520e\u6120\u960c\u6c76\u74ba\u97eb\u6b81\u96ef", - weng: "\u55e1\u7fc1\u74ee\u84ca\u8579", - wo: "\u631d\u8717\u6da1\u7a9d\u6211\u65a1\u5367\u63e1\u6c83\u83b4\u5e44\u6e25\u674c\u809f\u9f8c", - wu: "\u5deb\u545c\u94a8\u4e4c\u6c61\u8bec\u5c4b\u65e0\u829c\u68a7\u543e\u5434\u6bcb\u6b66\u4e94\u6342\u5348\u821e\u4f0d\u4fae\u575e\u620a\u96fe\u6664\u7269\u52ff\u52a1\u609f\u8bef\u5140\u4ef5\u9622\u90ac\u572c\u82b4\u5e91\u6003\u5fe4\u6d6f\u5be4\u8fd5\u59a9\u9a9b\u727e\u7110\u9e49\u9e5c\u8708\u92c8\u9f2f", - xi: "\u6614\u7199\u6790\u897f\u7852\u77fd\u6670\u563b\u5438\u9521\u727a\u7a00\u606f\u5e0c\u6089\u819d\u5915\u60dc\u7184\u70ef\u6eaa\u6c50\u7280\u6a84\u88ad\u5e2d\u4e60\u5ab3\u559c\u94e3\u6d17\u7cfb\u9699\u620f\u7ec6\u50d6\u516e\u96b0\u90d7\u831c\u8478\u84f0\u595a\u550f\u5f99\u9969\u960b\u6d60\u6dc5\u5c63\u5b09\u73ba\u6a28\u66e6\u89cb\u6b37\u71b9\u798a\u79a7\u94b8\u7699\u7a78\u8725\u87cb\u823e\u7fb2\u7c9e\u7fd5\u91af\u9f37", - xia: "\u778e\u867e\u5323\u971e\u8f96\u6687\u5ce1\u4fa0\u72ed\u4e0b\u53a6\u590f\u5413\u6380\u846d\u55c4\u72ce\u9050\u7455\u7856\u7615\u7f45\u9ee0", - xian: "\u9528\u5148\u4ed9\u9c9c\u7ea4\u54b8\u8d24\u8854\u8237\u95f2\u6d8e\u5f26\u5acc\u663e\u9669\u73b0\u732e\u53bf\u817a\u9985\u7fa1\u5baa\u9677\u9650\u7ebf\u51bc\u85d3\u5c98\u7303\u66b9\u5a34\u6c19\u7946\u9e47\u75eb\u86ac\u7b45\u7c7c\u9170\u8df9", - xiang: "\u76f8\u53a2\u9576\u9999\u7bb1\u8944\u6e58\u4e61\u7fd4\u7965\u8be6\u60f3\u54cd\u4eab\u9879\u5df7\u6a61\u50cf\u5411\u8c61\u8297\u8459\u9977\u5ea0\u9aa7\u7f03\u87d3\u9c9e\u98e8", - xiao: "\u8427\u785d\u9704\u524a\u54ee\u56a3\u9500\u6d88\u5bb5\u6dc6\u6653\u5c0f\u5b5d\u6821\u8096\u5578\u7b11\u6548\u54d3\u54bb\u5d24\u6f47\u900d\u9a81\u7ee1\u67ad\u67b5\u7b71\u7bab\u9b48", - xie: "\u6954\u4e9b\u6b47\u874e\u978b\u534f\u631f\u643a\u90aa\u659c\u80c1\u8c10\u5199\u68b0\u5378\u87f9\u61c8\u6cc4\u6cfb\u8c22\u5c51\u5055\u4eb5\u52f0\u71ee\u85a4\u64b7\u5ee8\u7023\u9082\u7ec1\u7f2c\u69ad\u698d\u6b59\u8e9e", - xin: "\u85aa\u82af\u950c\u6b23\u8f9b\u65b0\u5ffb\u5fc3\u4fe1\u8845\u56df\u99a8\u8398\u6b46\u94fd\u946b", - xing: "\u661f\u8165\u7329\u60fa\u5174\u5211\u578b\u5f62\u90a2\u884c\u9192\u5e78\u674f\u6027\u59d3\u9649\u8347\u8365\u64e4\u60bb\u784e", - xiong: "\u5144\u51f6\u80f8\u5308\u6c79\u96c4\u718a\u828e", - xiu: "\u4f11\u4fee\u7f9e\u673d\u55c5\u9508\u79c0\u8896\u7ee3\u83a0\u5cab\u9990\u5ea5\u9e3a\u8c85\u9af9", - xu: "\u589f\u620c\u9700\u865a\u5618\u987b\u5f90\u8bb8\u84c4\u9157\u53d9\u65ed\u5e8f\u755c\u6064\u7d6e\u5a7f\u7eea\u7eed\u8bb4\u8be9\u5729\u84ff\u6035\u6d2b\u6e86\u987c\u6829\u7166\u7809\u76f1\u80e5\u7cc8\u9191", - xuan: "\u8f69\u55a7\u5ba3\u60ac\u65cb\u7384\u9009\u7663\u7729\u7eda\u5107\u8c16\u8431\u63ce\u9994\u6ceb\u6d35\u6e32\u6f29\u7487\u6966\u6684\u70ab\u714a\u78b9\u94c9\u955f\u75c3", - xue: "\u9774\u859b\u5b66\u7a74\u96ea\u8840\u5671\u6cf6\u9cd5", - xun: "\u52cb\u718f\u5faa\u65ec\u8be2\u5bfb\u9a6f\u5de1\u6b89\u6c5b\u8bad\u8baf\u900a\u8fc5\u5dfd\u57d9\u8340\u85b0\u5ccb\u5f87\u6d54\u66db\u7aa8\u91ba\u9c9f", - ya: "\u538b\u62bc\u9e26\u9e2d\u5440\u4e2b\u82bd\u7259\u869c\u5d16\u8859\u6daf\u96c5\u54d1\u4e9a\u8bb6\u4f22\u63e0\u5416\u5c88\u8fd3\u5a05\u740a\u6860\u6c29\u7811\u775a\u75d6", - yan: "\u7109\u54bd\u9609\u70df\u6df9\u76d0\u4e25\u7814\u8712\u5ca9\u5ef6\u8a00\u989c\u960e\u708e\u6cbf\u5944\u63a9\u773c\u884d\u6f14\u8273\u5830\u71d5\u538c\u781a\u96c1\u5501\u5f66\u7130\u5bb4\u8c1a\u9a8c\u53a3\u9765\u8d5d\u4fe8\u5043\u5156\u8ba0\u8c33\u90fe\u9122\u82ab\u83f8\u5d26\u6079\u95eb\u960f\u6d07\u6e6e\u6edf\u598d\u5ae3\u7430\u664f\u80ed\u814c\u7131\u7f68\u7b75\u917d\u9b47\u990d\u9f39", - yang: "\u6b83\u592e\u9e2f\u79e7\u6768\u626c\u4f6f\u75a1\u7f8a\u6d0b\u9633\u6c27\u4ef0\u75d2\u517b\u6837\u6f3e\u5f89\u600f\u6cf1\u7080\u70ca\u6059\u86d8\u9785", - yao: "\u9080\u8170\u5996\u7476\u6447\u5c27\u9065\u7a91\u8c23\u59da\u54ac\u8200\u836f\u8981\u8000\u592d\u723b\u5406\u5d3e\u5fad\u7039\u5e7a\u73e7\u6773\u66dc\u80b4\u9e5e\u7a88\u7e47\u9cd0", - ye: "\u6930\u564e\u8036\u7237\u91ce\u51b6\u4e5f\u9875\u6396\u4e1a\u53f6\u66f3\u814b\u591c\u6db2\u8c12\u90ba\u63f6\u9980\u6654\u70e8\u94d8", - yi: "\u4e00\u58f9\u533b\u63d6\u94f1\u4f9d\u4f0a\u8863\u9890\u5937\u9057\u79fb\u4eea\u80f0\u7591\u6c82\u5b9c\u59e8\u5f5d\u6905\u8681\u501a\u5df2\u4e59\u77e3\u4ee5\u827a\u6291\u6613\u9091\u5c79\u4ebf\u5f79\u81c6\u9038\u8084\u75ab\u4ea6\u88d4\u610f\u6bc5\u5fc6\u4e49\u76ca\u6ea2\u8be3\u8bae\u8c0a\u8bd1\u5f02\u7ffc\u7fcc\u7ece\u5208\u5293\u4f7e\u8bd2\u572a\u572f\u57f8\u61ff\u82e1\u858f\u5f08\u5955\u6339\u5f0b\u5453\u54a6\u54bf\u566b\u5cc4\u5db7\u7317\u9974\u603f\u6021\u6092\u6f2a\u8fe4\u9a7f\u7f22\u6baa\u8d3b\u65d6\u71a0\u9487\u9552\u9571\u75cd\u7617\u7654\u7fca\u8864\u8734\u8223\u7fbf\u7ff3\u914f\u9edf", - yin: "\u8335\u836b\u56e0\u6bb7\u97f3\u9634\u59fb\u541f\u94f6\u6deb\u5bc5\u996e\u5c39\u5f15\u9690\u5370\u80e4\u911e\u5819\u831a\u5591\u72fa\u5924\u6c24\u94df\u763e\u8693\u972a\u9f88", - ying: "\u82f1\u6a31\u5a74\u9e70\u5e94\u7f28\u83b9\u8424\u8425\u8367\u8747\u8fce\u8d62\u76c8\u5f71\u9896\u786c\u6620\u5b34\u90e2\u8314\u83ba\u8426\u6484\u5624\u81ba\u6ee2\u6f46\u701b\u745b\u748e\u6979\u9e66\u763f\u988d\u7f42", - yo: "\u54df\u5537", - yong: "\u62e5\u4f63\u81c3\u75c8\u5eb8\u96cd\u8e0a\u86f9\u548f\u6cf3\u6d8c\u6c38\u607f\u52c7\u7528\u4fd1\u58c5\u5889\u6175\u9095\u955b\u752c\u9cd9\u9954", - you: "\u5e7d\u4f18\u60a0\u5fe7\u5c24\u7531\u90ae\u94c0\u72b9\u6cb9\u6e38\u9149\u6709\u53cb\u53f3\u4f51\u91c9\u8bf1\u53c8\u5e7c\u5363\u6538\u4f91\u83b8\u5466\u56ff\u5ba5\u67da\u7337\u7256\u94d5\u75a3\u8763\u9c7f\u9edd\u9f2c", - yu: "\u8fc2\u6de4\u4e8e\u76c2\u6986\u865e\u611a\u8206\u4f59\u4fde\u903e\u9c7c\u6109\u6e1d\u6e14\u9685\u4e88\u5a31\u96e8\u4e0e\u5c7f\u79b9\u5b87\u8bed\u7fbd\u7389\u57df\u828b\u90c1\u5401\u9047\u55bb\u5cea\u5fa1\u6108\u6b32\u72f1\u80b2\u8a89\u6d74\u5bd3\u88d5\u9884\u8c6b\u9a6d\u79ba\u6bd3\u4f1b\u4fe3\u8c00\u8c15\u8438\u84e3\u63c4\u5581\u5704\u5709\u5d5b\u72f3\u996b\u5ebe\u9608\u59aa\u59a4\u7ea1\u745c\u6631\u89ce\u8174\u6b24\u65bc\u715c\u71e0\u807f\u94b0\u9e46\u7610\u7600\u7ab3\u8753\u7afd\u8201\u96e9\u9f89", - yuan: "\u9e33\u6e0a\u51a4\u5143\u57a3\u8881\u539f\u63f4\u8f95\u56ed\u5458\u5706\u733f\u6e90\u7f18\u8fdc\u82d1\u613f\u6028\u9662\u586c\u6c85\u5a9b\u7457\u6a7c\u7230\u7722\u9e22\u8788\u9f0b", - yue: "\u66f0\u7ea6\u8d8a\u8dc3\u94a5\u5cb3\u7ca4\u6708\u60a6\u9605\u9fa0\u6a3e\u5216\u94ba", - yun: "\u8018\u4e91\u90e7\u5300\u9668\u5141\u8fd0\u8574\u915d\u6655\u97f5\u5b55\u90d3\u82b8\u72c1\u607d\u7ead\u6b92\u6600\u6c32", - za: "\u531d\u7838\u6742\u62f6\u5482", - zai: "\u683d\u54c9\u707e\u5bb0\u8f7d\u518d\u5728\u54b1\u5d3d\u753e", - zan: "\u6512\u6682\u8d5e\u74d2\u661d\u7c2a\u7ccc\u8db1\u933e", - zang: "\u8d43\u810f\u846c\u5958\u6215\u81e7", - zao: "\u906d\u7cdf\u51ff\u85fb\u67a3\u65e9\u6fa1\u86a4\u8e81\u566a\u9020\u7682\u7076\u71e5\u5523\u7f2b", - ze: "\u8d23\u62e9\u5219\u6cfd\u4ec4\u8d5c\u5567\u8fee\u6603\u7b2e\u7ba6\u8234", - zei: "\u8d3c", - zen: "\u600e\u8c2e", - zeng: "\u589e\u618e\u66fe\u8d60\u7f2f\u7511\u7f7e\u9503", - zha: "\u624e\u55b3\u6e23\u672d\u8f67\u94e1\u95f8\u7728\u6805\u69a8\u548b\u4e4d\u70b8\u8bc8\u63f8\u5412\u54a4\u54f3\u600d\u781f\u75c4\u86b1\u9f44", - zhai: "\u6458\u658b\u5b85\u7a84\u503a\u5be8\u7826", - zhan: "\u77bb\u6be1\u8a79\u7c98\u6cbe\u76cf\u65a9\u8f97\u5d2d\u5c55\u8638\u6808\u5360\u6218\u7ad9\u6e5b\u7efd\u8c35\u640c\u65c3", - zhang: "\u6a1f\u7ae0\u5f70\u6f33\u5f20\u638c\u6da8\u6756\u4e08\u5e10\u8d26\u4ed7\u80c0\u7634\u969c\u4ec9\u9123\u5e5b\u5d82\u7350\u5adc\u748b\u87d1", - zhao: "\u62db\u662d\u627e\u6cbc\u8d75\u7167\u7f69\u5146\u8087\u53ec\u722a\u8bcf\u68f9\u948a\u7b0a", - zhe: "\u906e\u6298\u54f2\u86f0\u8f99\u8005\u9517\u8517\u8fd9\u6d59\u8c2a\u966c\u67d8\u8f84\u78d4\u9e67\u891a\u8707\u8d6d", - zhen: "\u73cd\u659f\u771f\u7504\u7827\u81fb\u8d1e\u9488\u4fa6\u6795\u75b9\u8bca\u9707\u632f\u9547\u9635\u7f1c\u6862\u699b\u8f78\u8d48\u80d7\u6715\u796f\u755b\u9e29", - zheng: "\u84b8\u6323\u7741\u5f81\u72f0\u4e89\u6014\u6574\u62ef\u6b63\u653f\u5e27\u75c7\u90d1\u8bc1\u8be4\u5ce5\u94b2\u94ee\u7b5d", - zhi: "\u829d\u679d\u652f\u5431\u8718\u77e5\u80a2\u8102\u6c41\u4e4b\u7ec7\u804c\u76f4\u690d\u6b96\u6267\u503c\u4f84\u5740\u6307\u6b62\u8dbe\u53ea\u65e8\u7eb8\u5fd7\u631a\u63b7\u81f3\u81f4\u7f6e\u5e1c\u5cd9\u5236\u667a\u79e9\u7a1a\u8d28\u7099\u75d4\u6ede\u6cbb\u7a92\u536e\u965f\u90c5\u57f4\u82b7\u646d\u5e19\u5fee\u5f58\u54ab\u9a98\u6809\u67b3\u6800\u684e\u8f75\u8f7e\u6534\u8d3d\u81a3\u7949\u7957\u9ef9\u96c9\u9e37\u75e3\u86ed\u7d77\u916f\u8dd6\u8e2c\u8e2f\u8c78\u89ef", - zhong: "\u4e2d\u76c5\u5fe0\u949f\u8877\u7ec8\u79cd\u80bf\u91cd\u4ef2\u4f17\u51a2\u953a\u87bd\u8202\u822f\u8e35", - zhou: "\u821f\u5468\u5dde\u6d32\u8bcc\u7ca5\u8f74\u8098\u5e1a\u5492\u76b1\u5b99\u663c\u9aa4\u5544\u7740\u501c\u8bf9\u836e\u9b3b\u7ea3\u80c4\u78a1\u7c40\u8233\u914e\u9cb7", - zhu: "\u73e0\u682a\u86db\u6731\u732a\u8bf8\u8bdb\u9010\u7af9\u70db\u716e\u62c4\u77a9\u5631\u4e3b\u8457\u67f1\u52a9\u86c0\u8d2e\u94f8\u7b51\u4f4f\u6ce8\u795d\u9a7b\u4f2b\u4f8f\u90be\u82ce\u8331\u6d19\u6e1a\u6f74\u9a7a\u677c\u69e0\u6a65\u70b7\u94e2\u75b0\u7603\u86b0\u7afa\u7bb8\u7fe5\u8e85\u9e88", - zhua: "\u6293", - zhuai: "\u62fd", - zhuan: "\u4e13\u7816\u8f6c\u64b0\u8d5a\u7bc6\u629f\u556d\u989b", - zhuang: "\u6869\u5e84\u88c5\u5986\u649e\u58ee\u72b6\u4e2c", - zhui: "\u690e\u9525\u8ffd\u8d58\u5760\u7f00\u8411\u9a93\u7f12", - zhun: "\u8c06\u51c6", - zhuo: "\u6349\u62d9\u5353\u684c\u7422\u8301\u914c\u707c\u6d4a\u502c\u8bfc\u5ef4\u855e\u64e2\u555c\u6d5e\u6dbf\u6753\u712f\u799a\u65ab", - zi: "\u5179\u54a8\u8d44\u59ff\u6ecb\u6dc4\u5b5c\u7d2b\u4ed4\u7c7d\u6ed3\u5b50\u81ea\u6e0d\u5b57\u8c18\u5d6b\u59ca\u5b73\u7f01\u6893\u8f8e\u8d40\u6063\u7726\u9531\u79ed\u8014\u7b2b\u7ca2\u89dc\u8a3e\u9cbb\u9aed", - zong: "\u9b03\u68d5\u8e2a\u5b97\u7efc\u603b\u7eb5\u8159\u7cbd", - zou: "\u90b9\u8d70\u594f\u63cd\u9139\u9cb0", - zu: "\u79df\u8db3\u5352\u65cf\u7956\u8bc5\u963b\u7ec4\u4fce\u83f9\u5550\u5f82\u9a75\u8e74", - zuan: "\u94bb\u7e82\u6525\u7f35", - zui: "\u5634\u9189\u6700\u7f6a", - zun: "\u5c0a\u9075\u6499\u6a3d\u9cdf", - zuo: "\u6628\u5de6\u4f50\u67de\u505a\u4f5c\u5750\u5ea7\u961d\u963c\u80d9\u795a\u9162", - cou: "\u85ae\u6971\u8f8f\u8160", - nang: "\u652e\u54dd\u56d4\u9995\u66e9", - o: "\u5594", - dia: "\u55f2", - chuai: "\u562c\u81aa\u8e39", - cen: "\u5c91\u6d94", - diu: "\u94e5", - nou: "\u8028", - fou: "\u7f36", - bia: "\u9adf" - }; - - function c(f, e) - { - for (var g in d) - { - if (d[g].indexOf(f) != -1) - { - return a(g); - break - } - } - return false - } - - function a(e) - { - if (e.length > 0) - { - var g = e.substr(0, 1).toUpperCase();//受字母转成了大写 - var f = e.substr(1, e.length); - return g + f + "-"; - } - } -})(jQuery); \ No newline at end of file diff --git a/src/main/resources/static/plugins/jquery-tageditor/jquery.caret.min.js b/src/main/resources/static/plugins/jquery-tageditor/jquery.caret.min.js deleted file mode 100644 index 0f9ef48d6..000000000 --- a/src/main/resources/static/plugins/jquery-tageditor/jquery.caret.min.js +++ /dev/null @@ -1,2 +0,0 @@ -// http://code.accursoft.com/caret - 1.3.3 -!function(e){e.fn.caret=function(e){var t=this[0],n="true"===t.contentEditable;if(0==arguments.length){if(window.getSelection){if(n){t.focus();var o=window.getSelection().getRangeAt(0),r=o.cloneRange();return r.selectNodeContents(t),r.setEnd(o.endContainer,o.endOffset),r.toString().length}return t.selectionStart}if(document.selection){if(t.focus(),n){var o=document.selection.createRange(),r=document.body.createTextRange();return r.moveToElementText(t),r.setEndPoint("EndToEnd",o),r.text.length}var e=0,c=t.createTextRange(),r=document.selection.createRange().duplicate(),a=r.getBookmark();for(c.moveToBookmark(a);0!==c.moveStart("character",-1);)e++;return e}return t.selectionStart?t.selectionStart:0}if(-1==e&&(e=this[n?"text":"val"]().length),window.getSelection)n?(t.focus(),window.getSelection().collapse(t.firstChild,e)):t.setSelectionRange(e,e);else if(document.body.createTextRange)if(n){var c=document.body.createTextRange();c.moveToElementText(t),c.moveStart("character",e),c.collapse(!0),c.select()}else{var c=t.createTextRange();c.move("character",e),c.select()}return n||t.focus(),e}}(jQuery); diff --git a/src/main/resources/static/plugins/layer/mobile/layer.js b/src/main/resources/static/plugins/layer/mobile/layer.js deleted file mode 100755 index f9cf69313..000000000 --- a/src/main/resources/static/plugins/layer/mobile/layer.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! layer mobile-v2.0.0 Web弹层组件 MIT License http://layer.layui.com/mobile By 贤心 */ - ;!function(e){"use strict";var t=document,n="querySelectorAll",i="getElementsByClassName",a=function(e){return t[n](e)},s={type:0,shade:!0,shadeClose:!0,fixed:!0,anim:"scale"},l={extend:function(e){var t=JSON.parse(JSON.stringify(s));for(var n in e)t[n]=e[n];return t},timer:{},end:{}};l.touch=function(e,t){e.addEventListener("click",function(e){t.call(this,e)},!1)};var r=0,o=["layui-m-layer"],c=function(e){var t=this;t.config=l.extend(e),t.view()};c.prototype.view=function(){var e=this,n=e.config,s=t.createElement("div");e.id=s.id=o[0]+r,s.setAttribute("class",o[0]+" "+o[0]+(n.type||0)),s.setAttribute("index",r);var l=function(){var e="object"==typeof n.title;return n.title?'

        '+(e?n.title[0]:n.title)+"

        ":""}(),c=function(){"string"==typeof n.btn&&(n.btn=[n.btn]);var e,t=(n.btn||[]).length;return 0!==t&&n.btn?(e=''+n.btn[0]+"",2===t&&(e=''+n.btn[1]+""+e),'
        '+e+"
        "):""}();if(n.fixed||(n.top=n.hasOwnProperty("top")?n.top:100,n.style=n.style||"",n.style+=" top:"+(t.body.scrollTop+n.top)+"px"),2===n.type&&(n.content='

        '+(n.content||"")+"

        "),n.skin&&(n.anim="up"),"msg"===n.skin&&(n.shade=!1),s.innerHTML=(n.shade?"
        ':"")+'
        "+l+'
        '+n.content+"
        "+c+"
        ",!n.type||2===n.type){var d=t[i](o[0]+n.type),y=d.length;y>=1&&layer.close(d[0].getAttribute("index"))}document.body.appendChild(s);var u=e.elem=a("#"+e.id)[0];n.success&&n.success(u),e.index=r++,e.action(n,u)},c.prototype.action=function(e,t){var n=this;e.time&&(l.timer[n.index]=setTimeout(function(){layer.close(n.index)},1e3*e.time));var a=function(){var t=this.getAttribute("type");0==t?(e.no&&e.no(),layer.close(n.index)):e.yes?e.yes(n.index):layer.close(n.index)};if(e.btn)for(var s=t[i]("layui-m-layerbtn")[0].children,r=s.length,o=0;odiv{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;height:50px;line-height:50px;font-size:0;border-top:1px solid #D0D0D0;background-color:#F2F2F2}.layui-m-layerbtn span{display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;font-size:14px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40AFFE}.layui-m-layerbtn span[no]{border-right:1px solid #D0D0D0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#F6F6F6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#FD482C;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px} \ No newline at end of file diff --git a/src/main/resources/static/plugins/loaders/loaders.css b/src/main/resources/static/plugins/loaders/loaders.css deleted file mode 100755 index ca279c52f..000000000 --- a/src/main/resources/static/plugins/loaders/loaders.css +++ /dev/null @@ -1,1869 +0,0 @@ -/** - * - * All animations must live in their own file - * in the animations directory and be included - * here. - * - */ -/** - * Styles shared by multiple animations - */ -@-webkit-keyframes scale { - 0% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 1; } - - 45% { - -webkit-transform: scale(0.1); - transform: scale(0.1); - opacity: 0.7; } - - 80% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 1; } } -@keyframes scale { - 0% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 1; } - - 45% { - -webkit-transform: scale(0.1); - transform: scale(0.1); - opacity: 0.7; } - - 80% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 1; } } - -.ball-pulse > div:nth-child(0) { - -webkit-animation: scale 0.75s 0s infinite cubic-bezier(.2, .68, .18, 1.08); - animation: scale 0.75s 0s infinite cubic-bezier(.2, .68, .18, 1.08); } -.ball-pulse > div:nth-child(1) { - -webkit-animation: scale 0.75s 0.12s infinite cubic-bezier(.2, .68, .18, 1.08); - animation: scale 0.75s 0.12s infinite cubic-bezier(.2, .68, .18, 1.08); } -.ball-pulse > div:nth-child(2) { - -webkit-animation: scale 0.75s 0.24s infinite cubic-bezier(.2, .68, .18, 1.08); - animation: scale 0.75s 0.24s infinite cubic-bezier(.2, .68, .18, 1.08); } -.ball-pulse > div:nth-child(3) { - -webkit-animation: scale 0.75s 0.36s infinite cubic-bezier(.2, .68, .18, 1.08); - animation: scale 0.75s 0.36s infinite cubic-bezier(.2, .68, .18, 1.08); } -.ball-pulse > div { - background-color: #fff; - width: 15px; - height: 15px; - border-radius: 100%; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - display: inline-block; } - -@-webkit-keyframes ball-pulse-sync { - 33% { - -webkit-transform: translateY(10px); - transform: translateY(10px); } - - 66% { - -webkit-transform: translateY(-10px); - transform: translateY(-10px); } - - 100% { - -webkit-transform: translateY(0); - transform: translateY(0); } } - -@keyframes ball-pulse-sync { - 33% { - -webkit-transform: translateY(10px); - transform: translateY(10px); } - - 66% { - -webkit-transform: translateY(-10px); - transform: translateY(-10px); } - - 100% { - -webkit-transform: translateY(0); - transform: translateY(0); } } - -.ball-pulse-sync > div:nth-child(0) { - -webkit-animation: ball-pulse-sync 0.6s 0s infinite ease-in-out; - animation: ball-pulse-sync 0.6s 0s infinite ease-in-out; } -.ball-pulse-sync > div:nth-child(1) { - -webkit-animation: ball-pulse-sync 0.6s 0.07s infinite ease-in-out; - animation: ball-pulse-sync 0.6s 0.07s infinite ease-in-out; } -.ball-pulse-sync > div:nth-child(2) { - -webkit-animation: ball-pulse-sync 0.6s 0.14s infinite ease-in-out; - animation: ball-pulse-sync 0.6s 0.14s infinite ease-in-out; } -.ball-pulse-sync > div:nth-child(3) { - -webkit-animation: ball-pulse-sync 0.6s 0.21s infinite ease-in-out; - animation: ball-pulse-sync 0.6s 0.21s infinite ease-in-out; } -.ball-pulse-sync > div { - background-color: #fff; - width: 15px; - height: 15px; - border-radius: 100%; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - display: inline-block; } - -@-webkit-keyframes ball-scale { - 0% { - -webkit-transform: scale(0); - transform: scale(0); } - - 100% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 0; } } - -@keyframes ball-scale { - 0% { - -webkit-transform: scale(0); - transform: scale(0); } - - 100% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 0; } } - -.ball-scale > div { - background-color: #fff; - width: 15px; - height: 15px; - border-radius: 100%; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - display: inline-block; - height: 60px; - width: 60px; - -webkit-animation: ball-scale 1s 0s ease-in-out infinite; - animation: ball-scale 1s 0s ease-in-out infinite; } - -@-webkit-keyframes rotate { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - - 50% { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); } - - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); } } - -@keyframes rotate { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - - 50% { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); } - - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); } } - -.ball-rotate { - position: relative; } - .ball-rotate > div { - background-color: #fff; - width: 15px; - height: 15px; - border-radius: 100%; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - position: relative; } - .ball-rotate > div:first-child { - -webkit-animation: rotate 1s 0s cubic-bezier(.7, -.13, .22, .86) infinite; - animation: rotate 1s 0s cubic-bezier(.7, -.13, .22, .86) infinite; } - .ball-rotate > div:before, .ball-rotate > div:after { - background-color: #fff; - width: 15px; - height: 15px; - border-radius: 100%; - margin: 2px; - content: ""; - position: absolute; - opacity: 0.8; } - .ball-rotate > div:before { - top: 0px; - left: -28px; } - .ball-rotate > div:after { - top: 0px; - left: 25px; } - -@keyframes rotate { - 0% { - -webkit-transform: rotate(0deg) scale(1); - transform: rotate(0deg) scale(1); } - - 50% { - -webkit-transform: rotate(180deg) scale(0.6); - transform: rotate(180deg) scale(0.6); } - - 100% { - -webkit-transform: rotate(360deg) scale(1); - transform: rotate(360deg) scale(1); } } - -.ball-clip-rotate > div { - background-color: #fff; - width: 15px; - height: 15px; - border-radius: 100%; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - border: 2px solid #fff; - border-bottom-color: transparent; - height: 25px; - width: 25px; - background: transparent !important; - display: inline-block; - -webkit-animation: rotate 0.75s 0s linear infinite; - animation: rotate 0.75s 0s linear infinite; } - -@keyframes rotate { - 0% { - -webkit-transform: rotate(0deg) scale(1); - transform: rotate(0deg) scale(1); } - - 50% { - -webkit-transform: rotate(180deg) scale(0.6); - transform: rotate(180deg) scale(0.6); } - - 100% { - -webkit-transform: rotate(360deg) scale(1); - transform: rotate(360deg) scale(1); } } - -@keyframes scale { - 30% { - -webkit-transform: scale(0.3); - transform: scale(0.3); } - - 100% { - -webkit-transform: scale(1); - transform: scale(1); } } - -.ball-clip-rotate-pulse { - position: relative; - -webkit-transform: translateY(-15px); - -ms-transform: translateY(-15px); - transform: translateY(-15px); } - .ball-clip-rotate-pulse > div { - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - position: absolute; - top: 0px; - left: 0px; - border-radius: 100%; } - .ball-clip-rotate-pulse > div:first-child { - background: #fff; - height: 16px; - width: 16px; - top: 9px; - left: 9px; - -webkit-animation: scale 1s 0s cubic-bezier(.09, .57, .49, .9) infinite; - animation: scale 1s 0s cubic-bezier(.09, .57, .49, .9) infinite; } - .ball-clip-rotate-pulse > div:last-child { - position: absolute; - border: 2px solid #fff; - width: 30px; - height: 30px; - background: transparent; - border: 2px solid; - border-color: #fff transparent #fff transparent; - -webkit-animation: rotate 1s 0s cubic-bezier(.09, .57, .49, .9) infinite; - animation: rotate 1s 0s cubic-bezier(.09, .57, .49, .9) infinite; - -webkit-animation-duration: 1s; - animation-duration: 1s; } - -@keyframes rotate { - 0% { - -webkit-transform: rotate(0deg) scale(1); - transform: rotate(0deg) scale(1); } - - 50% { - -webkit-transform: rotate(180deg) scale(0.6); - transform: rotate(180deg) scale(0.6); } - - 100% { - -webkit-transform: rotate(360deg) scale(1); - transform: rotate(360deg) scale(1); } } - -.ball-clip-rotate-multiple { - position: relative; } - .ball-clip-rotate-multiple > div { - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - position: absolute; - left: 0px; - top: 0px; - border: 2px solid #fff; - border-bottom-color: transparent; - border-top-color: transparent; - border-radius: 100%; - height: 35px; - width: 35px; - -webkit-animation: rotate 1s 0s ease-in-out infinite; - animation: rotate 1s 0s ease-in-out infinite; } - .ball-clip-rotate-multiple > div:last-child { - display: inline-block; - top: 10px; - left: 10px; - width: 15px; - height: 15px; - -webkit-animation-duration: 0.5s; - animation-duration: 0.5s; - border-color: #fff transparent #fff transparent; - -webkit-animation-direction: reverse; - animation-direction: reverse; } - -@-webkit-keyframes ball-scale-ripple { - 0% { - -webkit-transform: scale(0.1); - transform: scale(0.1); - opacity: 1; } - - 70% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 0.7; } - - 100% { - opacity: 0.0; } } - -@keyframes ball-scale-ripple { - 0% { - -webkit-transform: scale(0.1); - transform: scale(0.1); - opacity: 1; } - - 70% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 0.7; } - - 100% { - opacity: 0.0; } } - -.ball-scale-ripple > div { - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - height: 50px; - width: 50px; - border-radius: 100%; - border: 2px solid #fff; - -webkit-animation: ball-scale-ripple 1s 0s infinite cubic-bezier(.21, .53, .56, .8); - animation: ball-scale-ripple 1s 0s infinite cubic-bezier(.21, .53, .56, .8); } - -@-webkit-keyframes ball-scale-ripple-multiple { - 0% { - -webkit-transform: scale(0.1); - transform: scale(0.1); - opacity: 1; } - - 70% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 0.7; } - - 100% { - opacity: 0.0; } } - -@keyframes ball-scale-ripple-multiple { - 0% { - -webkit-transform: scale(0.1); - transform: scale(0.1); - opacity: 1; } - - 70% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 0.7; } - - 100% { - opacity: 0.0; } } - -.ball-scale-ripple-multiple { - position: relative; - -webkit-transform: translateY(-25px); - -ms-transform: translateY(-25px); - transform: translateY(-25px); } - .ball-scale-ripple-multiple > div:nth-child(0) { - -webkit-animation-delay: -0.2s; - animation-delay: -0.2s; } - .ball-scale-ripple-multiple > div:nth-child(1) { - -webkit-animation-delay: 0s; - animation-delay: 0s; } - .ball-scale-ripple-multiple > div:nth-child(2) { - -webkit-animation-delay: 0.2s; - animation-delay: 0.2s; } - .ball-scale-ripple-multiple > div:nth-child(3) { - -webkit-animation-delay: 0.4s; - animation-delay: 0.4s; } - .ball-scale-ripple-multiple > div { - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - position: absolute; - top: 0; - left: 0; - width: 50px; - height: 50px; - border-radius: 100%; - border: 2px solid #fff; - -webkit-animation: ball-scale-ripple-multiple 1.25s 0s infinite cubic-bezier(.21, .53, .56, .8); - animation: ball-scale-ripple-multiple 1.25s 0s infinite cubic-bezier(.21, .53, .56, .8); } - -@-webkit-keyframes ball-beat { - 50% { - opacity: 0.2; - -webkit-transform: scale(0.75); - transform: scale(0.75); } - - 100% { - opacity: 1; - -webkit-transform: scale(1); - transform: scale(1); } } - -@keyframes ball-beat { - 50% { - opacity: 0.2; - -webkit-transform: scale(0.75); - transform: scale(0.75); } - - 100% { - opacity: 1; - -webkit-transform: scale(1); - transform: scale(1); } } - -.ball-beat > div { - background-color: #fff; - width: 15px; - height: 15px; - border-radius: 100%; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - display: inline-block; - -webkit-animation: ball-beat 0.7s 0s infinite linear; - animation: ball-beat 0.7s 0s infinite linear; } - .ball-beat > div:nth-child(2n-1) { - -webkit-animation-delay: 0.35s !important; - animation-delay: 0.35s !important; } - -@-webkit-keyframes ball-scale-multiple { - 0% { - -webkit-transform: scale(0); - transform: scale(0); - opacity: 0; } - - 5% { - opacity: 1; } - - 100% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 0; } } - -@keyframes ball-scale-multiple { - 0% { - -webkit-transform: scale(0); - transform: scale(0); - opacity: 0; } - - 5% { - opacity: 1; } - - 100% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 0; } } - -.ball-scale-multiple { - position: relative; - -webkit-transform: translateY(-30px); - -ms-transform: translateY(-30px); - transform: translateY(-30px); } - .ball-scale-multiple > div:nth-child(2) { - -webkit-animation-delay: 0.2s; - animation-delay: 0.2s; } - .ball-scale-multiple > div:nth-child(3) { - -webkit-animation-delay: 0.4s; - animation-delay: 0.4s; } - .ball-scale-multiple > div { - background-color: #fff; - width: 15px; - height: 15px; - border-radius: 100%; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - position: absolute; - left: 0px; - top: 0px; - opacity: 0; - margin: 0; - width: 60px; - height: 60px; - -webkit-animation: ball-scale-multiple 1s 0s linear infinite; - animation: ball-scale-multiple 1s 0s linear infinite; } - -@-webkit-keyframes ball-triangle-path-1 { - 33% { - -webkit-transform: translate(25px, -50px); - transform: translate(25px, -50px); } - - 66% { - -webkit-transform: translate(50px, 0px); - transform: translate(50px, 0px); } - - 100% { - -webkit-transform: translate(0px, 0px); - transform: translate(0px, 0px); } } - -@keyframes ball-triangle-path-1 { - 33% { - -webkit-transform: translate(25px, -50px); - transform: translate(25px, -50px); } - - 66% { - -webkit-transform: translate(50px, 0px); - transform: translate(50px, 0px); } - - 100% { - -webkit-transform: translate(0px, 0px); - transform: translate(0px, 0px); } } - -@-webkit-keyframes ball-triangle-path-2 { - 33% { - -webkit-transform: translate(25px, 50px); - transform: translate(25px, 50px); } - - 66% { - -webkit-transform: translate(-25px, 50px); - transform: translate(-25px, 50px); } - - 100% { - -webkit-transform: translate(0px, 0px); - transform: translate(0px, 0px); } } - -@keyframes ball-triangle-path-2 { - 33% { - -webkit-transform: translate(25px, 50px); - transform: translate(25px, 50px); } - - 66% { - -webkit-transform: translate(-25px, 50px); - transform: translate(-25px, 50px); } - - 100% { - -webkit-transform: translate(0px, 0px); - transform: translate(0px, 0px); } } - -@-webkit-keyframes ball-triangle-path-3 { - 33% { - -webkit-transform: translate(-50px, 0px); - transform: translate(-50px, 0px); } - - 66% { - -webkit-transform: translate(-25px, -50px); - transform: translate(-25px, -50px); } - - 100% { - -webkit-transform: translate(0px, 0px); - transform: translate(0px, 0px); } } - -@keyframes ball-triangle-path-3 { - 33% { - -webkit-transform: translate(-50px, 0px); - transform: translate(-50px, 0px); } - - 66% { - -webkit-transform: translate(-25px, -50px); - transform: translate(-25px, -50px); } - - 100% { - -webkit-transform: translate(0px, 0px); - transform: translate(0px, 0px); } } - -.ball-triangle-path { - position: relative; - -webkit-transform: translate(-25px, -25px); - -ms-transform: translate(-25px, -25px); - transform: translate(-25px, -25px); } - .ball-triangle-path > div:nth-child(1) { - -webkit-animation-name: ball-triangle-path-1; - animation-name: ball-triangle-path-1; - -webkit-animation-delay: 0; - animation-delay: 0; - -webkit-animation-duration: 2s; - animation-duration: 2s; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; } - .ball-triangle-path > div:nth-child(2) { - -webkit-animation-name: ball-triangle-path-2; - animation-name: ball-triangle-path-2; - -webkit-animation-delay: 0; - animation-delay: 0; - -webkit-animation-duration: 2s; - animation-duration: 2s; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; } - .ball-triangle-path > div:nth-child(3) { - -webkit-animation-name: ball-triangle-path-3; - animation-name: ball-triangle-path-3; - -webkit-animation-delay: 0; - animation-delay: 0; - -webkit-animation-duration: 2s; - animation-duration: 2s; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; } - .ball-triangle-path > div { - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - position: absolute; - width: 10px; - height: 10px; - border-radius: 100%; - border: 1px solid #fff; } - .ball-triangle-path > div:nth-of-type(1) { - top: 50px; } - .ball-triangle-path > div:nth-of-type(2) { - left: 25px; } - .ball-triangle-path > div:nth-of-type(3) { - top: 50px; - left: 50px; } - -@-webkit-keyframes ball-pulse-rise-even { - 0% { - -webkit-transform: scale(1.1); - transform: scale(1.1); } - - 25% { - -webkit-transform: translateY(-30px); - transform: translateY(-30px); } - - 50% { - -webkit-transform: scale(0.4); - transform: scale(0.4); } - - 75% { - -webkit-transform: translateY(30px); - transform: translateY(30px); } - - 100% { - -webkit-transform: translateY(0); - transform: translateY(0); - -webkit-transform: scale(1); - transform: scale(1); } } - -@keyframes ball-pulse-rise-even { - 0% { - -webkit-transform: scale(1.1); - transform: scale(1.1); } - - 25% { - -webkit-transform: translateY(-30px); - transform: translateY(-30px); } - - 50% { - -webkit-transform: scale(0.4); - transform: scale(0.4); } - - 75% { - -webkit-transform: translateY(30px); - transform: translateY(30px); } - - 100% { - -webkit-transform: translateY(0); - transform: translateY(0); - -webkit-transform: scale(1); - transform: scale(1); } } - -@-webkit-keyframes ball-pulse-rise-odd { - 0% { - -webkit-transform: scale(0.4); - transform: scale(0.4); } - - 25% { - -webkit-transform: translateY(30px); - transform: translateY(30px); } - - 50% { - -webkit-transform: scale(1.1); - transform: scale(1.1); } - - 75% { - -webkit-transform: translateY(-30px); - transform: translateY(-30px); } - - 100% { - -webkit-transform: translateY(0); - transform: translateY(0); - -webkit-transform: scale(0.75); - transform: scale(0.75); } } - -@keyframes ball-pulse-rise-odd { - 0% { - -webkit-transform: scale(0.4); - transform: scale(0.4); } - - 25% { - -webkit-transform: translateY(30px); - transform: translateY(30px); } - - 50% { - -webkit-transform: scale(1.1); - transform: scale(1.1); } - - 75% { - -webkit-transform: translateY(-30px); - transform: translateY(-30px); } - - 100% { - -webkit-transform: translateY(0); - transform: translateY(0); - -webkit-transform: scale(0.75); - transform: scale(0.75); } } - -.ball-pulse-rise > div { - background-color: #fff; - width: 15px; - height: 15px; - border-radius: 100%; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - display: inline-block; - -webkit-animation-duration: 1s; - animation-duration: 1s; - -webkit-animation-timing-function: cubic-bezier(.15, .46, .9, .6); - animation-timing-function: cubic-bezier(.15, .46, .9, .6); - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; - -webkit-animation-delay: 0; - animation-delay: 0; } - .ball-pulse-rise > div:nth-child(2n) { - -webkit-animation-name: ball-pulse-rise-even; - animation-name: ball-pulse-rise-even; } - .ball-pulse-rise > div:nth-child(2n-1) { - -webkit-animation-name: ball-pulse-rise-odd; - animation-name: ball-pulse-rise-odd; } - -@-webkit-keyframes ball-grid-beat { - 50% { - opacity: 0.7; } - - 100% { - opacity: 1; } } - -@keyframes ball-grid-beat { - 50% { - opacity: 0.7; } - - 100% { - opacity: 1; } } - -.ball-grid-beat { - width: 57px; } - .ball-grid-beat > div:nth-child(1) { - -webkit-animation-delay: 0.36s; - animation-delay: 0.36s; - -webkit-animation-duration: 0.96s; - animation-duration: 0.96s; } - .ball-grid-beat > div:nth-child(2) { - -webkit-animation-delay: 0.4s; - animation-delay: 0.4s; - -webkit-animation-duration: 0.93s; - animation-duration: 0.93s; } - .ball-grid-beat > div:nth-child(3) { - -webkit-animation-delay: 0.68s; - animation-delay: 0.68s; - -webkit-animation-duration: 1.19s; - animation-duration: 1.19s; } - .ball-grid-beat > div:nth-child(4) { - -webkit-animation-delay: 0.41s; - animation-delay: 0.41s; - -webkit-animation-duration: 1.13s; - animation-duration: 1.13s; } - .ball-grid-beat > div:nth-child(5) { - -webkit-animation-delay: 0.71s; - animation-delay: 0.71s; - -webkit-animation-duration: 1.34s; - animation-duration: 1.34s; } - .ball-grid-beat > div:nth-child(6) { - -webkit-animation-delay: -0.15s; - animation-delay: -0.15s; - -webkit-animation-duration: 0.94s; - animation-duration: 0.94s; } - .ball-grid-beat > div:nth-child(7) { - -webkit-animation-delay: -0.12s; - animation-delay: -0.12s; - -webkit-animation-duration: 1.2s; - animation-duration: 1.2s; } - .ball-grid-beat > div:nth-child(8) { - -webkit-animation-delay: 0.01s; - animation-delay: 0.01s; - -webkit-animation-duration: 0.82s; - animation-duration: 0.82s; } - .ball-grid-beat > div:nth-child(9) { - -webkit-animation-delay: 0.32s; - animation-delay: 0.32s; - -webkit-animation-duration: 1.19s; - animation-duration: 1.19s; } - .ball-grid-beat > div { - background-color: #fff; - width: 15px; - height: 15px; - border-radius: 100%; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - display: inline-block; - float: left; - -webkit-animation-name: ball-grid-beat; - animation-name: ball-grid-beat; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; - -webkit-animation-delay: 0; - animation-delay: 0; } - -@-webkit-keyframes ball-grid-pulse { - 0% { - -webkit-transform: scale(1); - transform: scale(1); } - - 50% { - -webkit-transform: scale(0.5); - transform: scale(0.5); - opacity: 0.7; } - - 100% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 1; } } - -@keyframes ball-grid-pulse { - 0% { - -webkit-transform: scale(1); - transform: scale(1); } - - 50% { - -webkit-transform: scale(0.5); - transform: scale(0.5); - opacity: 0.7; } - - 100% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 1; } } - -.ball-grid-pulse { - width: 57px; } - .ball-grid-pulse > div:nth-child(1) { - -webkit-animation-delay: -0.06s; - animation-delay: -0.06s; - -webkit-animation-duration: 0.72s; - animation-duration: 0.72s; } - .ball-grid-pulse > div:nth-child(2) { - -webkit-animation-delay: 0.25s; - animation-delay: 0.25s; - -webkit-animation-duration: 1.02s; - animation-duration: 1.02s; } - .ball-grid-pulse > div:nth-child(3) { - -webkit-animation-delay: -0.17s; - animation-delay: -0.17s; - -webkit-animation-duration: 1.28s; - animation-duration: 1.28s; } - .ball-grid-pulse > div:nth-child(4) { - -webkit-animation-delay: 0.48s; - animation-delay: 0.48s; - -webkit-animation-duration: 1.42s; - animation-duration: 1.42s; } - .ball-grid-pulse > div:nth-child(5) { - -webkit-animation-delay: 0.31s; - animation-delay: 0.31s; - -webkit-animation-duration: 1.45s; - animation-duration: 1.45s; } - .ball-grid-pulse > div:nth-child(6) { - -webkit-animation-delay: 0.03s; - animation-delay: 0.03s; - -webkit-animation-duration: 1.18s; - animation-duration: 1.18s; } - .ball-grid-pulse > div:nth-child(7) { - -webkit-animation-delay: 0.46s; - animation-delay: 0.46s; - -webkit-animation-duration: 0.87s; - animation-duration: 0.87s; } - .ball-grid-pulse > div:nth-child(8) { - -webkit-animation-delay: 0.78s; - animation-delay: 0.78s; - -webkit-animation-duration: 1.45s; - animation-duration: 1.45s; } - .ball-grid-pulse > div:nth-child(9) { - -webkit-animation-delay: 0.45s; - animation-delay: 0.45s; - -webkit-animation-duration: 1.06s; - animation-duration: 1.06s; } - .ball-grid-pulse > div { - background-color: #fff; - width: 15px; - height: 15px; - border-radius: 100%; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - display: inline-block; - float: left; - -webkit-animation-name: ball-grid-pulse; - animation-name: ball-grid-pulse; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; - -webkit-animation-delay: 0; - animation-delay: 0; } - -@-webkit-keyframes ball-spin-fade-loader { - 50% { - opacity: 0.3; - -webkit-transform: scale(0.4); - transform: scale(0.4); } - - 100% { - opacity: 1; - -webkit-transform: scale(1); - transform: scale(1); } } - -@keyframes ball-spin-fade-loader { - 50% { - opacity: 0.3; - -webkit-transform: scale(0.4); - transform: scale(0.4); } - - 100% { - opacity: 1; - -webkit-transform: scale(1); - transform: scale(1); } } - -.ball-spin-fade-loader { - position: relative; } - .ball-spin-fade-loader > div:nth-child(1) { - top: 25px; - left: 0; - -webkit-animation: ball-spin-fade-loader 1s 0s infinite linear; - animation: ball-spin-fade-loader 1s 0s infinite linear; } - .ball-spin-fade-loader > div:nth-child(2) { - top: 17.04545px; - left: 17.04545px; - -webkit-animation: ball-spin-fade-loader 1s 0.12s infinite linear; - animation: ball-spin-fade-loader 1s 0.12s infinite linear; } - .ball-spin-fade-loader > div:nth-child(3) { - top: 0; - left: 25px; - -webkit-animation: ball-spin-fade-loader 1s 0.24s infinite linear; - animation: ball-spin-fade-loader 1s 0.24s infinite linear; } - .ball-spin-fade-loader > div:nth-child(4) { - top: -17.04545px; - left: 17.04545px; - -webkit-animation: ball-spin-fade-loader 1s 0.36s infinite linear; - animation: ball-spin-fade-loader 1s 0.36s infinite linear; } - .ball-spin-fade-loader > div:nth-child(5) { - top: -25px; - left: 0; - -webkit-animation: ball-spin-fade-loader 1s 0.48s infinite linear; - animation: ball-spin-fade-loader 1s 0.48s infinite linear; } - .ball-spin-fade-loader > div:nth-child(6) { - top: -17.04545px; - left: -17.04545px; - -webkit-animation: ball-spin-fade-loader 1s 0.6s infinite linear; - animation: ball-spin-fade-loader 1s 0.6s infinite linear; } - .ball-spin-fade-loader > div:nth-child(7) { - top: 0; - left: -25px; - -webkit-animation: ball-spin-fade-loader 1s 0.72s infinite linear; - animation: ball-spin-fade-loader 1s 0.72s infinite linear; } - .ball-spin-fade-loader > div:nth-child(8) { - top: 17.04545px; - left: -17.04545px; - -webkit-animation: ball-spin-fade-loader 1s 0.84s infinite linear; - animation: ball-spin-fade-loader 1s 0.84s infinite linear; } - .ball-spin-fade-loader > div { - background-color: #fff; - width: 15px; - height: 15px; - border-radius: 100%; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - position: absolute; } - -@-webkit-keyframes ball-spin-loader { - 75% { - opacity: 0.2; } - - 100% { - opacity: 1; } } - -@keyframes ball-spin-loader { - 75% { - opacity: 0.2; } - - 100% { - opacity: 1; } } - -.ball-spin-loader { - position: relative; } - .ball-spin-loader > span:nth-child(1) { - top: 45px; - left: 0; - -webkit-animation: ball-spin-loader 2s 0.9s infinite linear; - animation: ball-spin-loader 2s 0.9s infinite linear; } - .ball-spin-loader > span:nth-child(2) { - top: 30.68182px; - left: 30.68182px; - -webkit-animation: ball-spin-loader 2s 1.8s infinite linear; - animation: ball-spin-loader 2s 1.8s infinite linear; } - .ball-spin-loader > span:nth-child(3) { - top: 0; - left: 45px; - -webkit-animation: ball-spin-loader 2s 2.7s infinite linear; - animation: ball-spin-loader 2s 2.7s infinite linear; } - .ball-spin-loader > span:nth-child(4) { - top: -30.68182px; - left: 30.68182px; - -webkit-animation: ball-spin-loader 2s 3.6s infinite linear; - animation: ball-spin-loader 2s 3.6s infinite linear; } - .ball-spin-loader > span:nth-child(5) { - top: -45px; - left: 0; - -webkit-animation: ball-spin-loader 2s 4.5s infinite linear; - animation: ball-spin-loader 2s 4.5s infinite linear; } - .ball-spin-loader > span:nth-child(6) { - top: -30.68182px; - left: -30.68182px; - -webkit-animation: ball-spin-loader 2s 5.4s infinite linear; - animation: ball-spin-loader 2s 5.4s infinite linear; } - .ball-spin-loader > span:nth-child(7) { - top: 0; - left: -45px; - -webkit-animation: ball-spin-loader 2s 6.3s infinite linear; - animation: ball-spin-loader 2s 6.3s infinite linear; } - .ball-spin-loader > span:nth-child(8) { - top: 30.68182px; - left: -30.68182px; - -webkit-animation: ball-spin-loader 2s 7.2s infinite linear; - animation: ball-spin-loader 2s 7.2s infinite linear; } - .ball-spin-loader > div { - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - position: absolute; - width: 15px; - height: 15px; - border-radius: 100%; - background: green; } - -@-webkit-keyframes ball-zig { - 33% { - -webkit-transform: translate(-15px, -30px); - transform: translate(-15px, -30px); } - - 66% { - -webkit-transform: translate(15px, -30px); - transform: translate(15px, -30px); } - - 100% { - -webkit-transform: translate(0, 0); - transform: translate(0, 0); } } - -@keyframes ball-zig { - 33% { - -webkit-transform: translate(-15px, -30px); - transform: translate(-15px, -30px); } - - 66% { - -webkit-transform: translate(15px, -30px); - transform: translate(15px, -30px); } - - 100% { - -webkit-transform: translate(0, 0); - transform: translate(0, 0); } } - -@-webkit-keyframes ball-zag { - 33% { - -webkit-transform: translate(15px, 30px); - transform: translate(15px, 30px); } - - 66% { - -webkit-transform: translate(-15px, 30px); - transform: translate(-15px, 30px); } - - 100% { - -webkit-transform: translate(0, 0); - transform: translate(0, 0); } } - -@keyframes ball-zag { - 33% { - -webkit-transform: translate(15px, 30px); - transform: translate(15px, 30px); } - - 66% { - -webkit-transform: translate(-15px, 30px); - transform: translate(-15px, 30px); } - - 100% { - -webkit-transform: translate(0, 0); - transform: translate(0, 0); } } - -.ball-zig-zag { - position: relative; - -webkit-transform: translate(-15px, -15px); - -ms-transform: translate(-15px, -15px); - transform: translate(-15px, -15px); } - .ball-zig-zag > div { - background-color: #fff; - width: 15px; - height: 15px; - border-radius: 100%; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - position: absolute; - margin-left: 15px; - top: 30px; - left: 30px; } - .ball-zig-zag > div:first-child { - -webkit-animation: ball-zig 0.7s 0s infinite linear; - animation: ball-zig 0.7s 0s infinite linear; } - .ball-zig-zag > div:last-child { - -webkit-animation: ball-zag 0.7s 0s infinite linear; - animation: ball-zag 0.7s 0s infinite linear; } - -@-webkit-keyframes ball-zig-deflect { - 17% { - -webkit-transform: translate(-15px, -30px); - transform: translate(-15px, -30px); } - - 34% { - -webkit-transform: translate(15px, -30px); - transform: translate(15px, -30px); } - - 50% { - -webkit-transform: translate(0, 0); - transform: translate(0, 0); } - - 67% { - -webkit-transform: translate(15px, -30px); - transform: translate(15px, -30px); } - - 84% { - -webkit-transform: translate(-15px, -30px); - transform: translate(-15px, -30px); } - - 100% { - -webkit-transform: translate(0, 0); - transform: translate(0, 0); } } - -@keyframes ball-zig-deflect { - 17% { - -webkit-transform: translate(-15px, -30px); - transform: translate(-15px, -30px); } - - 34% { - -webkit-transform: translate(15px, -30px); - transform: translate(15px, -30px); } - - 50% { - -webkit-transform: translate(0, 0); - transform: translate(0, 0); } - - 67% { - -webkit-transform: translate(15px, -30px); - transform: translate(15px, -30px); } - - 84% { - -webkit-transform: translate(-15px, -30px); - transform: translate(-15px, -30px); } - - 100% { - -webkit-transform: translate(0, 0); - transform: translate(0, 0); } } - -@-webkit-keyframes ball-zag-deflect { - 17% { - -webkit-transform: translate(15px, 30px); - transform: translate(15px, 30px); } - - 34% { - -webkit-transform: translate(-15px, 30px); - transform: translate(-15px, 30px); } - - 50% { - -webkit-transform: translate(0, 0); - transform: translate(0, 0); } - - 67% { - -webkit-transform: translate(-15px, 30px); - transform: translate(-15px, 30px); } - - 84% { - -webkit-transform: translate(15px, 30px); - transform: translate(15px, 30px); } - - 100% { - -webkit-transform: translate(0, 0); - transform: translate(0, 0); } } - -@keyframes ball-zag-deflect { - 17% { - -webkit-transform: translate(15px, 30px); - transform: translate(15px, 30px); } - - 34% { - -webkit-transform: translate(-15px, 30px); - transform: translate(-15px, 30px); } - - 50% { - -webkit-transform: translate(0, 0); - transform: translate(0, 0); } - - 67% { - -webkit-transform: translate(-15px, 30px); - transform: translate(-15px, 30px); } - - 84% { - -webkit-transform: translate(15px, 30px); - transform: translate(15px, 30px); } - - 100% { - -webkit-transform: translate(0, 0); - transform: translate(0, 0); } } - -.ball-zig-zag-deflect { - position: relative; - -webkit-transform: translate(-15px, -15px); - -ms-transform: translate(-15px, -15px); - transform: translate(-15px, -15px); } - .ball-zig-zag-deflect > div { - background-color: #fff; - width: 15px; - height: 15px; - border-radius: 100%; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - position: absolute; - margin-left: 15px; - top: 30px; - left: 30px; } - .ball-zig-zag-deflect > div:first-child { - -webkit-animation: ball-zig-deflect 1.5s 0s infinite linear; - animation: ball-zig-deflect 1.5s 0s infinite linear; } - .ball-zig-zag-deflect > div:last-child { - -webkit-animation: ball-zag-deflect 1.5s 0s infinite linear; - animation: ball-zag-deflect 1.5s 0s infinite linear; } - -/** - * Lines - */ -@-webkit-keyframes line-scale { - 0% { - -webkit-transform: scaley(1); - transform: scaley(1); } - - 50% { - -webkit-transform: scaley(0.4); - transform: scaley(0.4); } - - 100% { - -webkit-transform: scaley(1); - transform: scaley(1); } } -@keyframes line-scale { - 0% { - -webkit-transform: scaley(1); - transform: scaley(1); } - - 50% { - -webkit-transform: scaley(0.4); - transform: scaley(0.4); } - - 100% { - -webkit-transform: scaley(1); - transform: scaley(1); } } - -.line-scale > div:nth-child(1) { - -webkit-animation: line-scale 1s 0.1s infinite cubic-bezier(.2, .68, .18, 1.08); - animation: line-scale 1s 0.1s infinite cubic-bezier(.2, .68, .18, 1.08); } -.line-scale > div:nth-child(2) { - -webkit-animation: line-scale 1s 0.2s infinite cubic-bezier(.2, .68, .18, 1.08); - animation: line-scale 1s 0.2s infinite cubic-bezier(.2, .68, .18, 1.08); } -.line-scale > div:nth-child(3) { - -webkit-animation: line-scale 1s 0.3s infinite cubic-bezier(.2, .68, .18, 1.08); - animation: line-scale 1s 0.3s infinite cubic-bezier(.2, .68, .18, 1.08); } -.line-scale > div:nth-child(4) { - -webkit-animation: line-scale 1s 0.4s infinite cubic-bezier(.2, .68, .18, 1.08); - animation: line-scale 1s 0.4s infinite cubic-bezier(.2, .68, .18, 1.08); } -.line-scale > div:nth-child(5) { - -webkit-animation: line-scale 1s 0.5s infinite cubic-bezier(.2, .68, .18, 1.08); - animation: line-scale 1s 0.5s infinite cubic-bezier(.2, .68, .18, 1.08); } -.line-scale > div { - background-color: #fff; - width: 4px; - height: 35px; - border-radius: 2px; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - display: inline-block; } - -@-webkit-keyframes line-scale-party { - 0% { - -webkit-transform: scale(1); - transform: scale(1); } - - 50% { - -webkit-transform: scale(0.5); - transform: scale(0.5); } - - 100% { - -webkit-transform: scale(1); - transform: scale(1); } } - -@keyframes line-scale-party { - 0% { - -webkit-transform: scale(1); - transform: scale(1); } - - 50% { - -webkit-transform: scale(0.5); - transform: scale(0.5); } - - 100% { - -webkit-transform: scale(1); - transform: scale(1); } } - -.line-scale-party > div:nth-child(1) { - -webkit-animation-delay: 0.77s; - animation-delay: 0.77s; - -webkit-animation-duration: 1.26s; - animation-duration: 1.26s; } -.line-scale-party > div:nth-child(2) { - -webkit-animation-delay: 0.29s; - animation-delay: 0.29s; - -webkit-animation-duration: 0.43s; - animation-duration: 0.43s; } -.line-scale-party > div:nth-child(3) { - -webkit-animation-delay: 0.28s; - animation-delay: 0.28s; - -webkit-animation-duration: 1.01s; - animation-duration: 1.01s; } -.line-scale-party > div:nth-child(4) { - -webkit-animation-delay: 0.74s; - animation-delay: 0.74s; - -webkit-animation-duration: 0.73s; - animation-duration: 0.73s; } -.line-scale-party > div { - background-color: #fff; - width: 4px; - height: 35px; - border-radius: 2px; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - display: inline-block; - -webkit-animation-name: line-scale-party; - animation-name: line-scale-party; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; - -webkit-animation-delay: 0; - animation-delay: 0; } - -@-webkit-keyframes line-scale-pulse-out { - 0% { - -webkit-transform: scaley(1); - transform: scaley(1); } - - 50% { - -webkit-transform: scaley(0.4); - transform: scaley(0.4); } - - 100% { - -webkit-transform: scaley(1); - transform: scaley(1); } } - -@keyframes line-scale-pulse-out { - 0% { - -webkit-transform: scaley(1); - transform: scaley(1); } - - 50% { - -webkit-transform: scaley(0.4); - transform: scaley(0.4); } - - 100% { - -webkit-transform: scaley(1); - transform: scaley(1); } } - -.line-scale-pulse-out > div { - background-color: #fff; - width: 4px; - height: 35px; - border-radius: 2px; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - display: inline-block; - -webkit-animation: line-scale-pulse-out 0.9s 0s infinite cubic-bezier(.85, .25, .37, .85); - animation: line-scale-pulse-out 0.9s 0s infinite cubic-bezier(.85, .25, .37, .85); } - .line-scale-pulse-out > div:nth-child(2), .line-scale-pulse-out > div:nth-child(4) { - -webkit-animation-delay: 0.2s !important; - animation-delay: 0.2s !important; } - .line-scale-pulse-out > div:nth-child(1), .line-scale-pulse-out > div:nth-child(5) { - -webkit-animation-delay: 0.4s !important; - animation-delay: 0.4s !important; } - -@-webkit-keyframes line-scale-pulse-out-rapid { - 0% { - -webkit-transform: scaley(1); - transform: scaley(1); } - - 80% { - -webkit-transform: scaley(0.3); - transform: scaley(0.3); } - - 90% { - -webkit-transform: scaley(1); - transform: scaley(1); } } - -@keyframes line-scale-pulse-out-rapid { - 0% { - -webkit-transform: scaley(1); - transform: scaley(1); } - - 80% { - -webkit-transform: scaley(0.3); - transform: scaley(0.3); } - - 90% { - -webkit-transform: scaley(1); - transform: scaley(1); } } - -.line-scale-pulse-out-rapid > div { - background-color: #fff; - width: 4px; - height: 35px; - border-radius: 2px; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - display: inline-block; - -webkit-animation: line-scale-pulse-out-rapid 0.9s 0s infinite cubic-bezier(.11, .49, .38, .78); - animation: line-scale-pulse-out-rapid 0.9s 0s infinite cubic-bezier(.11, .49, .38, .78); } - .line-scale-pulse-out-rapid > div:nth-child(2), .line-scale-pulse-out-rapid > div:nth-child(4) { - -webkit-animation-delay: 0.25s !important; - animation-delay: 0.25s !important; } - .line-scale-pulse-out-rapid > div:nth-child(1), .line-scale-pulse-out-rapid > div:nth-child(5) { - -webkit-animation-delay: 0.5s !important; - animation-delay: 0.5s !important; } - -@-webkit-keyframes line-spin-fade-loader { - 50% { - opacity: 0.3; } - - 100% { - opacity: 1; } } - -@keyframes line-spin-fade-loader { - 50% { - opacity: 0.3; } - - 100% { - opacity: 1; } } - -.line-spin-fade-loader { - position: relative; } - .line-spin-fade-loader > div:nth-child(1) { - top: 20px; - left: 0; - -webkit-animation: line-spin-fade-loader 1.2s 0.12s infinite ease-in-out; - animation: line-spin-fade-loader 1.2s 0.12s infinite ease-in-out; } - .line-spin-fade-loader > div:nth-child(2) { - top: 13.63636px; - left: 13.63636px; - -webkit-transform: rotate(-45deg); - -ms-transform: rotate(-45deg); - transform: rotate(-45deg); - -webkit-animation: line-spin-fade-loader 1.2s 0.24s infinite ease-in-out; - animation: line-spin-fade-loader 1.2s 0.24s infinite ease-in-out; } - .line-spin-fade-loader > div:nth-child(3) { - top: 0; - left: 20px; - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); - -webkit-animation: line-spin-fade-loader 1.2s 0.36s infinite ease-in-out; - animation: line-spin-fade-loader 1.2s 0.36s infinite ease-in-out; } - .line-spin-fade-loader > div:nth-child(4) { - top: -13.63636px; - left: 13.63636px; - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); - -webkit-animation: line-spin-fade-loader 1.2s 0.48s infinite ease-in-out; - animation: line-spin-fade-loader 1.2s 0.48s infinite ease-in-out; } - .line-spin-fade-loader > div:nth-child(5) { - top: -20px; - left: 0; - -webkit-animation: line-spin-fade-loader 1.2s 0.6s infinite ease-in-out; - animation: line-spin-fade-loader 1.2s 0.6s infinite ease-in-out; } - .line-spin-fade-loader > div:nth-child(6) { - top: -13.63636px; - left: -13.63636px; - -webkit-transform: rotate(-45deg); - -ms-transform: rotate(-45deg); - transform: rotate(-45deg); - -webkit-animation: line-spin-fade-loader 1.2s 0.72s infinite ease-in-out; - animation: line-spin-fade-loader 1.2s 0.72s infinite ease-in-out; } - .line-spin-fade-loader > div:nth-child(7) { - top: 0; - left: -20px; - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); - -webkit-animation: line-spin-fade-loader 1.2s 0.84s infinite ease-in-out; - animation: line-spin-fade-loader 1.2s 0.84s infinite ease-in-out; } - .line-spin-fade-loader > div:nth-child(8) { - top: 13.63636px; - left: -13.63636px; - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); - -webkit-animation: line-spin-fade-loader 1.2s 0.96s infinite ease-in-out; - animation: line-spin-fade-loader 1.2s 0.96s infinite ease-in-out; } - .line-spin-fade-loader > div { - background-color: #fff; - width: 4px; - height: 35px; - border-radius: 2px; - margin: 2px; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - position: absolute; - width: 5px; - height: 15px; } - -/** - * Misc - */ -@-webkit-keyframes triangle-skew-spin { - 25% { - -webkit-transform: perspective(100px) rotateX(180deg) rotateY(0); - transform: perspective(100px) rotateX(180deg) rotateY(0); } - - 50% { - -webkit-transform: perspective(100px) rotateX(180deg) rotateY(180deg); - transform: perspective(100px) rotateX(180deg) rotateY(180deg); } - - 75% { - -webkit-transform: perspective(100px) rotateX(0) rotateY(180deg); - transform: perspective(100px) rotateX(0) rotateY(180deg); } - - 100% { - -webkit-transform: perspective(100px) rotateX(0) rotateY(0); - transform: perspective(100px) rotateX(0) rotateY(0); } } -@keyframes triangle-skew-spin { - 25% { - -webkit-transform: perspective(100px) rotateX(180deg) rotateY(0); - transform: perspective(100px) rotateX(180deg) rotateY(0); } - - 50% { - -webkit-transform: perspective(100px) rotateX(180deg) rotateY(180deg); - transform: perspective(100px) rotateX(180deg) rotateY(180deg); } - - 75% { - -webkit-transform: perspective(100px) rotateX(0) rotateY(180deg); - transform: perspective(100px) rotateX(0) rotateY(180deg); } - - 100% { - -webkit-transform: perspective(100px) rotateX(0) rotateY(0); - transform: perspective(100px) rotateX(0) rotateY(0); } } - -.triangle-skew-spin > div { - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - width: 0; - height: 0; - border-left: 20px solid transparent; - border-right: 20px solid transparent; - border-bottom: 20px solid #fff; - -webkit-animation: triangle-skew-spin 3s 0s cubic-bezier(.09, .57, .49, .9) infinite; - animation: triangle-skew-spin 3s 0s cubic-bezier(.09, .57, .49, .9) infinite; } - -@-webkit-keyframes square-spin { - 25% { - -webkit-transform: perspective(100px) rotateX(180deg) rotateY(0); - transform: perspective(100px) rotateX(180deg) rotateY(0); } - - 50% { - -webkit-transform: perspective(100px) rotateX(180deg) rotateY(180deg); - transform: perspective(100px) rotateX(180deg) rotateY(180deg); } - - 75% { - -webkit-transform: perspective(100px) rotateX(0) rotateY(180deg); - transform: perspective(100px) rotateX(0) rotateY(180deg); } - - 100% { - -webkit-transform: perspective(100px) rotateX(0) rotateY(0); - transform: perspective(100px) rotateX(0) rotateY(0); } } - -@keyframes square-spin { - 25% { - -webkit-transform: perspective(100px) rotateX(180deg) rotateY(0); - transform: perspective(100px) rotateX(180deg) rotateY(0); } - - 50% { - -webkit-transform: perspective(100px) rotateX(180deg) rotateY(180deg); - transform: perspective(100px) rotateX(180deg) rotateY(180deg); } - - 75% { - -webkit-transform: perspective(100px) rotateX(0) rotateY(180deg); - transform: perspective(100px) rotateX(0) rotateY(180deg); } - - 100% { - -webkit-transform: perspective(100px) rotateX(0) rotateY(0); - transform: perspective(100px) rotateX(0) rotateY(0); } } - -.square-spin > div { - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - width: 50px; - height: 50px; - background: #fff; - border: 1px solid red; - -webkit-animation: square-spin 3s 0s cubic-bezier(.09, .57, .49, .9) infinite; - animation: square-spin 3s 0s cubic-bezier(.09, .57, .49, .9) infinite; } - -@-webkit-keyframes rotate_pacman_half_up { - 0% { - -webkit-transform: rotate(270deg); - transform: rotate(270deg); } - - 50% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); } - - 100% { - -webkit-transform: rotate(270deg); - transform: rotate(270deg); } } - -@keyframes rotate_pacman_half_up { - 0% { - -webkit-transform: rotate(270deg); - transform: rotate(270deg); } - - 50% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); } - - 100% { - -webkit-transform: rotate(270deg); - transform: rotate(270deg); } } - -@-webkit-keyframes rotate_pacman_half_down { - 0% { - -webkit-transform: rotate(90deg); - transform: rotate(90deg); } - - 50% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - - 100% { - -webkit-transform: rotate(90deg); - transform: rotate(90deg); } } - -@keyframes rotate_pacman_half_down { - 0% { - -webkit-transform: rotate(90deg); - transform: rotate(90deg); } - - 50% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - - 100% { - -webkit-transform: rotate(90deg); - transform: rotate(90deg); } } - -@-webkit-keyframes pacman-balls { - 75% { - opacity: 0.7; } - - 100% { - -webkit-transform: translate(-100px, -6.25px); - transform: translate(-100px, -6.25px); } } - -@keyframes pacman-balls { - 75% { - opacity: 0.7; } - - 100% { - -webkit-transform: translate(-100px, -6.25px); - transform: translate(-100px, -6.25px); } } - -.pacman { - position: relative; } - .pacman > div:nth-child(2) { - -webkit-animation: pacman-balls 1s 0s infinite linear; - animation: pacman-balls 1s 0s infinite linear; } - .pacman > div:nth-child(3) { - -webkit-animation: pacman-balls 1s 0.33s infinite linear; - animation: pacman-balls 1s 0.33s infinite linear; } - .pacman > div:nth-child(4) { - -webkit-animation: pacman-balls 1s 0.66s infinite linear; - animation: pacman-balls 1s 0.66s infinite linear; } - .pacman > div:nth-child(5) { - -webkit-animation: pacman-balls 1s 0.99s infinite linear; - animation: pacman-balls 1s 0.99s infinite linear; } - .pacman > div:first-of-type { - width: 0px; - height: 0px; - border-right: 25px solid transparent; - border-top: 25px solid #fff; - border-left: 25px solid #fff; - border-bottom: 25px solid #fff; - border-radius: 25px; - -webkit-animation: rotate_pacman_half_up 0.5s 0s infinite; - animation: rotate_pacman_half_up 0.5s 0s infinite; } - .pacman > div:nth-child(2) { - width: 0px; - height: 0px; - border-right: 25px solid transparent; - border-top: 25px solid #fff; - border-left: 25px solid #fff; - border-bottom: 25px solid #fff; - border-radius: 25px; - -webkit-animation: rotate_pacman_half_down 0.5s 0s infinite; - animation: rotate_pacman_half_down 0.5s 0s infinite; - margin-top: -50px; } - .pacman > div:nth-child(3), .pacman > div:nth-child(4), .pacman > div:nth-child(5), .pacman > div:nth-child(6) { - background-color: #fff; - width: 15px; - height: 15px; - border-radius: 100%; - margin: 2px; - width: 10px; - height: 10px; - position: absolute; - -webkit-transform: translate(0, -6.25px); - -ms-transform: translate(0, -6.25px); - transform: translate(0, -6.25px); - top: 25px; - left: 100px; } - -@-webkit-keyframes cube-transition { - 25% { - -webkit-transform: translateX(50px) scale(0.5) rotate(-90deg); - transform: translateX(50px) scale(0.5) rotate(-90deg); } - - 50% { - -webkit-transform: translate(50px, 50px) rotate(-180deg); - transform: translate(50px, 50px) rotate(-180deg); } - - 75% { - -webkit-transform: translateY(50px) scale(0.5) rotate(-270deg); - transform: translateY(50px) scale(0.5) rotate(-270deg); } - - 100% { - -webkit-transform: rotate(-360deg); - transform: rotate(-360deg); } } - -@keyframes cube-transition { - 25% { - -webkit-transform: translateX(50px) scale(0.5) rotate(-90deg); - transform: translateX(50px) scale(0.5) rotate(-90deg); } - - 50% { - -webkit-transform: translate(50px, 50px) rotate(-180deg); - transform: translate(50px, 50px) rotate(-180deg); } - - 75% { - -webkit-transform: translateY(50px) scale(0.5) rotate(-270deg); - transform: translateY(50px) scale(0.5) rotate(-270deg); } - - 100% { - -webkit-transform: rotate(-360deg); - transform: rotate(-360deg); } } - -.cube-transition { - position: relative; - -webkit-transform: translate(-25px, -25px); - -ms-transform: translate(-25px, -25px); - transform: translate(-25px, -25px); } - .cube-transition > div { - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - width: 10px; - height: 10px; - position: absolute; - top: 0; - left: 0; - background-color: #fff; - -webkit-animation: cube-transition 1.6s 0s infinite ease-in-out; - animation: cube-transition 1.6s 0s infinite ease-in-out; } - .cube-transition > div:last-child { - -webkit-animation-delay: -0.8s; - animation-delay: -0.8s; } - -@-webkit-keyframes spin-rotate { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - - 50% { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); } - - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); } } - -@keyframes spin-rotate { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - - 50% { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); } - - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); } } - -.semi-circle-spin { - position: relative; - width: 35px; - height: 35px; - overflow: hidden; } - .semi-circle-spin > div { - position: absolute; - border-width: 0px; - border-radius: 100%; - -webkit-animation: spin-rotate 0.6s 0s infinite linear; - animation: spin-rotate 0.6s 0s infinite linear; - background-image: -webkit-linear-gradient(transparent 0%, transparent 70%, #fff 30%, #fff 100%); - background-image: linear-gradient(transparent 0%, transparent 70%, #fff 30%, #fff 100%); - width: 100%; - height: 100%; } diff --git a/src/main/resources/static/plugins/pjax/jquery.pjax.js b/src/main/resources/static/plugins/pjax/jquery.pjax.js deleted file mode 100644 index d57269d4f..000000000 --- a/src/main/resources/static/plugins/pjax/jquery.pjax.js +++ /dev/null @@ -1,903 +0,0 @@ -/*! - * Copyright 2012, Chris Wanstrath - * Released under the MIT License - * https://github.com/defunkt/jquery-pjax - */ - -(function($){ - -// When called on a container with a selector, fetches the href with -// ajax into the container or with the data-pjax attribute on the link -// itself. -// -// Tries to make sure the back button and ctrl+click work the way -// you'd expect. -// -// Exported as $.fn.pjax -// -// Accepts a jQuery ajax options object that may include these -// pjax specific options: -// -// -// container - String selector for the element where to place the response body. -// push - Whether to pushState the URL. Defaults to true (of course). -// replace - Want to use replaceState instead? That's cool. -// -// For convenience the second parameter can be either the container or -// the options object. -// -// Returns the jQuery object -function fnPjax(selector, container, options) { - options = optionsFor(container, options) - return this.on('click.pjax', selector, function(event) { - var opts = options - if (!opts.container) { - opts = $.extend({}, options) - opts.container = $(this).attr('data-pjax') - } - handleClick(event, opts) - }) -} - -// Public: pjax on click handler -// -// Exported as $.pjax.click. -// -// event - "click" jQuery.Event -// options - pjax options -// -// Examples -// -// $(document).on('click', 'a', $.pjax.click) -// // is the same as -// $(document).pjax('a') -// -// Returns nothing. -function handleClick(event, container, options) { - options = optionsFor(container, options) - - var link = event.currentTarget - var $link = $(link) - - if (link.tagName.toUpperCase() !== 'A') - throw "$.fn.pjax or $.pjax.click requires an anchor element" - - // Middle click, cmd click, and ctrl click should open - // links in a new tab as normal. - if ( event.which > 1 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey ) - return - - // Ignore cross origin links - if ( location.protocol !== link.protocol || location.hostname !== link.hostname ) - return - - // Ignore case when a hash is being tacked on the current URL - if ( link.href.indexOf('#') > -1 && stripHash(link) == stripHash(location) ) - return - - // Ignore event with default prevented - if (event.isDefaultPrevented()) - return - - var defaults = { - url: link.href, - container: $link.attr('data-pjax'), - target: link - } - - var opts = $.extend({}, defaults, options) - var clickEvent = $.Event('pjax:click') - $link.trigger(clickEvent, [opts]) - - if (!clickEvent.isDefaultPrevented()) { - pjax(opts) - event.preventDefault() - $link.trigger('pjax:clicked', [opts]) - } -} - -// Public: pjax on form submit handler -// -// Exported as $.pjax.submit -// -// event - "click" jQuery.Event -// options - pjax options -// -// Examples -// -// $(document).on('submit', 'form', function(event) { -// $.pjax.submit(event, '[data-pjax-container]') -// }) -// -// Returns nothing. -function handleSubmit(event, container, options) { - options = optionsFor(container, options) - - var form = event.currentTarget - var $form = $(form) - - if (form.tagName.toUpperCase() !== 'FORM') - throw "$.pjax.submit requires a form element" - - var defaults = { - type: ($form.attr('method') || 'GET').toUpperCase(), - url: $form.attr('action'), - container: $form.attr('data-pjax'), - target: form - } - - if (defaults.type !== 'GET' && window.FormData !== undefined) { - defaults.data = new FormData(form) - defaults.processData = false - defaults.contentType = false - } else { - // Can't handle file uploads, exit - if ($form.find(':file').length) { - return - } - - // Fallback to manually serializing the fields - defaults.data = $form.serializeArray() - } - - pjax($.extend({}, defaults, options)) - - event.preventDefault() -} - -// Loads a URL with ajax, puts the response body inside a container, -// then pushState()'s the loaded URL. -// -// Works just like $.ajax in that it accepts a jQuery ajax -// settings object (with keys like url, type, data, etc). -// -// Accepts these extra keys: -// -// container - String selector for where to stick the response body. -// push - Whether to pushState the URL. Defaults to true (of course). -// replace - Want to use replaceState instead? That's cool. -// -// Use it just like $.ajax: -// -// var xhr = $.pjax({ url: this.href, container: '#main' }) -// console.log( xhr.readyState ) -// -// Returns whatever $.ajax returns. -function pjax(options) { - options = $.extend(true, {}, $.ajaxSettings, pjax.defaults, options) - - if ($.isFunction(options.url)) { - options.url = options.url() - } - - var hash = parseURL(options.url).hash - - var containerType = $.type(options.container) - if (containerType !== 'string') { - throw "expected string value for 'container' option; got " + containerType - } - var context = options.context = $(options.container) - if (!context.length) { - throw "the container selector '" + options.container + "' did not match anything" - } - - // We want the browser to maintain two separate internal caches: one - // for pjax'd partial page loads and one for normal page loads. - // Without adding this secret parameter, some browsers will often - // confuse the two. - if (!options.data) options.data = {} - if ($.isArray(options.data)) { - options.data.push({name: '_pjax', value: options.container}) - } else { - options.data._pjax = options.container - } - - function fire(type, args, props) { - if (!props) props = {} - props.relatedTarget = options.target - var event = $.Event(type, props) - context.trigger(event, args) - return !event.isDefaultPrevented() - } - - var timeoutTimer - - options.beforeSend = function(xhr, settings) { - // No timeout for non-GET requests - // Its not safe to request the resource again with a fallback method. - if (settings.type !== 'GET') { - settings.timeout = 0 - } - - xhr.setRequestHeader('X-PJAX', 'true') - xhr.setRequestHeader('X-PJAX-Container', options.container) - - if (!fire('pjax:beforeSend', [xhr, settings])) - return false - - if (settings.timeout > 0) { - timeoutTimer = setTimeout(function() { - if (fire('pjax:timeout', [xhr, options])) - xhr.abort('timeout') - }, settings.timeout) - - // Clear timeout setting so jquerys internal timeout isn't invoked - settings.timeout = 0 - } - - var url = parseURL(settings.url) - if (hash) url.hash = hash - options.requestUrl = stripInternalParams(url) - } - - options.complete = function(xhr, textStatus) { - if (timeoutTimer) - clearTimeout(timeoutTimer) - - fire('pjax:complete', [xhr, textStatus, options]) - - fire('pjax:end', [xhr, options]) - } - - options.error = function(xhr, textStatus, errorThrown) { - var container = extractContainer("", xhr, options) - - var allowed = fire('pjax:error', [xhr, textStatus, errorThrown, options]) - if (options.type == 'GET' && textStatus !== 'abort' && allowed) { - locationReplace(container.url) - } - } - - options.success = function(data, status, xhr) { - var previousState = pjax.state - - // If $.pjax.defaults.version is a function, invoke it first. - // Otherwise it can be a static string. - var currentVersion = typeof $.pjax.defaults.version === 'function' ? - $.pjax.defaults.version() : - $.pjax.defaults.version - - var latestVersion = xhr.getResponseHeader('X-PJAX-Version') - - var container = extractContainer(data, xhr, options) - - var url = parseURL(container.url) - if (hash) { - url.hash = hash - container.url = url.href - } - - // If there is a layout version mismatch, hard load the new url - if (currentVersion && latestVersion && currentVersion !== latestVersion) { - locationReplace(container.url) - return - } - - // If the new response is missing a body, hard load the page - if (!container.contents) { - locationReplace(container.url) - return - } - - pjax.state = { - id: options.id || uniqueId(), - url: container.url, - title: container.title, - container: options.container, - fragment: options.fragment, - timeout: options.timeout - } - - if (options.push || options.replace) { - window.history.replaceState(pjax.state, container.title, container.url) - } - - // Only blur the focus if the focused element is within the container. - var blurFocus = $.contains(context, document.activeElement) - - // Clear out any focused controls before inserting new page contents. - if (blurFocus) { - try { - document.activeElement.blur() - } catch (e) { /* ignore */ } - } - - if (container.title) document.title = container.title - - fire('pjax:beforeReplace', [container.contents, options], { - state: pjax.state, - previousState: previousState - }) - context.html(container.contents) - - // FF bug: Won't autofocus fields that are inserted via JS. - // This behavior is incorrect. So if theres no current focus, autofocus - // the last field. - // - // http://www.w3.org/html/wg/drafts/html/master/forms.html - var autofocusEl = context.find('input[autofocus], textarea[autofocus]').last()[0] - if (autofocusEl && document.activeElement !== autofocusEl) { - autofocusEl.focus() - } - - executeScriptTags(container.scripts) - - var scrollTo = options.scrollTo - - // Ensure browser scrolls to the element referenced by the URL anchor - if (hash) { - var name = decodeURIComponent(hash.slice(1)) - var target = document.getElementById(name) || document.getElementsByName(name)[0] - if (target) scrollTo = $(target).offset().top - } - - if (typeof scrollTo == 'number') $(window).scrollTop(scrollTo) - - fire('pjax:success', [data, status, xhr, options]) - } - - - // Initialize pjax.state for the initial page load. Assume we're - // using the container and options of the link we're loading for the - // back button to the initial page. This ensures good back button - // behavior. - if (!pjax.state) { - pjax.state = { - id: uniqueId(), - url: window.location.href, - title: document.title, - container: options.container, - fragment: options.fragment, - timeout: options.timeout - } - window.history.replaceState(pjax.state, document.title) - } - - // Cancel the current request if we're already pjaxing - abortXHR(pjax.xhr) - - pjax.options = options - var xhr = pjax.xhr = $.ajax(options) - - if (xhr.readyState > 0) { - if (options.push && !options.replace) { - // Cache current container element before replacing it - cachePush(pjax.state.id, [options.container, cloneContents(context)]) - - window.history.pushState(null, "", options.requestUrl) - } - - fire('pjax:start', [xhr, options]) - fire('pjax:send', [xhr, options]) - } - - return pjax.xhr -} - -// Public: Reload current page with pjax. -// -// Returns whatever $.pjax returns. -function pjaxReload(container, options) { - var defaults = { - url: window.location.href, - push: false, - replace: true, - scrollTo: false - } - - return pjax($.extend(defaults, optionsFor(container, options))) -} - -// Internal: Hard replace current state with url. -// -// Work for around WebKit -// https://bugs.webkit.org/show_bug.cgi?id=93506 -// -// Returns nothing. -function locationReplace(url) { - window.history.replaceState(null, "", pjax.state.url) - window.location.replace(url) -} - - -var initialPop = true -var initialURL = window.location.href -var initialState = window.history.state - -// Initialize $.pjax.state if possible -// Happens when reloading a page and coming forward from a different -// session history. -if (initialState && initialState.container) { - pjax.state = initialState -} - -// Non-webkit browsers don't fire an initial popstate event -if ('state' in window.history) { - initialPop = false -} - -// popstate handler takes care of the back and forward buttons -// -// You probably shouldn't use pjax on pages with other pushState -// stuff yet. -function onPjaxPopstate(event) { - - // Hitting back or forward should override any pending PJAX request. - if (!initialPop) { - abortXHR(pjax.xhr) - } - - var previousState = pjax.state - var state = event.state - var direction - - if (state && state.container) { - // When coming forward from a separate history session, will get an - // initial pop with a state we are already at. Skip reloading the current - // page. - if (initialPop && initialURL == state.url) return - - if (previousState) { - // If popping back to the same state, just skip. - // Could be clicking back from hashchange rather than a pushState. - if (previousState.id === state.id) return - - // Since state IDs always increase, we can deduce the navigation direction - direction = previousState.id < state.id ? 'forward' : 'back' - } - - var cache = cacheMapping[state.id] || [] - var containerSelector = cache[0] || state.container - var container = $(containerSelector), contents = cache[1] - - if (container.length) { - if (previousState) { - // Cache current container before replacement and inform the - // cache which direction the history shifted. - cachePop(direction, previousState.id, [containerSelector, cloneContents(container)]) - } - - var popstateEvent = $.Event('pjax:popstate', { - state: state, - direction: direction - }) - container.trigger(popstateEvent) - - var options = { - id: state.id, - url: state.url, - container: containerSelector, - push: false, - fragment: state.fragment, - timeout: state.timeout, - scrollTo: false - } - - if (contents) { - container.trigger('pjax:start', [null, options]) - - pjax.state = state - if (state.title) document.title = state.title - var beforeReplaceEvent = $.Event('pjax:beforeReplace', { - state: state, - previousState: previousState - }) - container.trigger(beforeReplaceEvent, [contents, options]) - container.html(contents) - - container.trigger('pjax:end', [null, options]) - } else { - pjax(options) - } - - // Force reflow/relayout before the browser tries to restore the - // scroll position. - container[0].offsetHeight // eslint-disable-line no-unused-expressions - } else { - locationReplace(location.href) - } - } - initialPop = false -} - -// Fallback version of main pjax function for browsers that don't -// support pushState. -// -// Returns nothing since it retriggers a hard form submission. -function fallbackPjax(options) { - var url = $.isFunction(options.url) ? options.url() : options.url, - method = options.type ? options.type.toUpperCase() : 'GET' - - var form = $('', { - method: method === 'GET' ? 'GET' : 'POST', - action: url, - style: 'display:none' - }) - - if (method !== 'GET' && method !== 'POST') { - form.append($('', { - type: 'hidden', - name: '_method', - value: method.toLowerCase() - })) - } - - var data = options.data - if (typeof data === 'string') { - $.each(data.split('&'), function(index, value) { - var pair = value.split('=') - form.append($('', {type: 'hidden', name: pair[0], value: pair[1]})) - }) - } else if ($.isArray(data)) { - $.each(data, function(index, value) { - form.append($('', {type: 'hidden', name: value.name, value: value.value})) - }) - } else if (typeof data === 'object') { - var key - for (key in data) - form.append($('', {type: 'hidden', name: key, value: data[key]})) - } - - $(document.body).append(form) - form.submit() -} - -// Internal: Abort an XmlHttpRequest if it hasn't been completed, -// also removing its event handlers. -function abortXHR(xhr) { - if ( xhr && xhr.readyState < 4) { - xhr.onreadystatechange = $.noop - xhr.abort() - } -} - -// Internal: Generate unique id for state object. -// -// Use a timestamp instead of a counter since ids should still be -// unique across page loads. -// -// Returns Number. -function uniqueId() { - return (new Date).getTime() -} - -function cloneContents(container) { - var cloned = container.clone() - // Unmark script tags as already being eval'd so they can get executed again - // when restored from cache. HAXX: Uses jQuery internal method. - cloned.find('script').each(function(){ - if (!this.src) $._data(this, 'globalEval', false) - }) - return cloned.contents() -} - -// Internal: Strip internal query params from parsed URL. -// -// Returns sanitized url.href String. -function stripInternalParams(url) { - url.search = url.search.replace(/([?&])(_pjax|_)=[^&]*/g, '').replace(/^&/, '') - return url.href.replace(/\?($|#)/, '$1') -} - -// Internal: Parse URL components and returns a Locationish object. -// -// url - String URL -// -// Returns HTMLAnchorElement that acts like Location. -function parseURL(url) { - var a = document.createElement('a') - a.href = url - return a -} - -// Internal: Return the `href` component of given URL object with the hash -// portion removed. -// -// location - Location or HTMLAnchorElement -// -// Returns String -function stripHash(location) { - return location.href.replace(/#.*/, '') -} - -// Internal: Build options Object for arguments. -// -// For convenience the first parameter can be either the container or -// the options object. -// -// Examples -// -// optionsFor('#container') -// // => {container: '#container'} -// -// optionsFor('#container', {push: true}) -// // => {container: '#container', push: true} -// -// optionsFor({container: '#container', push: true}) -// // => {container: '#container', push: true} -// -// Returns options Object. -function optionsFor(container, options) { - if (container && options) { - options = $.extend({}, options) - options.container = container - return options - } else if ($.isPlainObject(container)) { - return container - } else { - return {container: container} - } -} - -// Internal: Filter and find all elements matching the selector. -// -// Where $.fn.find only matches descendants, findAll will test all the -// top level elements in the jQuery object as well. -// -// elems - jQuery object of Elements -// selector - String selector to match -// -// Returns a jQuery object. -function findAll(elems, selector) { - return elems.filter(selector).add(elems.find(selector)) -} - -function parseHTML(html) { - return $.parseHTML(html, document, true) -} - -// Internal: Extracts container and metadata from response. -// -// 1. Extracts X-PJAX-URL header if set -// 2. Extracts inline tags -// 3. Builds response Element and extracts fragment if set -// -// data - String response data -// xhr - XHR response -// options - pjax options Object -// -// Returns an Object with url, title, and contents keys. -function extractContainer(data, xhr, options) { - var obj = {}, fullDocument = /<html/i.test(data) - - // Prefer X-PJAX-URL header if it was set, otherwise fallback to - // using the original requested url. - var serverUrl = xhr.getResponseHeader('X-PJAX-URL') - obj.url = serverUrl ? stripInternalParams(parseURL(serverUrl)) : options.requestUrl - - var $head, $body - // Attempt to parse response html into elements - if (fullDocument) { - $body = $(parseHTML(data.match(/<body[^>]*>([\s\S.]*)<\/body>/i)[0])) - var head = data.match(/<head[^>]*>([\s\S.]*)<\/head>/i) - $head = head != null ? $(parseHTML(head[0])) : $body - } else { - $head = $body = $(parseHTML(data)) - } - - // If response data is empty, return fast - if ($body.length === 0) - return obj - - // If there's a <title> tag in the header, use it as - // the page's title. - obj.title = findAll($head, 'title').last().text() - - if (options.fragment) { - var $fragment = $body - // If they specified a fragment, look for it in the response - // and pull it out. - if (options.fragment !== 'body') { - $fragment = findAll($fragment, options.fragment).first() - } - - if ($fragment.length) { - obj.contents = options.fragment === 'body' ? $fragment : $fragment.contents() - - // If there's no title, look for data-title and title attributes - // on the fragment - if (!obj.title) - obj.title = $fragment.attr('title') || $fragment.data('title') - } - - } else if (!fullDocument) { - obj.contents = $body - } - - // Clean up any <title> tags - if (obj.contents) { - // Remove any parent title elements - obj.contents = obj.contents.not(function() { return $(this).is('title') }) - - // Then scrub any titles from their descendants - obj.contents.find('title').remove() - - // Gather all script[src] elements - obj.scripts = findAll(obj.contents, 'script[src]').remove() - obj.contents = obj.contents.not(obj.scripts) - } - - // Trim any whitespace off the title - if (obj.title) obj.title = $.trim(obj.title) - - return obj -} - -// Load an execute scripts using standard script request. -// -// Avoids jQuery's traditional $.getScript which does a XHR request and -// globalEval. -// -// scripts - jQuery object of script Elements -// -// Returns nothing. -function executeScriptTags(scripts) { - if (!scripts) return - - var existingScripts = $('script[src]') - - scripts.each(function() { - var src = this.src - var matchedScripts = existingScripts.filter(function() { - return this.src === src - }) - if (matchedScripts.length) return - - var script = document.createElement('script') - var type = $(this).attr('type') - if (type) script.type = type - script.src = $(this).attr('src') - document.head.appendChild(script) - }) -} - -// Internal: History DOM caching class. -var cacheMapping = {} -var cacheForwardStack = [] -var cacheBackStack = [] - -// Push previous state id and container contents into the history -// cache. Should be called in conjunction with `pushState` to save the -// previous container contents. -// -// id - State ID Number -// value - DOM Element to cache -// -// Returns nothing. -function cachePush(id, value) { - cacheMapping[id] = value - cacheBackStack.push(id) - - // Remove all entries in forward history stack after pushing a new page. - trimCacheStack(cacheForwardStack, 0) - - // Trim back history stack to max cache length. - trimCacheStack(cacheBackStack, pjax.defaults.maxCacheLength) -} - -// Shifts cache from directional history cache. Should be -// called on `popstate` with the previous state id and container -// contents. -// -// direction - "forward" or "back" String -// id - State ID Number -// value - DOM Element to cache -// -// Returns nothing. -function cachePop(direction, id, value) { - var pushStack, popStack - cacheMapping[id] = value - - if (direction === 'forward') { - pushStack = cacheBackStack - popStack = cacheForwardStack - } else { - pushStack = cacheForwardStack - popStack = cacheBackStack - } - - pushStack.push(id) - id = popStack.pop() - if (id) delete cacheMapping[id] - - // Trim whichever stack we just pushed to to max cache length. - trimCacheStack(pushStack, pjax.defaults.maxCacheLength) -} - -// Trim a cache stack (either cacheBackStack or cacheForwardStack) to be no -// longer than the specified length, deleting cached DOM elements as necessary. -// -// stack - Array of state IDs -// length - Maximum length to trim to -// -// Returns nothing. -function trimCacheStack(stack, length) { - while (stack.length > length) - delete cacheMapping[stack.shift()] -} - -// Public: Find version identifier for the initial page load. -// -// Returns String version or undefined. -function findVersion() { - return $('meta').filter(function() { - var name = $(this).attr('http-equiv') - return name && name.toUpperCase() === 'X-PJAX-VERSION' - }).attr('content') -} - -// Install pjax functions on $.pjax to enable pushState behavior. -// -// Does nothing if already enabled. -// -// Examples -// -// $.pjax.enable() -// -// Returns nothing. -function enable() { - $.fn.pjax = fnPjax - $.pjax = pjax - $.pjax.enable = $.noop - $.pjax.disable = disable - $.pjax.click = handleClick - $.pjax.submit = handleSubmit - $.pjax.reload = pjaxReload - $.pjax.defaults = { - timeout: 650, - push: true, - replace: false, - type: 'GET', - dataType: 'html', - scrollTo: 0, - maxCacheLength: 20, - version: findVersion - } - $(window).on('popstate.pjax', onPjaxPopstate) -} - -// Disable pushState behavior. -// -// This is the case when a browser doesn't support pushState. It is -// sometimes useful to disable pushState for debugging on a modern -// browser. -// -// Examples -// -// $.pjax.disable() -// -// Returns nothing. -function disable() { - $.fn.pjax = function() { return this } - $.pjax = fallbackPjax - $.pjax.enable = enable - $.pjax.disable = $.noop - $.pjax.click = $.noop - $.pjax.submit = $.noop - $.pjax.reload = function() { window.location.reload() } - - $(window).off('popstate.pjax', onPjaxPopstate) -} - - -// Add the state property to jQuery's event object so we can use it in -// $(window).bind('popstate') -if ($.event.props && $.inArray('state', $.event.props) < 0) { - $.event.props.push('state') -} else if (!('state' in $.Event.prototype)) { - $.event.addProp('state') -} - -// Is pjax supported by this browser? -$.support.pjax = - window.history && window.history.pushState && window.history.replaceState && - // pushState isn't reliable on iOS until 5. - !navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/) - -if ($.support.pjax) { - enable() -} else { - disable() -} - -})(jQuery) diff --git a/src/main/resources/static/plugins/simplemde/simplemde.min.css b/src/main/resources/static/plugins/simplemde/simplemde.min.css deleted file mode 100755 index d62f4d771..000000000 --- a/src/main/resources/static/plugins/simplemde/simplemde.min.css +++ /dev/null @@ -1,7 +0,0 @@ -/** - * simplemde v1.11.2 - * Copyright Next Step Webs, Inc. - * @link https://github.com/NextStepWebs/simplemde-markdown-editor - * @license MIT - */ -.CodeMirror{color:#000}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-ruler{border-left:1px solid #ccc;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:none;font-variant-ligatures:none}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected,.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0 0}.CodeMirror{height:auto;min-height:300px;border:1px solid #ddd;border-bottom-left-radius:4px;border-bottom-right-radius:4px;padding:10px;font:inherit;z-index:1}.CodeMirror-scroll{min-height:300px}.CodeMirror-fullscreen{background:#fff;position:fixed!important;top:50px;left:0;right:0;bottom:0;height:auto;z-index:9}.CodeMirror-sided{width:50%!important}.editor-toolbar{position:relative;opacity:.6;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;padding:0 10px;border-top:1px solid #bbb;border-left:1px solid #bbb;border-right:1px solid #bbb;border-top-left-radius:4px;border-top-right-radius:4px}.editor-toolbar:after,.editor-toolbar:before{display:block;content:' ';height:1px}.editor-toolbar:before{margin-bottom:8px}.editor-toolbar:after{margin-top:8px}.editor-toolbar:hover,.editor-wrapper input.title:focus,.editor-wrapper input.title:hover{opacity:.8}.editor-toolbar.fullscreen{width:100%;height:50px;overflow-x:auto;overflow-y:hidden;white-space:nowrap;padding-top:10px;padding-bottom:10px;box-sizing:border-box;background:#fff;border:0;position:fixed;top:0;left:0;opacity:1;z-index:9}.editor-toolbar.fullscreen::before{width:20px;height:50px;background:-moz-linear-gradient(left,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,1)),color-stop(100%,rgba(255,255,255,0)));background:-webkit-linear-gradient(left,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);background:-o-linear-gradient(left,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);background:linear-gradient(to right,rgba(255,255,255,1) 0,rgba(255,255,255,0) 100%);position:fixed;top:0;left:0;margin:0;padding:0}.editor-toolbar.fullscreen::after{width:20px;height:50px;background:-moz-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,0)),color-stop(100%,rgba(255,255,255,1)));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);background:-ms-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);position:fixed;top:0;right:0;margin:0;padding:0}.editor-toolbar a{display:inline-block;text-align:center;text-decoration:none!important;color:#2c3e50!important;width:30px;height:30px;margin:0;border:1px solid transparent;border-radius:3px;cursor:pointer}.editor-toolbar a.active,.editor-toolbar a:hover{background:#fcfcfc;border-color:#95a5a6}.editor-toolbar a:before{line-height:30px}.editor-toolbar i.separator{display:inline-block;width:0;border-left:1px solid #d9d9d9;border-right:1px solid #fff;color:transparent;text-indent:-10px;margin:0 6px}.editor-toolbar a.fa-header-x:after{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:65%;vertical-align:text-bottom;position:relative;top:2px}.editor-toolbar a.fa-header-1:after{content:"1"}.editor-toolbar a.fa-header-2:after{content:"2"}.editor-toolbar a.fa-header-3:after{content:"3"}.editor-toolbar a.fa-header-bigger:after{content:"▲"}.editor-toolbar a.fa-header-smaller:after{content:"▼"}.editor-toolbar.disabled-for-preview a:not(.no-disable){pointer-events:none;background:#fff;border-color:transparent;text-shadow:inherit}@media only screen and (max-width:700px){.editor-toolbar a.no-mobile{display:none}}.editor-statusbar{padding:8px 10px;font-size:12px;color:#959694;text-align:right}.editor-statusbar span{display:inline-block;min-width:4em;margin-left:1em}.editor-preview,.editor-preview-side{padding:10px;background:#fafafa;overflow:auto;display:none;box-sizing:border-box}.editor-statusbar .lines:before{content:'lines: '}.editor-statusbar .words:before{content:'words: '}.editor-statusbar .characters:before{content:'characters: '}.editor-preview{position:absolute;width:100%;height:100%;top:0;left:0;z-index:7}.editor-preview-side{position:fixed;bottom:0;width:50%;top:50px;right:0;z-index:9;border:1px solid #ddd}.editor-preview-active,.editor-preview-active-side{display:block}.editor-preview-side>p,.editor-preview>p{margin-top:0}.editor-preview pre,.editor-preview-side pre{background:#eee;margin-bottom:10px}.editor-preview table td,.editor-preview table th,.editor-preview-side table td,.editor-preview-side table th{border:1px solid #ddd;padding:5px}.CodeMirror .CodeMirror-code .cm-tag{color:#63a35c}.CodeMirror .CodeMirror-code .cm-attribute{color:#795da3}.CodeMirror .CodeMirror-code .cm-string{color:#183691}.CodeMirror .CodeMirror-selected{background:#d9d9d9}.CodeMirror .CodeMirror-code .cm-header-1{font-size:200%;line-height:200%}.CodeMirror .CodeMirror-code .cm-header-2{font-size:160%;line-height:160%}.CodeMirror .CodeMirror-code .cm-header-3{font-size:125%;line-height:125%}.CodeMirror .CodeMirror-code .cm-header-4{font-size:110%;line-height:110%}.CodeMirror .CodeMirror-code .cm-comment{background:rgba(0,0,0,.05);border-radius:2px}.CodeMirror .CodeMirror-code .cm-link{color:#7f8c8d}.CodeMirror .CodeMirror-code .cm-url{color:#aab2b3}.CodeMirror .CodeMirror-code .cm-strikethrough{text-decoration:line-through}.CodeMirror .CodeMirror-placeholder{opacity:.5}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:rgba(255,0,0,.15)} \ No newline at end of file diff --git a/src/main/resources/static/plugins/simplemde/simplemde.min.js b/src/main/resources/static/plugins/simplemde/simplemde.min.js deleted file mode 100755 index 50c624f20..000000000 --- a/src/main/resources/static/plugins/simplemde/simplemde.min.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * simplemde v1.11.2 - * Copyright Next Step Webs, Inc. - * @link https://github.com/NextStepWebs/simplemde-markdown-editor - * @license MIT - */ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.SimpleMDE=e()}}(function(){var e;return function t(e,n,r){function i(a,l){if(!n[a]){if(!e[a]){var s="function"==typeof require&&require;if(!l&&s)return s(a,!0);if(o)return o(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var u=n[a]={exports:{}};e[a][0].call(u.exports,function(t){var n=e[a][1][t];return i(n?n:t)},u,u.exports,t,e,n,r)}return n[a].exports}for(var o="function"==typeof require&&require,a=0;a<r.length;a++)i(r[a]);return i}({1:[function(e,t,n){"use strict";function r(){for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,n=e.length;n>t;++t)s[t]=e[t],c[e.charCodeAt(t)]=t;c["-".charCodeAt(0)]=62,c["_".charCodeAt(0)]=63}function i(e){var t,n,r,i,o,a,l=e.length;if(l%4>0)throw new Error("Invalid string. Length must be a multiple of 4");o="="===e[l-2]?2:"="===e[l-1]?1:0,a=new u(3*l/4-o),r=o>0?l-4:l;var s=0;for(t=0,n=0;r>t;t+=4,n+=3)i=c[e.charCodeAt(t)]<<18|c[e.charCodeAt(t+1)]<<12|c[e.charCodeAt(t+2)]<<6|c[e.charCodeAt(t+3)],a[s++]=i>>16&255,a[s++]=i>>8&255,a[s++]=255&i;return 2===o?(i=c[e.charCodeAt(t)]<<2|c[e.charCodeAt(t+1)]>>4,a[s++]=255&i):1===o&&(i=c[e.charCodeAt(t)]<<10|c[e.charCodeAt(t+1)]<<4|c[e.charCodeAt(t+2)]>>2,a[s++]=i>>8&255,a[s++]=255&i),a}function o(e){return s[e>>18&63]+s[e>>12&63]+s[e>>6&63]+s[63&e]}function a(e,t,n){for(var r,i=[],a=t;n>a;a+=3)r=(e[a]<<16)+(e[a+1]<<8)+e[a+2],i.push(o(r));return i.join("")}function l(e){for(var t,n=e.length,r=n%3,i="",o=[],l=16383,c=0,u=n-r;u>c;c+=l)o.push(a(e,c,c+l>u?u:c+l));return 1===r?(t=e[n-1],i+=s[t>>2],i+=s[t<<4&63],i+="=="):2===r&&(t=(e[n-2]<<8)+e[n-1],i+=s[t>>10],i+=s[t>>4&63],i+=s[t<<2&63],i+="="),o.push(i),o.join("")}n.toByteArray=i,n.fromByteArray=l;var s=[],c=[],u="undefined"!=typeof Uint8Array?Uint8Array:Array;r()},{}],2:[function(e,t,n){},{}],3:[function(e,t,n){(function(t){"use strict";function r(){try{var e=new Uint8Array(1);return e.foo=function(){return 42},42===e.foo()&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(t){return!1}}function i(){return a.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function o(e,t){if(i()<t)throw new RangeError("Invalid typed array length");return a.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t),e.__proto__=a.prototype):(null===e&&(e=new a(t)),e.length=t),e}function a(e,t,n){if(!(a.TYPED_ARRAY_SUPPORT||this instanceof a))return new a(e,t,n);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return u(this,e)}return l(this,e,t,n)}function l(e,t,n,r){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?d(e,t,n,r):"string"==typeof t?f(e,t,n):p(e,t)}function s(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number')}function c(e,t,n,r){return s(t),0>=t?o(e,t):void 0!==n?"string"==typeof r?o(e,t).fill(n,r):o(e,t).fill(n):o(e,t)}function u(e,t){if(s(t),e=o(e,0>t?0:0|m(t)),!a.TYPED_ARRAY_SUPPORT)for(var n=0;t>n;n++)e[n]=0;return e}function f(e,t,n){if("string"==typeof n&&""!==n||(n="utf8"),!a.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var r=0|v(t,n);return e=o(e,r),e.write(t,n),e}function h(e,t){var n=0|m(t.length);e=o(e,n);for(var r=0;n>r;r+=1)e[r]=255&t[r];return e}function d(e,t,n,r){if(t.byteLength,0>n||t.byteLength<n)throw new RangeError("'offset' is out of bounds");if(t.byteLength<n+(r||0))throw new RangeError("'length' is out of bounds");return t=void 0===r?new Uint8Array(t,n):new Uint8Array(t,n,r),a.TYPED_ARRAY_SUPPORT?(e=t,e.__proto__=a.prototype):e=h(e,t),e}function p(e,t){if(a.isBuffer(t)){var n=0|m(t.length);return e=o(e,n),0===e.length?e:(t.copy(e,0,0,n),e)}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||K(t.length)?o(e,0):h(e,t);if("Buffer"===t.type&&J(t.data))return h(e,t.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function m(e){if(e>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|e}function g(e){return+e!=e&&(e=0),a.alloc(+e)}function v(e,t){if(a.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"binary":case"raw":case"raws":return n;case"utf8":case"utf-8":case void 0:return q(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return $(e).length;default:if(r)return q(e).length;t=(""+t).toLowerCase(),r=!0}}function y(e,t,n){var r=!1;if((void 0===t||0>t)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),0>=n)return"";if(n>>>=0,t>>>=0,t>=n)return"";for(e||(e="utf8");;)switch(e){case"hex":return I(this,t,n);case"utf8":case"utf-8":return N(this,t,n);case"ascii":return E(this,t,n);case"binary":return O(this,t,n);case"base64":return M(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function x(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function b(e,t,n,r){function i(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}var o=1,a=e.length,l=t.length;if(void 0!==r&&(r=String(r).toLowerCase(),"ucs2"===r||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;o=2,a/=2,l/=2,n/=2}for(var s=-1,c=0;a>n+c;c++)if(i(e,n+c)===i(t,-1===s?0:c-s)){if(-1===s&&(s=c),c-s+1===l)return(n+s)*o}else-1!==s&&(c-=c-s),s=-1;return-1}function w(e,t,n,r){n=Number(n)||0;var i=e.length-n;r?(r=Number(r),r>i&&(r=i)):r=i;var o=t.length;if(o%2!==0)throw new Error("Invalid hex string");r>o/2&&(r=o/2);for(var a=0;r>a;a++){var l=parseInt(t.substr(2*a,2),16);if(isNaN(l))return a;e[n+a]=l}return a}function k(e,t,n,r){return V(q(t,e.length-n),e,n,r)}function S(e,t,n,r){return V(G(t),e,n,r)}function C(e,t,n,r){return S(e,t,n,r)}function L(e,t,n,r){return V($(t),e,n,r)}function T(e,t,n,r){return V(Y(t,e.length-n),e,n,r)}function M(e,t,n){return 0===t&&n===e.length?X.fromByteArray(e):X.fromByteArray(e.slice(t,n))}function N(e,t,n){n=Math.min(e.length,n);for(var r=[],i=t;n>i;){var o=e[i],a=null,l=o>239?4:o>223?3:o>191?2:1;if(n>=i+l){var s,c,u,f;switch(l){case 1:128>o&&(a=o);break;case 2:s=e[i+1],128===(192&s)&&(f=(31&o)<<6|63&s,f>127&&(a=f));break;case 3:s=e[i+1],c=e[i+2],128===(192&s)&&128===(192&c)&&(f=(15&o)<<12|(63&s)<<6|63&c,f>2047&&(55296>f||f>57343)&&(a=f));break;case 4:s=e[i+1],c=e[i+2],u=e[i+3],128===(192&s)&&128===(192&c)&&128===(192&u)&&(f=(15&o)<<18|(63&s)<<12|(63&c)<<6|63&u,f>65535&&1114112>f&&(a=f))}}null===a?(a=65533,l=1):a>65535&&(a-=65536,r.push(a>>>10&1023|55296),a=56320|1023&a),r.push(a),i+=l}return A(r)}function A(e){var t=e.length;if(Q>=t)return String.fromCharCode.apply(String,e);for(var n="",r=0;t>r;)n+=String.fromCharCode.apply(String,e.slice(r,r+=Q));return n}function E(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;n>i;i++)r+=String.fromCharCode(127&e[i]);return r}function O(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;n>i;i++)r+=String.fromCharCode(e[i]);return r}function I(e,t,n){var r=e.length;(!t||0>t)&&(t=0),(!n||0>n||n>r)&&(n=r);for(var i="",o=t;n>o;o++)i+=U(e[o]);return i}function P(e,t,n){for(var r=e.slice(t,n),i="",o=0;o<r.length;o+=2)i+=String.fromCharCode(r[o]+256*r[o+1]);return i}function R(e,t,n){if(e%1!==0||0>e)throw new RangeError("offset is not uint");if(e+t>n)throw new RangeError("Trying to access beyond buffer length")}function D(e,t,n,r,i,o){if(!a.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||o>t)throw new RangeError('"value" argument is out of bounds');if(n+r>e.length)throw new RangeError("Index out of range")}function H(e,t,n,r){0>t&&(t=65535+t+1);for(var i=0,o=Math.min(e.length-n,2);o>i;i++)e[n+i]=(t&255<<8*(r?i:1-i))>>>8*(r?i:1-i)}function W(e,t,n,r){0>t&&(t=4294967295+t+1);for(var i=0,o=Math.min(e.length-n,4);o>i;i++)e[n+i]=t>>>8*(r?i:3-i)&255}function B(e,t,n,r,i,o){if(n+r>e.length)throw new RangeError("Index out of range");if(0>n)throw new RangeError("Index out of range")}function _(e,t,n,r,i){return i||B(e,t,n,4,3.4028234663852886e38,-3.4028234663852886e38),Z.write(e,t,n,r,23,4),n+4}function F(e,t,n,r,i){return i||B(e,t,n,8,1.7976931348623157e308,-1.7976931348623157e308),Z.write(e,t,n,r,52,8),n+8}function z(e){if(e=j(e).replace(ee,""),e.length<2)return"";for(;e.length%4!==0;)e+="=";return e}function j(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function U(e){return 16>e?"0"+e.toString(16):e.toString(16)}function q(e,t){t=t||1/0;for(var n,r=e.length,i=null,o=[],a=0;r>a;a++){if(n=e.charCodeAt(a),n>55295&&57344>n){if(!i){if(n>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(56320>n){(t-=3)>-1&&o.push(239,191,189),i=n;continue}n=(i-55296<<10|n-56320)+65536}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,128>n){if((t-=1)<0)break;o.push(n)}else if(2048>n){if((t-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(65536>n){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(1114112>n))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function G(e){for(var t=[],n=0;n<e.length;n++)t.push(255&e.charCodeAt(n));return t}function Y(e,t){for(var n,r,i,o=[],a=0;a<e.length&&!((t-=2)<0);a++)n=e.charCodeAt(a),r=n>>8,i=n%256,o.push(i),o.push(r);return o}function $(e){return X.toByteArray(z(e))}function V(e,t,n,r){for(var i=0;r>i&&!(i+n>=t.length||i>=e.length);i++)t[i+n]=e[i];return i}function K(e){return e!==e}var X=e("base64-js"),Z=e("ieee754"),J=e("isarray");n.Buffer=a,n.SlowBuffer=g,n.INSPECT_MAX_BYTES=50,a.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:r(),n.kMaxLength=i(),a.poolSize=8192,a._augment=function(e){return e.__proto__=a.prototype,e},a.from=function(e,t,n){return l(null,e,t,n)},a.TYPED_ARRAY_SUPPORT&&(a.prototype.__proto__=Uint8Array.prototype,a.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&a[Symbol.species]===a&&Object.defineProperty(a,Symbol.species,{value:null,configurable:!0})),a.alloc=function(e,t,n){return c(null,e,t,n)},a.allocUnsafe=function(e){return u(null,e)},a.allocUnsafeSlow=function(e){return u(null,e)},a.isBuffer=function(e){return!(null==e||!e._isBuffer)},a.compare=function(e,t){if(!a.isBuffer(e)||!a.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var n=e.length,r=t.length,i=0,o=Math.min(n,r);o>i;++i)if(e[i]!==t[i]){n=e[i],r=t[i];break}return r>n?-1:n>r?1:0},a.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},a.concat=function(e,t){if(!J(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return a.alloc(0);var n;if(void 0===t)for(t=0,n=0;n<e.length;n++)t+=e[n].length;var r=a.allocUnsafe(t),i=0;for(n=0;n<e.length;n++){var o=e[n];if(!a.isBuffer(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(r,i),i+=o.length}return r},a.byteLength=v,a.prototype._isBuffer=!0,a.prototype.swap16=function(){var e=this.length;if(e%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;e>t;t+=2)x(this,t,t+1);return this},a.prototype.swap32=function(){var e=this.length;if(e%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;e>t;t+=4)x(this,t,t+3),x(this,t+1,t+2);return this},a.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?N(this,0,e):y.apply(this,arguments)},a.prototype.equals=function(e){if(!a.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e?!0:0===a.compare(this,e)},a.prototype.inspect=function(){var e="",t=n.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,t).match(/.{2}/g).join(" "),this.length>t&&(e+=" ... ")),"<Buffer "+e+">"},a.prototype.compare=function(e,t,n,r,i){if(!a.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),0>t||n>e.length||0>r||i>this.length)throw new RangeError("out of range index");if(r>=i&&t>=n)return 0;if(r>=i)return-1;if(t>=n)return 1;if(t>>>=0,n>>>=0,r>>>=0,i>>>=0,this===e)return 0;for(var o=i-r,l=n-t,s=Math.min(o,l),c=this.slice(r,i),u=e.slice(t,n),f=0;s>f;++f)if(c[f]!==u[f]){o=c[f],l=u[f];break}return l>o?-1:o>l?1:0},a.prototype.indexOf=function(e,t,n){if("string"==typeof t?(n=t,t=0):t>2147483647?t=2147483647:-2147483648>t&&(t=-2147483648),t>>=0,0===this.length)return-1;if(t>=this.length)return-1;if(0>t&&(t=Math.max(this.length+t,0)),"string"==typeof e&&(e=a.from(e,n)),a.isBuffer(e))return 0===e.length?-1:b(this,e,t,n);if("number"==typeof e)return a.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,e,t):b(this,[e],t,n);throw new TypeError("val must be string, number or Buffer")},a.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},a.prototype.write=function(e,t,n,r){if(void 0===t)r="utf8",n=this.length,t=0;else if(void 0===n&&"string"==typeof t)r=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t=0|t,isFinite(n)?(n=0|n,void 0===r&&(r="utf8")):(r=n,n=void 0)}var i=this.length-t;if((void 0===n||n>i)&&(n=i),e.length>0&&(0>n||0>t)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return w(this,e,t,n);case"utf8":case"utf-8":return k(this,e,t,n);case"ascii":return S(this,e,t,n);case"binary":return C(this,e,t,n);case"base64":return L(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Q=4096;a.prototype.slice=function(e,t){var n=this.length;e=~~e,t=void 0===t?n:~~t,0>e?(e+=n,0>e&&(e=0)):e>n&&(e=n),0>t?(t+=n,0>t&&(t=0)):t>n&&(t=n),e>t&&(t=e);var r;if(a.TYPED_ARRAY_SUPPORT)r=this.subarray(e,t),r.__proto__=a.prototype;else{var i=t-e;r=new a(i,void 0);for(var o=0;i>o;o++)r[o]=this[o+e]}return r},a.prototype.readUIntLE=function(e,t,n){e=0|e,t=0|t,n||R(e,t,this.length);for(var r=this[e],i=1,o=0;++o<t&&(i*=256);)r+=this[e+o]*i;return r},a.prototype.readUIntBE=function(e,t,n){e=0|e,t=0|t,n||R(e,t,this.length);for(var r=this[e+--t],i=1;t>0&&(i*=256);)r+=this[e+--t]*i;return r},a.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},a.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},a.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},a.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},a.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},a.prototype.readIntLE=function(e,t,n){e=0|e,t=0|t,n||R(e,t,this.length);for(var r=this[e],i=1,o=0;++o<t&&(i*=256);)r+=this[e+o]*i;return i*=128,r>=i&&(r-=Math.pow(2,8*t)),r},a.prototype.readIntBE=function(e,t,n){e=0|e,t=0|t,n||R(e,t,this.length);for(var r=t,i=1,o=this[e+--r];r>0&&(i*=256);)o+=this[e+--r]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*t)),o},a.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},a.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},a.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},a.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),Z.read(this,e,!0,23,4)},a.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),Z.read(this,e,!1,23,4)},a.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),Z.read(this,e,!0,52,8)},a.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),Z.read(this,e,!1,52,8)},a.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t=0|t,n=0|n,!r){var i=Math.pow(2,8*n)-1;D(this,e,t,n,i,0)}var o=1,a=0;for(this[t]=255&e;++a<n&&(o*=256);)this[t+a]=e/o&255;return t+n},a.prototype.writeUIntBE=function(e,t,n,r){if(e=+e,t=0|t,n=0|n,!r){var i=Math.pow(2,8*n)-1;D(this,e,t,n,i,0)}var o=n-1,a=1;for(this[t+o]=255&e;--o>=0&&(a*=256);)this[t+o]=e/a&255;return t+n},a.prototype.writeUInt8=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,1,255,0),a.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},a.prototype.writeUInt16LE=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):H(this,e,t,!0),t+2},a.prototype.writeUInt16BE=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):H(this,e,t,!1),t+2},a.prototype.writeUInt32LE=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):W(this,e,t,!0),t+4},a.prototype.writeUInt32BE=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):W(this,e,t,!1),t+4},a.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t=0|t,!r){var i=Math.pow(2,8*n-1);D(this,e,t,n,i-1,-i)}var o=0,a=1,l=0;for(this[t]=255&e;++o<n&&(a*=256);)0>e&&0===l&&0!==this[t+o-1]&&(l=1),this[t+o]=(e/a>>0)-l&255;return t+n},a.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t=0|t,!r){var i=Math.pow(2,8*n-1);D(this,e,t,n,i-1,-i)}var o=n-1,a=1,l=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)0>e&&0===l&&0!==this[t+o+1]&&(l=1),this[t+o]=(e/a>>0)-l&255;return t+n},a.prototype.writeInt8=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,1,127,-128),a.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),0>e&&(e=255+e+1),this[t]=255&e,t+1},a.prototype.writeInt16LE=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):H(this,e,t,!0),t+2},a.prototype.writeInt16BE=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):H(this,e,t,!1),t+2},a.prototype.writeInt32LE=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,4,2147483647,-2147483648),a.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):W(this,e,t,!0),t+4},a.prototype.writeInt32BE=function(e,t,n){return e=+e,t=0|t,n||D(this,e,t,4,2147483647,-2147483648),0>e&&(e=4294967295+e+1),a.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):W(this,e,t,!1),t+4},a.prototype.writeFloatLE=function(e,t,n){return _(this,e,t,!0,n)},a.prototype.writeFloatBE=function(e,t,n){return _(this,e,t,!1,n)},a.prototype.writeDoubleLE=function(e,t,n){return F(this,e,t,!0,n)},a.prototype.writeDoubleBE=function(e,t,n){return F(this,e,t,!1,n)},a.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&n>r&&(r=n),r===n)return 0;if(0===e.length||0===this.length)return 0;if(0>t)throw new RangeError("targetStart out of bounds");if(0>n||n>=this.length)throw new RangeError("sourceStart out of bounds");if(0>r)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t<r-n&&(r=e.length-t+n);var i,o=r-n;if(this===e&&t>n&&r>t)for(i=o-1;i>=0;i--)e[i+t]=this[i+n];else if(1e3>o||!a.TYPED_ARRAY_SUPPORT)for(i=0;o>i;i++)e[i+t]=this[i+n];else Uint8Array.prototype.set.call(e,this.subarray(n,n+o),t);return o},a.prototype.fill=function(e,t,n,r){if("string"==typeof e){if("string"==typeof t?(r=t,t=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),1===e.length){var i=e.charCodeAt(0);256>i&&(e=i)}if(void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!a.isEncoding(r))throw new TypeError("Unknown encoding: "+r)}else"number"==typeof e&&(e=255&e);if(0>t||this.length<t||this.length<n)throw new RangeError("Out of range index");if(t>=n)return this;t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0);var o;if("number"==typeof e)for(o=t;n>o;o++)this[o]=e;else{var l=a.isBuffer(e)?e:q(new a(e,r).toString()),s=l.length;for(o=0;n-t>o;o++)this[o+t]=l[o%s]}return this};var ee=/[^+\/0-9A-Za-z-_]/g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"base64-js":1,ieee754:15,isarray:16}],4:[function(e,t,n){"use strict";function r(e){return e=e||{},"function"!=typeof e.codeMirrorInstance||"function"!=typeof e.codeMirrorInstance.defineMode?void console.log("CodeMirror Spell Checker: You must provide an instance of CodeMirror via the option `codeMirrorInstance`"):(String.prototype.includes||(String.prototype.includes=function(){return-1!==String.prototype.indexOf.apply(this,arguments)}),void e.codeMirrorInstance.defineMode("spell-checker",function(t){if(!r.aff_loading){r.aff_loading=!0;var n=new XMLHttpRequest;n.open("GET","https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.aff",!0),n.onload=function(){4===n.readyState&&200===n.status&&(r.aff_data=n.responseText,r.num_loaded++,2==r.num_loaded&&(r.typo=new i("en_US",r.aff_data,r.dic_data,{platform:"any"})))},n.send(null)}if(!r.dic_loading){r.dic_loading=!0;var o=new XMLHttpRequest;o.open("GET","https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.dic",!0),o.onload=function(){4===o.readyState&&200===o.status&&(r.dic_data=o.responseText,r.num_loaded++,2==r.num_loaded&&(r.typo=new i("en_US",r.aff_data,r.dic_data,{platform:"any"})))},o.send(null)}var a='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~ ',l={token:function(e){var t=e.peek(),n="";if(a.includes(t))return e.next(),null;for(;null!=(t=e.peek())&&!a.includes(t);)n+=t,e.next();return r.typo&&!r.typo.check(n)?"spell-error":null}},s=e.codeMirrorInstance.getMode(t,t.backdrop||"text/plain");return e.codeMirrorInstance.overlayMode(s,l,!0)}))}var i=e("typo-js");r.num_loaded=0,r.aff_loading=!1,r.dic_loading=!1,r.aff_data="",r.dic_data="",r.typo,t.exports=r},{"typo-js":18}],5:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";function t(e){var t=e.getWrapperElement();e.state.fullScreenRestore={scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset,width:t.style.width,height:t.style.height},t.style.width="",t.style.height="auto",t.className+=" CodeMirror-fullscreen",document.documentElement.style.overflow="hidden",e.refresh()}function n(e){var t=e.getWrapperElement();t.className=t.className.replace(/\s*CodeMirror-fullscreen\b/,""),document.documentElement.style.overflow="";var n=e.state.fullScreenRestore;t.style.width=n.width,t.style.height=n.height,window.scrollTo(n.scrollLeft,n.scrollTop),e.refresh()}e.defineOption("fullScreen",!1,function(r,i,o){o==e.Init&&(o=!1),!o!=!i&&(i?t(r):n(r))})})},{"../../lib/codemirror":10}],6:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){function t(e){e.state.placeholder&&(e.state.placeholder.parentNode.removeChild(e.state.placeholder),e.state.placeholder=null)}function n(e){t(e);var n=e.state.placeholder=document.createElement("pre");n.style.cssText="height: 0; overflow: visible",n.className="CodeMirror-placeholder";var r=e.getOption("placeholder");"string"==typeof r&&(r=document.createTextNode(r)),n.appendChild(r),e.display.lineSpace.insertBefore(n,e.display.lineSpace.firstChild)}function r(e){o(e)&&n(e)}function i(e){var r=e.getWrapperElement(),i=o(e);r.className=r.className.replace(" CodeMirror-empty","")+(i?" CodeMirror-empty":""),i?n(e):t(e)}function o(e){return 1===e.lineCount()&&""===e.getLine(0)}e.defineOption("placeholder","",function(n,o,a){var l=a&&a!=e.Init;if(o&&!l)n.on("blur",r),n.on("change",i),n.on("swapDoc",i),i(n);else if(!o&&l){n.off("blur",r),n.off("change",i),n.off("swapDoc",i),t(n);var s=n.getWrapperElement();s.className=s.className.replace(" CodeMirror-empty","")}o&&!n.hasFocus()&&r(n)})})},{"../../lib/codemirror":10}],7:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";var t=/^(\s*)(>[> ]*|[*+-]\s|(\d+)([.)]))(\s*)/,n=/^(\s*)(>[> ]*|[*+-]|(\d+)[.)])(\s*)$/,r=/[*+-]\s/;e.commands.newlineAndIndentContinueMarkdownList=function(i){if(i.getOption("disableInput"))return e.Pass;for(var o=i.listSelections(),a=[],l=0;l<o.length;l++){var s=o[l].head,c=i.getStateAfter(s.line),u=c.list!==!1,f=0!==c.quote,h=i.getLine(s.line),d=t.exec(h);if(!o[l].empty()||!u&&!f||!d)return void i.execCommand("newlineAndIndent");if(n.test(h))i.replaceRange("",{line:s.line,ch:0},{line:s.line,ch:s.ch+1}),a[l]="\n";else{var p=d[1],m=d[5],g=r.test(d[2])||d[2].indexOf(">")>=0?d[2]:parseInt(d[3],10)+1+d[4];a[l]="\n"+p+g+m}}i.replaceSelections(a)}})},{"../../lib/codemirror":10}],8:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";e.overlayMode=function(t,n,r){return{startState:function(){return{base:e.startState(t),overlay:e.startState(n),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(r){return{base:e.copyState(t,r.base),overlay:e.copyState(n,r.overlay),basePos:r.basePos,baseCur:null,overlayPos:r.overlayPos,overlayCur:null}},token:function(e,i){return(e!=i.streamSeen||Math.min(i.basePos,i.overlayPos)<e.start)&&(i.streamSeen=e,i.basePos=i.overlayPos=e.start),e.start==i.basePos&&(i.baseCur=t.token(e,i.base),i.basePos=e.pos),e.start==i.overlayPos&&(e.pos=e.start,i.overlayCur=n.token(e,i.overlay),i.overlayPos=e.pos),e.pos=Math.min(i.basePos,i.overlayPos),null==i.overlayCur?i.baseCur:null!=i.baseCur&&i.overlay.combineTokens||r&&null==i.overlay.combineTokens?i.baseCur+" "+i.overlayCur:i.overlayCur},indent:t.indent&&function(e,n){return t.indent(e.base,n)},electricChars:t.electricChars,innerMode:function(e){return{state:e.base,mode:t}},blankLine:function(e){t.blankLine&&t.blankLine(e.base),n.blankLine&&n.blankLine(e.overlay)}}}})},{"../../lib/codemirror":10}],9:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";function t(e){e.operation(function(){a(e)})}function n(e){e.state.markedSelection.length&&e.operation(function(){i(e)})}function r(e,t,n,r){if(0!=c(t,n))for(var i=e.state.markedSelection,o=e.state.markedSelectionStyle,a=t.line;;){var u=a==t.line?t:s(a,0),f=a+l,h=f>=n.line,d=h?n:s(f,0),p=e.markText(u,d,{className:o});if(null==r?i.push(p):i.splice(r++,0,p),h)break;a=f}}function i(e){for(var t=e.state.markedSelection,n=0;n<t.length;++n)t[n].clear();t.length=0}function o(e){i(e);for(var t=e.listSelections(),n=0;n<t.length;n++)r(e,t[n].from(),t[n].to())}function a(e){if(!e.somethingSelected())return i(e);if(e.listSelections().length>1)return o(e);var t=e.getCursor("start"),n=e.getCursor("end"),a=e.state.markedSelection;if(!a.length)return r(e,t,n);var s=a[0].find(),u=a[a.length-1].find();if(!s||!u||n.line-t.line<l||c(t,u.to)>=0||c(n,s.from)<=0)return o(e);for(;c(t,s.from)>0;)a.shift().clear(),s=a[0].find();for(c(t,s.from)<0&&(s.to.line-t.line<l?(a.shift().clear(),r(e,t,s.to,0)):r(e,t,s.from,0));c(n,u.to)<0;)a.pop().clear(),u=a[a.length-1].find();c(n,u.to)>0&&(n.line-u.from.line<l?(a.pop().clear(),r(e,u.from,n)):r(e,u.to,n))}e.defineOption("styleSelectedText",!1,function(r,a,l){var s=l&&l!=e.Init;a&&!s?(r.state.markedSelection=[],r.state.markedSelectionStyle="string"==typeof a?a:"CodeMirror-selectedtext",o(r),r.on("cursorActivity",t),r.on("change",n)):!a&&s&&(r.off("cursorActivity",t),r.off("change",n),i(r),r.state.markedSelection=r.state.markedSelectionStyle=null)});var l=8,s=e.Pos,c=e.cmpPos})},{"../../lib/codemirror":10}],10:[function(t,n,r){!function(t){if("object"==typeof r&&"object"==typeof n)n.exports=t();else{if("function"==typeof e&&e.amd)return e([],t);(this||window).CodeMirror=t()}}(function(){"use strict";function e(n,r){if(!(this instanceof e))return new e(n,r);this.options=r=r?Wi(r):{},Wi(ea,r,!1),d(r);var i=r.value;"string"==typeof i&&(i=new Ca(i,r.mode,null,r.lineSeparator)),this.doc=i;var o=new e.inputStyles[r.inputStyle](this),a=this.display=new t(n,i,o);a.wrapper.CodeMirror=this,c(this),l(this),r.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),r.autofocus&&!Ao&&a.input.focus(),v(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new Ei,keySeq:null,specialChars:null};var s=this;xo&&11>bo&&setTimeout(function(){s.display.input.reset(!0)},20),jt(this),Ki(),bt(this),this.curOp.forceUpdate=!0,Xr(this,i),r.autofocus&&!Ao||s.hasFocus()?setTimeout(Bi(vn,this),20):yn(this);for(var u in ta)ta.hasOwnProperty(u)&&ta[u](this,r[u],na);k(this),r.finishInit&&r.finishInit(this);for(var f=0;f<aa.length;++f)aa[f](this);kt(this),wo&&r.lineWrapping&&"optimizelegibility"==getComputedStyle(a.lineDiv).textRendering&&(a.lineDiv.style.textRendering="auto")}function t(e,t,n){var r=this;this.input=n,r.scrollbarFiller=ji("div",null,"CodeMirror-scrollbar-filler"),r.scrollbarFiller.setAttribute("cm-not-content","true"),r.gutterFiller=ji("div",null,"CodeMirror-gutter-filler"),r.gutterFiller.setAttribute("cm-not-content","true"),r.lineDiv=ji("div",null,"CodeMirror-code"),r.selectionDiv=ji("div",null,null,"position: relative; z-index: 1"),r.cursorDiv=ji("div",null,"CodeMirror-cursors"),r.measure=ji("div",null,"CodeMirror-measure"),r.lineMeasure=ji("div",null,"CodeMirror-measure"),r.lineSpace=ji("div",[r.measure,r.lineMeasure,r.selectionDiv,r.cursorDiv,r.lineDiv],null,"position: relative; outline: none"),r.mover=ji("div",[ji("div",[r.lineSpace],"CodeMirror-lines")],null,"position: relative"),r.sizer=ji("div",[r.mover],"CodeMirror-sizer"),r.sizerWidth=null,r.heightForcer=ji("div",null,null,"position: absolute; height: "+Da+"px; width: 1px;"),r.gutters=ji("div",null,"CodeMirror-gutters"),r.lineGutter=null,r.scroller=ji("div",[r.sizer,r.heightForcer,r.gutters],"CodeMirror-scroll"),r.scroller.setAttribute("tabIndex","-1"),r.wrapper=ji("div",[r.scrollbarFiller,r.gutterFiller,r.scroller],"CodeMirror"),xo&&8>bo&&(r.gutters.style.zIndex=-1,r.scroller.style.paddingRight=0),wo||go&&Ao||(r.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(r.wrapper):e(r.wrapper)),r.viewFrom=r.viewTo=t.first,r.reportedViewFrom=r.reportedViewTo=t.first,r.view=[],r.renderedView=null,r.externalMeasured=null,r.viewOffset=0,r.lastWrapHeight=r.lastWrapWidth=0,r.updateLineNumbers=null,r.nativeBarWidth=r.barHeight=r.barWidth=0,r.scrollbarsClipped=!1,r.lineNumWidth=r.lineNumInnerWidth=r.lineNumChars=null,r.alignWidgets=!1,r.cachedCharWidth=r.cachedTextHeight=r.cachedPaddingH=null, -r.maxLine=null,r.maxLineLength=0,r.maxLineChanged=!1,r.wheelDX=r.wheelDY=r.wheelStartX=r.wheelStartY=null,r.shift=!1,r.selForContextMenu=null,r.activeTouch=null,n.init(r)}function n(t){t.doc.mode=e.getMode(t.options,t.doc.modeOption),r(t)}function r(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.frontier=e.doc.first,_e(e,100),e.state.modeGen++,e.curOp&&Dt(e)}function i(e){e.options.lineWrapping?(Ja(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(Za(e.display.wrapper,"CodeMirror-wrap"),h(e)),a(e),Dt(e),lt(e),setTimeout(function(){y(e)},100)}function o(e){var t=yt(e.display),n=e.options.lineWrapping,r=n&&Math.max(5,e.display.scroller.clientWidth/xt(e.display)-3);return function(i){if(kr(e.doc,i))return 0;var o=0;if(i.widgets)for(var a=0;a<i.widgets.length;a++)i.widgets[a].height&&(o+=i.widgets[a].height);return n?o+(Math.ceil(i.text.length/r)||1)*t:o+t}}function a(e){var t=e.doc,n=o(e);t.iter(function(e){var t=n(e);t!=e.height&&ei(e,t)})}function l(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),lt(e)}function s(e){c(e),Dt(e),setTimeout(function(){w(e)},20)}function c(e){var t=e.display.gutters,n=e.options.gutters;Ui(t);for(var r=0;r<n.length;++r){var i=n[r],o=t.appendChild(ji("div",null,"CodeMirror-gutter "+i));"CodeMirror-linenumbers"==i&&(e.display.lineGutter=o,o.style.width=(e.display.lineNumWidth||1)+"px")}t.style.display=r?"":"none",u(e)}function u(e){var t=e.display.gutters.offsetWidth;e.display.sizer.style.marginLeft=t+"px"}function f(e){if(0==e.height)return 0;for(var t,n=e.text.length,r=e;t=mr(r);){var i=t.find(0,!0);r=i.from.line,n+=i.from.ch-i.to.ch}for(r=e;t=gr(r);){var i=t.find(0,!0);n-=r.text.length-i.from.ch,r=i.to.line,n+=r.text.length-i.to.ch}return n}function h(e){var t=e.display,n=e.doc;t.maxLine=Zr(n,n.first),t.maxLineLength=f(t.maxLine),t.maxLineChanged=!0,n.iter(function(e){var n=f(e);n>t.maxLineLength&&(t.maxLineLength=n,t.maxLine=e)})}function d(e){var t=Pi(e.gutters,"CodeMirror-linenumbers");-1==t&&e.lineNumbers?e.gutters=e.gutters.concat(["CodeMirror-linenumbers"]):t>-1&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}function p(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+qe(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+Ye(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}function m(e,t,n){this.cm=n;var r=this.vert=ji("div",[ji("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=ji("div",[ji("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");e(r),e(i),Ea(r,"scroll",function(){r.clientHeight&&t(r.scrollTop,"vertical")}),Ea(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,xo&&8>bo&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")}function g(){}function v(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.display.scrollbars.addClass&&Za(t.display.wrapper,t.display.scrollbars.addClass)),t.display.scrollbars=new e.scrollbarModel[t.options.scrollbarStyle](function(e){t.display.wrapper.insertBefore(e,t.display.scrollbarFiller),Ea(e,"mousedown",function(){t.state.focused&&setTimeout(function(){t.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,n){"horizontal"==n?on(t,e):rn(t,e)},t),t.display.scrollbars.addClass&&Ja(t.display.wrapper,t.display.scrollbars.addClass)}function y(e,t){t||(t=p(e));var n=e.display.barWidth,r=e.display.barHeight;x(e,t);for(var i=0;4>i&&n!=e.display.barWidth||r!=e.display.barHeight;i++)n!=e.display.barWidth&&e.options.lineWrapping&&O(e),x(e,p(e)),n=e.display.barWidth,r=e.display.barHeight}function x(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+"px",n.heightForcer.style.borderBottom=r.bottom+"px solid transparent",r.right&&r.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=r.bottom+"px",n.scrollbarFiller.style.width=r.right+"px"):n.scrollbarFiller.style.display="",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=r.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}function b(e,t,n){var r=n&&null!=n.top?Math.max(0,n.top):e.scroller.scrollTop;r=Math.floor(r-Ue(e));var i=n&&null!=n.bottom?n.bottom:r+e.wrapper.clientHeight,o=ni(t,r),a=ni(t,i);if(n&&n.ensure){var l=n.ensure.from.line,s=n.ensure.to.line;o>l?(o=l,a=ni(t,ri(Zr(t,l))+e.wrapper.clientHeight)):Math.min(s,t.lastLine())>=a&&(o=ni(t,ri(Zr(t,s))-e.wrapper.clientHeight),a=s)}return{from:o,to:Math.max(a,o+1)}}function w(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=C(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=r+"px",a=0;a<n.length;a++)if(!n[a].hidden){e.options.fixedGutter&&n[a].gutter&&(n[a].gutter.style.left=o);var l=n[a].alignable;if(l)for(var s=0;s<l.length;s++)l[s].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=r+i+"px")}}function k(e){if(!e.options.lineNumbers)return!1;var t=e.doc,n=S(e.options,t.first+t.size-1),r=e.display;if(n.length!=r.lineNumChars){var i=r.measure.appendChild(ji("div",[ji("div",n)],"CodeMirror-linenumber CodeMirror-gutter-elt")),o=i.firstChild.offsetWidth,a=i.offsetWidth-o;return r.lineGutter.style.width="",r.lineNumInnerWidth=Math.max(o,r.lineGutter.offsetWidth-a)+1,r.lineNumWidth=r.lineNumInnerWidth+a,r.lineNumChars=r.lineNumInnerWidth?n.length:-1,r.lineGutter.style.width=r.lineNumWidth+"px",u(e),!0}return!1}function S(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function C(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function L(e,t,n){var r=e.display;this.viewport=t,this.visible=b(r,e.doc,t),this.editorIsHidden=!r.wrapper.offsetWidth,this.wrapperHeight=r.wrapper.clientHeight,this.wrapperWidth=r.wrapper.clientWidth,this.oldDisplayWidth=$e(e),this.force=n,this.dims=P(e),this.events=[]}function T(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=Ye(e)+"px",t.sizer.style.marginBottom=-t.nativeBarWidth+"px",t.sizer.style.borderRightWidth=Ye(e)+"px",t.scrollbarsClipped=!0)}function M(e,t){var n=e.display,r=e.doc;if(t.editorIsHidden)return Wt(e),!1;if(!t.force&&t.visible.from>=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==zt(e))return!1;k(e)&&(Wt(e),t.dims=P(e));var i=r.first+r.size,o=Math.max(t.visible.from-e.options.viewportMargin,r.first),a=Math.min(i,t.visible.to+e.options.viewportMargin);n.viewFrom<o&&o-n.viewFrom<20&&(o=Math.max(r.first,n.viewFrom)),n.viewTo>a&&n.viewTo-a<20&&(a=Math.min(i,n.viewTo)),Wo&&(o=br(e.doc,o),a=wr(e.doc,a));var l=o!=n.viewFrom||a!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;Ft(e,o,a),n.viewOffset=ri(Zr(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var s=zt(e);if(!l&&0==s&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var c=Gi();return s>4&&(n.lineDiv.style.display="none"),R(e,n.updateLineNumbers,t.dims),s>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,c&&Gi()!=c&&c.offsetHeight&&c.focus(),Ui(n.cursorDiv),Ui(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,l&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,_e(e,400)),n.updateLineNumbers=null,!0}function N(e,t){for(var n=t.viewport,r=!0;(r&&e.options.lineWrapping&&t.oldDisplayWidth!=$e(e)||(n&&null!=n.top&&(n={top:Math.min(e.doc.height+qe(e.display)-Ve(e),n.top)}),t.visible=b(e.display,e.doc,n),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&M(e,t);r=!1){O(e);var i=p(e);Re(e),y(e,i),E(e,i)}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function A(e,t){var n=new L(e,t);if(M(e,n)){O(e),N(e,n);var r=p(e);Re(e),y(e,r),E(e,r),n.finish()}}function E(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Ye(e)+"px"}function O(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=0;r<t.view.length;r++){var i,o=t.view[r];if(!o.hidden){if(xo&&8>bo){var a=o.node.offsetTop+o.node.offsetHeight;i=a-n,n=a}else{var l=o.node.getBoundingClientRect();i=l.bottom-l.top}var s=o.line.height-i;if(2>i&&(i=yt(t)),(s>.001||-.001>s)&&(ei(o.line,i),I(o.line),o.rest))for(var c=0;c<o.rest.length;c++)I(o.rest[c])}}}function I(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t)e.widgets[t].height=e.widgets[t].node.parentNode.offsetHeight}function P(e){for(var t=e.display,n={},r={},i=t.gutters.clientLeft,o=t.gutters.firstChild,a=0;o;o=o.nextSibling,++a)n[e.options.gutters[a]]=o.offsetLeft+o.clientLeft+i,r[e.options.gutters[a]]=o.clientWidth;return{fixedPos:C(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function R(e,t,n){function r(t){var n=t.nextSibling;return wo&&Eo&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),n}for(var i=e.display,o=e.options.lineNumbers,a=i.lineDiv,l=a.firstChild,s=i.view,c=i.viewFrom,u=0;u<s.length;u++){var f=s[u];if(f.hidden);else if(f.node&&f.node.parentNode==a){for(;l!=f.node;)l=r(l);var h=o&&null!=t&&c>=t&&f.lineNumber;f.changes&&(Pi(f.changes,"gutter")>-1&&(h=!1),D(e,f,c,n)),h&&(Ui(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(S(e.options,c)))),l=f.node.nextSibling}else{var d=U(e,f,c,n);a.insertBefore(d,l)}c+=f.size}for(;l;)l=r(l)}function D(e,t,n,r){for(var i=0;i<t.changes.length;i++){var o=t.changes[i];"text"==o?_(e,t):"gutter"==o?z(e,t,n,r):"class"==o?F(t):"widget"==o&&j(e,t,r)}t.changes=null}function H(e){return e.node==e.text&&(e.node=ji("div",null,null,"position: relative"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),xo&&8>bo&&(e.node.style.zIndex=2)),e.node}function W(e){var t=e.bgClass?e.bgClass+" "+(e.line.bgClass||""):e.line.bgClass;if(t&&(t+=" CodeMirror-linebackground"),e.background)t?e.background.className=t:(e.background.parentNode.removeChild(e.background),e.background=null);else if(t){var n=H(e);e.background=n.insertBefore(ji("div",null,t),n.firstChild)}}function B(e,t){var n=e.display.externalMeasured;return n&&n.line==t.line?(e.display.externalMeasured=null,t.measure=n.measure,n.built):Br(e,t)}function _(e,t){var n=t.text.className,r=B(e,t);t.text==t.node&&(t.node=r.pre),t.text.parentNode.replaceChild(r.pre,t.text),t.text=r.pre,r.bgClass!=t.bgClass||r.textClass!=t.textClass?(t.bgClass=r.bgClass,t.textClass=r.textClass,F(t)):n&&(t.text.className=n)}function F(e){W(e),e.line.wrapClass?H(e).className=e.line.wrapClass:e.node!=e.text&&(e.node.className="");var t=e.textClass?e.textClass+" "+(e.line.textClass||""):e.line.textClass;e.text.className=t||""}function z(e,t,n,r){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var i=H(t);t.gutterBackground=ji("div",null,"CodeMirror-gutter-background "+t.line.gutterClass,"left: "+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+"px; width: "+r.gutterTotalWidth+"px"),i.insertBefore(t.gutterBackground,t.text)}var o=t.line.gutterMarkers;if(e.options.lineNumbers||o){var i=H(t),a=t.gutter=ji("div",null,"CodeMirror-gutter-wrapper","left: "+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+"px");if(e.display.input.setUneditable(a),i.insertBefore(a,t.text),t.line.gutterClass&&(a.className+=" "+t.line.gutterClass),!e.options.lineNumbers||o&&o["CodeMirror-linenumbers"]||(t.lineNumber=a.appendChild(ji("div",S(e.options,n),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+r.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+e.display.lineNumInnerWidth+"px"))),o)for(var l=0;l<e.options.gutters.length;++l){var s=e.options.gutters[l],c=o.hasOwnProperty(s)&&o[s];c&&a.appendChild(ji("div",[c],"CodeMirror-gutter-elt","left: "+r.gutterLeft[s]+"px; width: "+r.gutterWidth[s]+"px"))}}}function j(e,t,n){t.alignable&&(t.alignable=null);for(var r,i=t.node.firstChild;i;i=r){var r=i.nextSibling;"CodeMirror-linewidget"==i.className&&t.node.removeChild(i)}q(e,t,n)}function U(e,t,n,r){var i=B(e,t);return t.text=t.node=i.pre,i.bgClass&&(t.bgClass=i.bgClass),i.textClass&&(t.textClass=i.textClass),F(t),z(e,t,n,r),q(e,t,r),t.node}function q(e,t,n){if(G(e,t.line,t,n,!0),t.rest)for(var r=0;r<t.rest.length;r++)G(e,t.rest[r],t,n,!1)}function G(e,t,n,r,i){if(t.widgets)for(var o=H(n),a=0,l=t.widgets;a<l.length;++a){var s=l[a],c=ji("div",[s.node],"CodeMirror-linewidget");s.handleMouseEvents||c.setAttribute("cm-ignore-events","true"),Y(s,c,n,r),e.display.input.setUneditable(c),i&&s.above?o.insertBefore(c,n.gutter||n.text):o.appendChild(c),Ci(s,"redraw")}}function Y(e,t,n,r){if(e.noHScroll){(n.alignable||(n.alignable=[])).push(t);var i=r.wrapperWidth;t.style.left=r.fixedPos+"px",e.coverGutter||(i-=r.gutterTotalWidth,t.style.paddingLeft=r.gutterTotalWidth+"px"),t.style.width=i+"px"}e.coverGutter&&(t.style.zIndex=5,t.style.position="relative",e.noHScroll||(t.style.marginLeft=-r.gutterTotalWidth+"px"))}function $(e){return Bo(e.line,e.ch)}function V(e,t){return _o(e,t)<0?t:e}function K(e,t){return _o(e,t)<0?e:t}function X(e){e.state.focused||(e.display.input.focus(),vn(e))}function Z(e,t,n,r,i){var o=e.doc;e.display.shift=!1,r||(r=o.sel);var a=e.state.pasteIncoming||"paste"==i,l=o.splitLines(t),s=null;if(a&&r.ranges.length>1)if(Fo&&Fo.text.join("\n")==t){if(r.ranges.length%Fo.text.length==0){s=[];for(var c=0;c<Fo.text.length;c++)s.push(o.splitLines(Fo.text[c]))}}else l.length==r.ranges.length&&(s=Ri(l,function(e){return[e]}));for(var c=r.ranges.length-1;c>=0;c--){var u=r.ranges[c],f=u.from(),h=u.to();u.empty()&&(n&&n>0?f=Bo(f.line,f.ch-n):e.state.overwrite&&!a?h=Bo(h.line,Math.min(Zr(o,h.line).text.length,h.ch+Ii(l).length)):Fo&&Fo.lineWise&&Fo.text.join("\n")==t&&(f=h=Bo(f.line,0)));var d=e.curOp.updateInput,p={from:f,to:h,text:s?s[c%s.length]:l,origin:i||(a?"paste":e.state.cutIncoming?"cut":"+input")};Tn(e.doc,p),Ci(e,"inputRead",e,p)}t&&!a&&Q(e,t),Bn(e),e.curOp.updateInput=d,e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=!1}function J(e,t){var n=e.clipboardData&&e.clipboardData.getData("text/plain");return n?(e.preventDefault(),t.isReadOnly()||t.options.disableInput||At(t,function(){Z(t,n,0,null,"paste")}),!0):void 0}function Q(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;r>=0;r--){var i=n.ranges[r];if(!(i.head.ch>100||r&&n.ranges[r-1].head.line==i.head.line)){var o=e.getModeAt(i.head),a=!1;if(o.electricChars){for(var l=0;l<o.electricChars.length;l++)if(t.indexOf(o.electricChars.charAt(l))>-1){a=Fn(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(Zr(e.doc,i.head.line).text.slice(0,i.head.ch))&&(a=Fn(e,i.head.line,"smart"));a&&Ci(e,"electricInput",e,i.head.line)}}}function ee(e){for(var t=[],n=[],r=0;r<e.doc.sel.ranges.length;r++){var i=e.doc.sel.ranges[r].head.line,o={anchor:Bo(i,0),head:Bo(i+1,0)};n.push(o),t.push(e.getRange(o.anchor,o.head))}return{text:t,ranges:n}}function te(e){e.setAttribute("autocorrect","off"),e.setAttribute("autocapitalize","off"),e.setAttribute("spellcheck","false")}function ne(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new Ei,this.inaccurateSelection=!1,this.hasSelection=!1,this.composing=null}function re(){var e=ji("textarea",null,null,"position: absolute; padding: 0; width: 1px; height: 1em; outline: none"),t=ji("div",[e],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return wo?e.style.width="1000px":e.setAttribute("wrap","off"),No&&(e.style.border="1px solid black"),te(e),t}function ie(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new Ei,this.gracePeriod=!1}function oe(e,t){var n=Qe(e,t.line);if(!n||n.hidden)return null;var r=Zr(e.doc,t.line),i=Xe(n,r,t.line),o=ii(r),a="left";if(o){var l=co(o,t.ch);a=l%2?"right":"left"}var s=nt(i.map,t.ch,a);return s.offset="right"==s.collapse?s.end:s.start,s}function ae(e,t){return t&&(e.bad=!0),e}function le(e,t,n){var r;if(t==e.display.lineDiv){if(r=e.display.lineDiv.childNodes[n],!r)return ae(e.clipPos(Bo(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i<e.display.view.length;i++){var o=e.display.view[i];if(o.node==r)return se(o,t,n)}}function se(e,t,n){function r(t,n,r){for(var i=-1;i<(u?u.length:0);i++)for(var o=0>i?c.map:u[i],a=0;a<o.length;a+=3){var l=o[a+2];if(l==t||l==n){var s=ti(0>i?e.line:e.rest[i]),f=o[a]+r;return(0>r||l!=t)&&(f=o[a+(r?1:0)]),Bo(s,f)}}}var i=e.text.firstChild,o=!1;if(!t||!Va(i,t))return ae(Bo(ti(e.line),0),!0);if(t==i&&(o=!0,t=i.childNodes[n],n=0,!t)){var a=e.rest?Ii(e.rest):e.line;return ae(Bo(ti(a),a.text.length),o)}var l=3==t.nodeType?t:null,s=t;for(l||1!=t.childNodes.length||3!=t.firstChild.nodeType||(l=t.firstChild,n&&(n=l.nodeValue.length));s.parentNode!=i;)s=s.parentNode;var c=e.measure,u=c.maps,f=r(l,s,n);if(f)return ae(f,o);for(var h=s.nextSibling,d=l?l.nodeValue.length-n:0;h;h=h.nextSibling){if(f=r(h,h.firstChild,0))return ae(Bo(f.line,f.ch-d),o);d+=h.textContent.length}for(var p=s.previousSibling,d=n;p;p=p.previousSibling){if(f=r(p,p.firstChild,-1))return ae(Bo(f.line,f.ch+d),o);d+=h.textContent.length}}function ce(e,t,n,r,i){function o(e){return function(t){return t.id==e}}function a(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(null!=n)return""==n&&(n=t.textContent.replace(/\u200b/g,"")),void(l+=n);var u,f=t.getAttribute("cm-marker");if(f){var h=e.findMarks(Bo(r,0),Bo(i+1,0),o(+f));return void(h.length&&(u=h[0].find())&&(l+=Jr(e.doc,u.from,u.to).join(c)))}if("false"==t.getAttribute("contenteditable"))return;for(var d=0;d<t.childNodes.length;d++)a(t.childNodes[d]);/^(pre|div|p)$/i.test(t.nodeName)&&(s=!0)}else if(3==t.nodeType){var p=t.nodeValue;if(!p)return;s&&(l+=c,s=!1),l+=p}}for(var l="",s=!1,c=e.doc.lineSeparator();a(t),t!=n;)t=t.nextSibling;return l}function ue(e,t){this.ranges=e,this.primIndex=t}function fe(e,t){this.anchor=e,this.head=t}function he(e,t){var n=e[t];e.sort(function(e,t){return _o(e.from(),t.from())}),t=Pi(e,n);for(var r=1;r<e.length;r++){var i=e[r],o=e[r-1];if(_o(o.to(),i.from())>=0){var a=K(o.from(),i.from()),l=V(o.to(),i.to()),s=o.empty()?i.from()==i.head:o.from()==o.head;t>=r&&--t,e.splice(--r,2,new fe(s?l:a,s?a:l))}}return new ue(e,t)}function de(e,t){return new ue([new fe(e,t||e)],0)}function pe(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function me(e,t){if(t.line<e.first)return Bo(e.first,0);var n=e.first+e.size-1;return t.line>n?Bo(n,Zr(e,n).text.length):ge(t,Zr(e,t.line).text.length)}function ge(e,t){var n=e.ch;return null==n||n>t?Bo(e.line,t):0>n?Bo(e.line,0):e}function ve(e,t){return t>=e.first&&t<e.first+e.size}function ye(e,t){for(var n=[],r=0;r<t.length;r++)n[r]=me(e,t[r]);return n}function xe(e,t,n,r){if(e.cm&&e.cm.display.shift||e.extend){var i=t.anchor;if(r){var o=_o(n,i)<0;o!=_o(r,i)<0?(i=n,n=r):o!=_o(n,r)<0&&(n=r)}return new fe(i,n)}return new fe(r||n,n)}function be(e,t,n,r){Te(e,new ue([xe(e,e.sel.primary(),t,n)],0),r)}function we(e,t,n){for(var r=[],i=0;i<e.sel.ranges.length;i++)r[i]=xe(e,e.sel.ranges[i],t[i],null);var o=he(r,e.sel.primIndex);Te(e,o,n)}function ke(e,t,n,r){var i=e.sel.ranges.slice(0);i[t]=n,Te(e,he(i,e.sel.primIndex),r)}function Se(e,t,n,r){Te(e,de(t,n),r)}function Ce(e,t,n){var r={ranges:t.ranges,update:function(t){this.ranges=[];for(var n=0;n<t.length;n++)this.ranges[n]=new fe(me(e,t[n].anchor),me(e,t[n].head))},origin:n&&n.origin};return Pa(e,"beforeSelectionChange",e,r),e.cm&&Pa(e.cm,"beforeSelectionChange",e.cm,r),r.ranges!=t.ranges?he(r.ranges,r.ranges.length-1):t}function Le(e,t,n){var r=e.history.done,i=Ii(r);i&&i.ranges?(r[r.length-1]=t,Me(e,t,n)):Te(e,t,n)}function Te(e,t,n){Me(e,t,n),fi(e,e.sel,e.cm?e.cm.curOp.id:NaN,n)}function Me(e,t,n){(Ni(e,"beforeSelectionChange")||e.cm&&Ni(e.cm,"beforeSelectionChange"))&&(t=Ce(e,t,n));var r=n&&n.bias||(_o(t.primary().head,e.sel.primary().head)<0?-1:1);Ne(e,Ee(e,t,r,!0)),n&&n.scroll===!1||!e.cm||Bn(e.cm)}function Ne(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=e.cm.curOp.selectionChanged=!0,Mi(e.cm)),Ci(e,"cursorActivity",e))}function Ae(e){Ne(e,Ee(e,e.sel,null,!1),Wa)}function Ee(e,t,n,r){for(var i,o=0;o<t.ranges.length;o++){var a=t.ranges[o],l=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],s=Ie(e,a.anchor,l&&l.anchor,n,r),c=Ie(e,a.head,l&&l.head,n,r);(i||s!=a.anchor||c!=a.head)&&(i||(i=t.ranges.slice(0,o)),i[o]=new fe(s,c))}return i?he(i,t.primIndex):t}function Oe(e,t,n,r,i){var o=Zr(e,t.line);if(o.markedSpans)for(var a=0;a<o.markedSpans.length;++a){var l=o.markedSpans[a],s=l.marker;if((null==l.from||(s.inclusiveLeft?l.from<=t.ch:l.from<t.ch))&&(null==l.to||(s.inclusiveRight?l.to>=t.ch:l.to>t.ch))){if(i&&(Pa(s,"beforeCursorEnter"),s.explicitlyCleared)){if(o.markedSpans){--a;continue}break}if(!s.atomic)continue;if(n){var c,u=s.find(0>r?1:-1);if((0>r?s.inclusiveRight:s.inclusiveLeft)&&(u=Pe(e,u,-r,u&&u.line==t.line?o:null)),u&&u.line==t.line&&(c=_o(u,n))&&(0>r?0>c:c>0))return Oe(e,u,t,r,i)}var f=s.find(0>r?-1:1);return(0>r?s.inclusiveLeft:s.inclusiveRight)&&(f=Pe(e,f,r,f.line==t.line?o:null)),f?Oe(e,f,t,r,i):null}}return t}function Ie(e,t,n,r,i){var o=r||1,a=Oe(e,t,n,o,i)||!i&&Oe(e,t,n,o,!0)||Oe(e,t,n,-o,i)||!i&&Oe(e,t,n,-o,!0);return a?a:(e.cantEdit=!0,Bo(e.first,0))}function Pe(e,t,n,r){return 0>n&&0==t.ch?t.line>e.first?me(e,Bo(t.line-1)):null:n>0&&t.ch==(r||Zr(e,t.line)).text.length?t.line<e.first+e.size-1?Bo(t.line+1,0):null:new Bo(t.line,t.ch+n)}function Re(e){e.display.input.showSelection(e.display.input.prepareSelection())}function De(e,t){for(var n=e.doc,r={},i=r.cursors=document.createDocumentFragment(),o=r.selection=document.createDocumentFragment(),a=0;a<n.sel.ranges.length;a++)if(t!==!1||a!=n.sel.primIndex){var l=n.sel.ranges[a];if(!(l.from().line>=e.display.viewTo||l.to().line<e.display.viewFrom)){var s=l.empty();(s||e.options.showCursorWhenSelecting)&&He(e,l.head,i),s||We(e,l,o)}}return r}function He(e,t,n){var r=dt(e,t,"div",null,null,!e.options.singleCursorHeightPerLine),i=n.appendChild(ji("div"," ","CodeMirror-cursor"));if(i.style.left=r.left+"px",i.style.top=r.top+"px",i.style.height=Math.max(0,r.bottom-r.top)*e.options.cursorHeight+"px",r.other){var o=n.appendChild(ji("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));o.style.display="",o.style.left=r.other.left+"px",o.style.top=r.other.top+"px",o.style.height=.85*(r.other.bottom-r.other.top)+"px"}}function We(e,t,n){function r(e,t,n,r){0>t&&(t=0),t=Math.round(t),r=Math.round(r),l.appendChild(ji("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px; top: "+t+"px; width: "+(null==n?u-e:n)+"px; height: "+(r-t)+"px"))}function i(t,n,i){function o(n,r){return ht(e,Bo(t,n),"div",f,r)}var l,s,f=Zr(a,t),h=f.text.length;return eo(ii(f),n||0,null==i?h:i,function(e,t,a){var f,d,p,m=o(e,"left");if(e==t)f=m,d=p=m.left;else{if(f=o(t-1,"right"),"rtl"==a){var g=m;m=f,f=g}d=m.left,p=f.right}null==n&&0==e&&(d=c),f.top-m.top>3&&(r(d,m.top,null,m.bottom),d=c,m.bottom<f.top&&r(d,m.bottom,null,f.top)),null==i&&t==h&&(p=u),(!l||m.top<l.top||m.top==l.top&&m.left<l.left)&&(l=m),(!s||f.bottom>s.bottom||f.bottom==s.bottom&&f.right>s.right)&&(s=f),c+1>d&&(d=c),r(d,f.top,p-d,f.bottom)}),{start:l,end:s}}var o=e.display,a=e.doc,l=document.createDocumentFragment(),s=Ge(e.display),c=s.left,u=Math.max(o.sizerWidth,$e(e)-o.sizer.offsetLeft)-s.right,f=t.from(),h=t.to();if(f.line==h.line)i(f.line,f.ch,h.ch);else{var d=Zr(a,f.line),p=Zr(a,h.line),m=yr(d)==yr(p),g=i(f.line,f.ch,m?d.text.length+1:null).end,v=i(h.line,m?0:null,h.ch).start;m&&(g.top<v.top-2?(r(g.right,g.top,null,g.bottom),r(c,v.top,v.left,v.bottom)):r(g.right,g.top,v.left-g.right,g.bottom)),g.bottom<v.top&&r(c,g.bottom,null,v.top)}n.appendChild(l)}function Be(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var n=!0;t.cursorDiv.style.visibility="",e.options.cursorBlinkRate>0?t.blinker=setInterval(function(){t.cursorDiv.style.visibility=(n=!n)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function _e(e,t){e.doc.mode.startState&&e.doc.frontier<e.display.viewTo&&e.state.highlight.set(t,Bi(Fe,e))}function Fe(e){var t=e.doc;if(t.frontier<t.first&&(t.frontier=t.first),!(t.frontier>=e.display.viewTo)){var n=+new Date+e.options.workTime,r=sa(t.mode,je(e,t.frontier)),i=[];t.iter(t.frontier,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(t.frontier>=e.display.viewFrom){var a=o.styles,l=o.text.length>e.options.maxHighlightLength,s=Rr(e,o,l?sa(t.mode,r):r,!0);o.styles=s.styles;var c=o.styleClasses,u=s.classes;u?o.styleClasses=u:c&&(o.styleClasses=null);for(var f=!a||a.length!=o.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),h=0;!f&&h<a.length;++h)f=a[h]!=o.styles[h];f&&i.push(t.frontier),o.stateAfter=l?r:sa(t.mode,r)}else o.text.length<=e.options.maxHighlightLength&&Hr(e,o.text,r),o.stateAfter=t.frontier%5==0?sa(t.mode,r):null;return++t.frontier,+new Date>n?(_e(e,e.options.workDelay),!0):void 0}),i.length&&At(e,function(){for(var t=0;t<i.length;t++)Ht(e,i[t],"text")})}}function ze(e,t,n){for(var r,i,o=e.doc,a=n?-1:t-(e.doc.mode.innerMode?1e3:100),l=t;l>a;--l){if(l<=o.first)return o.first;var s=Zr(o,l-1);if(s.stateAfter&&(!n||l<=o.frontier))return l;var c=Fa(s.text,null,e.options.tabSize);(null==i||r>c)&&(i=l-1,r=c)}return i}function je(e,t,n){var r=e.doc,i=e.display;if(!r.mode.startState)return!0;var o=ze(e,t,n),a=o>r.first&&Zr(r,o-1).stateAfter;return a=a?sa(r.mode,a):ca(r.mode),r.iter(o,t,function(n){Hr(e,n.text,a);var l=o==t-1||o%5==0||o>=i.viewFrom&&o<i.viewTo;n.stateAfter=l?sa(r.mode,a):null,++o}),n&&(r.frontier=o),a}function Ue(e){return e.lineSpace.offsetTop}function qe(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function Ge(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=qi(e.measure,ji("pre","x")),n=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,r={left:parseInt(n.paddingLeft),right:parseInt(n.paddingRight)};return isNaN(r.left)||isNaN(r.right)||(e.cachedPaddingH=r),r}function Ye(e){return Da-e.display.nativeBarWidth}function $e(e){return e.display.scroller.clientWidth-Ye(e)-e.display.barWidth}function Ve(e){return e.display.scroller.clientHeight-Ye(e)-e.display.barHeight}function Ke(e,t,n){var r=e.options.lineWrapping,i=r&&$e(e);if(!t.measure.heights||r&&t.measure.width!=i){var o=t.measure.heights=[];if(r){t.measure.width=i;for(var a=t.text.firstChild.getClientRects(),l=0;l<a.length-1;l++){var s=a[l],c=a[l+1];Math.abs(s.bottom-c.bottom)>2&&o.push((s.bottom+c.top)/2-n.top)}}o.push(n.bottom-n.top)}}function Xe(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var r=0;r<e.rest.length;r++)if(e.rest[r]==t)return{map:e.measure.maps[r],cache:e.measure.caches[r]};for(var r=0;r<e.rest.length;r++)if(ti(e.rest[r])>n)return{map:e.measure.maps[r],cache:e.measure.caches[r],before:!0}}function Ze(e,t){t=yr(t);var n=ti(t),r=e.display.externalMeasured=new Pt(e.doc,t,n);r.lineN=n;var i=r.built=Br(e,r);return r.text=i.pre,qi(e.display.lineMeasure,i.pre),r}function Je(e,t,n,r){return tt(e,et(e,t),n,r)}function Qe(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[Bt(e,t)];var n=e.display.externalMeasured;return n&&t>=n.lineN&&t<n.lineN+n.size?n:void 0}function et(e,t){var n=ti(t),r=Qe(e,n);r&&!r.text?r=null:r&&r.changes&&(D(e,r,n,P(e)),e.curOp.forceUpdate=!0),r||(r=Ze(e,t));var i=Xe(r,t,n);return{line:t,view:r,rect:null,map:i.map,cache:i.cache,before:i.before,hasHeights:!1}}function tt(e,t,n,r,i){t.before&&(n=-1);var o,a=n+(r||"");return t.cache.hasOwnProperty(a)?o=t.cache[a]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(Ke(e,t.view,t.rect),t.hasHeights=!0),o=rt(e,t,n,r),o.bogus||(t.cache[a]=o)),{left:o.left,right:o.right,top:i?o.rtop:o.top,bottom:i?o.rbottom:o.bottom}}function nt(e,t,n){for(var r,i,o,a,l=0;l<e.length;l+=3){var s=e[l],c=e[l+1];if(s>t?(i=0,o=1,a="left"):c>t?(i=t-s,o=i+1):(l==e.length-3||t==c&&e[l+3]>t)&&(o=c-s,i=o-1,t>=c&&(a="right")),null!=i){if(r=e[l+2],s==c&&n==(r.insertLeft?"left":"right")&&(a=n),"left"==n&&0==i)for(;l&&e[l-2]==e[l-3]&&e[l-1].insertLeft;)r=e[(l-=3)+2],a="left";if("right"==n&&i==c-s)for(;l<e.length-3&&e[l+3]==e[l+4]&&!e[l+5].insertLeft;)r=e[(l+=3)+2],a="right";break}}return{node:r,start:i,end:o,collapse:a,coverStart:s,coverEnd:c}}function rt(e,t,n,r){var i,o=nt(t.map,n,r),a=o.node,l=o.start,s=o.end,c=o.collapse;if(3==a.nodeType){for(var u=0;4>u;u++){for(;l&&zi(t.line.text.charAt(o.coverStart+l));)--l;for(;o.coverStart+s<o.coverEnd&&zi(t.line.text.charAt(o.coverStart+s));)++s;if(xo&&9>bo&&0==l&&s==o.coverEnd-o.coverStart)i=a.parentNode.getBoundingClientRect();else if(xo&&e.options.lineWrapping){var f=qa(a,l,s).getClientRects();i=f.length?f["right"==r?f.length-1:0]:qo}else i=qa(a,l,s).getBoundingClientRect()||qo;if(i.left||i.right||0==l)break;s=l,l-=1,c="right"}xo&&11>bo&&(i=it(e.display.measure,i))}else{l>0&&(c=r="right");var f;i=e.options.lineWrapping&&(f=a.getClientRects()).length>1?f["right"==r?f.length-1:0]:a.getBoundingClientRect()}if(xo&&9>bo&&!l&&(!i||!i.left&&!i.right)){var h=a.parentNode.getClientRects()[0];i=h?{left:h.left,right:h.left+xt(e.display),top:h.top,bottom:h.bottom}:qo}for(var d=i.top-t.rect.top,p=i.bottom-t.rect.top,m=(d+p)/2,g=t.view.measure.heights,u=0;u<g.length-1&&!(m<g[u]);u++);var v=u?g[u-1]:0,y=g[u],x={left:("right"==c?i.right:i.left)-t.rect.left,right:("left"==c?i.left:i.right)-t.rect.left,top:v,bottom:y};return i.left||i.right||(x.bogus=!0),e.options.singleCursorHeightPerLine||(x.rtop=d,x.rbottom=p),x}function it(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!Qi(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,r=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*r,bottom:t.bottom*r}}function ot(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function at(e){e.display.externalMeasure=null,Ui(e.display.lineMeasure);for(var t=0;t<e.display.view.length;t++)ot(e.display.view[t])}function lt(e){at(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function st(){return window.pageXOffset||(document.documentElement||document.body).scrollLeft}function ct(){return window.pageYOffset||(document.documentElement||document.body).scrollTop}function ut(e,t,n,r){if(t.widgets)for(var i=0;i<t.widgets.length;++i)if(t.widgets[i].above){var o=Lr(t.widgets[i]);n.top+=o,n.bottom+=o}if("line"==r)return n;r||(r="local");var a=ri(t);if("local"==r?a+=Ue(e.display):a-=e.display.viewOffset,"page"==r||"window"==r){var l=e.display.lineSpace.getBoundingClientRect();a+=l.top+("window"==r?0:ct());var s=l.left+("window"==r?0:st());n.left+=s,n.right+=s}return n.top+=a,n.bottom+=a,n}function ft(e,t,n){if("div"==n)return t;var r=t.left,i=t.top;if("page"==n)r-=st(), -i-=ct();else if("local"==n||!n){var o=e.display.sizer.getBoundingClientRect();r+=o.left,i+=o.top}var a=e.display.lineSpace.getBoundingClientRect();return{left:r-a.left,top:i-a.top}}function ht(e,t,n,r,i){return r||(r=Zr(e.doc,t.line)),ut(e,r,Je(e,r,t.ch,i),n)}function dt(e,t,n,r,i,o){function a(t,a){var l=tt(e,i,t,a?"right":"left",o);return a?l.left=l.right:l.right=l.left,ut(e,r,l,n)}function l(e,t){var n=s[t],r=n.level%2;return e==to(n)&&t&&n.level<s[t-1].level?(n=s[--t],e=no(n)-(n.level%2?0:1),r=!0):e==no(n)&&t<s.length-1&&n.level<s[t+1].level&&(n=s[++t],e=to(n)-n.level%2,r=!1),r&&e==n.to&&e>n.from?a(e-1):a(e,r)}r=r||Zr(e.doc,t.line),i||(i=et(e,r));var s=ii(r),c=t.ch;if(!s)return a(c);var u=co(s,c),f=l(c,u);return null!=al&&(f.other=l(c,al)),f}function pt(e,t){var n=0,t=me(e.doc,t);e.options.lineWrapping||(n=xt(e.display)*t.ch);var r=Zr(e.doc,t.line),i=ri(r)+Ue(e.display);return{left:n,right:n,top:i,bottom:i+r.height}}function mt(e,t,n,r){var i=Bo(e,t);return i.xRel=r,n&&(i.outside=!0),i}function gt(e,t,n){var r=e.doc;if(n+=e.display.viewOffset,0>n)return mt(r.first,0,!0,-1);var i=ni(r,n),o=r.first+r.size-1;if(i>o)return mt(r.first+r.size-1,Zr(r,o).text.length,!0,1);0>t&&(t=0);for(var a=Zr(r,i);;){var l=vt(e,a,i,t,n),s=gr(a),c=s&&s.find(0,!0);if(!s||!(l.ch>c.from.ch||l.ch==c.from.ch&&l.xRel>0))return l;i=ti(a=c.to.line)}}function vt(e,t,n,r,i){function o(r){var i=dt(e,Bo(n,r),"line",t,c);return l=!0,a>i.bottom?i.left-s:a<i.top?i.left+s:(l=!1,i.left)}var a=i-ri(t),l=!1,s=2*e.display.wrapper.clientWidth,c=et(e,t),u=ii(t),f=t.text.length,h=ro(t),d=io(t),p=o(h),m=l,g=o(d),v=l;if(r>g)return mt(n,d,v,1);for(;;){if(u?d==h||d==fo(t,h,1):1>=d-h){for(var y=p>r||g-r>=r-p?h:d,x=r-(y==h?p:g);zi(t.text.charAt(y));)++y;var b=mt(n,y,y==h?m:v,-1>x?-1:x>1?1:0);return b}var w=Math.ceil(f/2),k=h+w;if(u){k=h;for(var S=0;w>S;++S)k=fo(t,k,1)}var C=o(k);C>r?(d=k,g=C,(v=l)&&(g+=1e3),f=w):(h=k,p=C,m=l,f-=w)}}function yt(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==zo){zo=ji("pre");for(var t=0;49>t;++t)zo.appendChild(document.createTextNode("x")),zo.appendChild(ji("br"));zo.appendChild(document.createTextNode("x"))}qi(e.measure,zo);var n=zo.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),Ui(e.measure),n||1}function xt(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=ji("span","xxxxxxxxxx"),n=ji("pre",[t]);qi(e.measure,n);var r=t.getBoundingClientRect(),i=(r.right-r.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function bt(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Yo},Go?Go.ops.push(e.curOp):e.curOp.ownsGroup=Go={ops:[e.curOp],delayedCallbacks:[]}}function wt(e){var t=e.delayedCallbacks,n=0;do{for(;n<t.length;n++)t[n].call(null);for(var r=0;r<e.ops.length;r++){var i=e.ops[r];if(i.cursorActivityHandlers)for(;i.cursorActivityCalled<i.cursorActivityHandlers.length;)i.cursorActivityHandlers[i.cursorActivityCalled++].call(null,i.cm)}}while(n<t.length)}function kt(e){var t=e.curOp,n=t.ownsGroup;if(n)try{wt(n)}finally{Go=null;for(var r=0;r<n.ops.length;r++)n.ops[r].cm.curOp=null;St(n)}}function St(e){for(var t=e.ops,n=0;n<t.length;n++)Ct(t[n]);for(var n=0;n<t.length;n++)Lt(t[n]);for(var n=0;n<t.length;n++)Tt(t[n]);for(var n=0;n<t.length;n++)Mt(t[n]);for(var n=0;n<t.length;n++)Nt(t[n])}function Ct(e){var t=e.cm,n=t.display;T(t),e.updateMaxLine&&h(t),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<n.viewFrom||e.scrollToPos.to.line>=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new L(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Lt(e){e.updatedDisplay=e.mustUpdate&&M(e.cm,e.update)}function Tt(e){var t=e.cm,n=t.display;e.updatedDisplay&&O(t),e.barMeasure=p(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Je(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+Ye(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-$e(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection(e.focus))}function Mt(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft<t.doc.scrollLeft&&on(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var n=e.focus&&e.focus==Gi()&&(!document.hasFocus||document.hasFocus());e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,n),(e.updatedDisplay||e.startHeight!=t.doc.height)&&y(t,e.barMeasure),e.updatedDisplay&&E(t,e.barMeasure),e.selectionChanged&&Be(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),n&&X(e.cm)}function Nt(e){var t=e.cm,n=t.display,r=t.doc;if(e.updatedDisplay&&N(t,e.update),null==n.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(n.wheelStartX=n.wheelStartY=null),null==e.scrollTop||n.scroller.scrollTop==e.scrollTop&&!e.forceScroll||(r.scrollTop=Math.max(0,Math.min(n.scroller.scrollHeight-n.scroller.clientHeight,e.scrollTop)),n.scrollbars.setScrollTop(r.scrollTop),n.scroller.scrollTop=r.scrollTop),null==e.scrollLeft||n.scroller.scrollLeft==e.scrollLeft&&!e.forceScroll||(r.scrollLeft=Math.max(0,Math.min(n.scroller.scrollWidth-n.scroller.clientWidth,e.scrollLeft)),n.scrollbars.setScrollLeft(r.scrollLeft),n.scroller.scrollLeft=r.scrollLeft,w(t)),e.scrollToPos){var i=Rn(t,me(r,e.scrollToPos.from),me(r,e.scrollToPos.to),e.scrollToPos.margin);e.scrollToPos.isCursor&&t.state.focused&&Pn(t,i)}var o=e.maybeHiddenMarkers,a=e.maybeUnhiddenMarkers;if(o)for(var l=0;l<o.length;++l)o[l].lines.length||Pa(o[l],"hide");if(a)for(var l=0;l<a.length;++l)a[l].lines.length&&Pa(a[l],"unhide");n.wrapper.offsetHeight&&(r.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&Pa(t,"changes",t,e.changeObjs),e.update&&e.update.finish()}function At(e,t){if(e.curOp)return t();bt(e);try{return t()}finally{kt(e)}}function Et(e,t){return function(){if(e.curOp)return t.apply(e,arguments);bt(e);try{return t.apply(e,arguments)}finally{kt(e)}}}function Ot(e){return function(){if(this.curOp)return e.apply(this,arguments);bt(this);try{return e.apply(this,arguments)}finally{kt(this)}}}function It(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);bt(t);try{return e.apply(this,arguments)}finally{kt(t)}}}function Pt(e,t,n){this.line=t,this.rest=xr(t),this.size=this.rest?ti(Ii(this.rest))-n+1:1,this.node=this.text=null,this.hidden=kr(e,t)}function Rt(e,t,n){for(var r,i=[],o=t;n>o;o=r){var a=new Pt(e.doc,Zr(e.doc,o),o);r=o+a.size,i.push(a)}return i}function Dt(e,t,n,r){null==t&&(t=e.doc.first),null==n&&(n=e.doc.first+e.doc.size),r||(r=0);var i=e.display;if(r&&n<i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>t)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)Wo&&br(e.doc,t)<i.viewTo&&Wt(e);else if(n<=i.viewFrom)Wo&&wr(e.doc,n+r)>i.viewFrom?Wt(e):(i.viewFrom+=r,i.viewTo+=r);else if(t<=i.viewFrom&&n>=i.viewTo)Wt(e);else if(t<=i.viewFrom){var o=_t(e,n,n+r,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=r):Wt(e)}else if(n>=i.viewTo){var o=_t(e,t,t,-1);o?(i.view=i.view.slice(0,o.index),i.viewTo=o.lineN):Wt(e)}else{var a=_t(e,t,t,-1),l=_t(e,n,n+r,1);a&&l?(i.view=i.view.slice(0,a.index).concat(Rt(e,a.lineN,l.lineN)).concat(i.view.slice(l.index)),i.viewTo+=r):Wt(e)}var s=i.externalMeasured;s&&(n<s.lineN?s.lineN+=r:t<s.lineN+s.size&&(i.externalMeasured=null))}function Ht(e,t,n){e.curOp.viewChanged=!0;var r=e.display,i=e.display.externalMeasured;if(i&&t>=i.lineN&&t<i.lineN+i.size&&(r.externalMeasured=null),!(t<r.viewFrom||t>=r.viewTo)){var o=r.view[Bt(e,t)];if(null!=o.node){var a=o.changes||(o.changes=[]);-1==Pi(a,n)&&a.push(n)}}}function Wt(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function Bt(e,t){if(t>=e.display.viewTo)return null;if(t-=e.display.viewFrom,0>t)return null;for(var n=e.display.view,r=0;r<n.length;r++)if(t-=n[r].size,0>t)return r}function _t(e,t,n,r){var i,o=Bt(e,t),a=e.display.view;if(!Wo||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var l=0,s=e.display.viewFrom;o>l;l++)s+=a[l].size;if(s!=t){if(r>0){if(o==a.length-1)return null;i=s+a[o].size-t,o++}else i=s-t;t+=i,n+=i}for(;br(e.doc,n)!=n;){if(o==(0>r?0:a.length-1))return null;n+=r*a[o-(0>r?1:0)].size,o+=r}return{index:o,lineN:n}}function Ft(e,t,n){var r=e.display,i=r.view;0==i.length||t>=r.viewTo||n<=r.viewFrom?(r.view=Rt(e,t,n),r.viewFrom=t):(r.viewFrom>t?r.view=Rt(e,t,r.viewFrom).concat(r.view):r.viewFrom<t&&(r.view=r.view.slice(Bt(e,t))),r.viewFrom=t,r.viewTo<n?r.view=r.view.concat(Rt(e,r.viewTo,n)):r.viewTo>n&&(r.view=r.view.slice(0,Bt(e,n)))),r.viewTo=n}function zt(e){for(var t=e.display.view,n=0,r=0;r<t.length;r++){var i=t[r];i.hidden||i.node&&!i.changes||++n}return n}function jt(e){function t(){i.activeTouch&&(o=setTimeout(function(){i.activeTouch=null},1e3),a=i.activeTouch,a.end=+new Date)}function n(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}function r(e,t){if(null==t.left)return!0;var n=t.left-e.left,r=t.top-e.top;return n*n+r*r>400}var i=e.display;Ea(i.scroller,"mousedown",Et(e,$t)),xo&&11>bo?Ea(i.scroller,"dblclick",Et(e,function(t){if(!Ti(e,t)){var n=Yt(e,t);if(n&&!Jt(e,t)&&!Gt(e.display,t)){Ma(t);var r=e.findWordAt(n);be(e.doc,r.anchor,r.head)}}})):Ea(i.scroller,"dblclick",function(t){Ti(e,t)||Ma(t)}),Do||Ea(i.scroller,"contextmenu",function(t){xn(e,t)});var o,a={end:0};Ea(i.scroller,"touchstart",function(t){if(!Ti(e,t)&&!n(t)){clearTimeout(o);var r=+new Date;i.activeTouch={start:r,moved:!1,prev:r-a.end<=300?a:null},1==t.touches.length&&(i.activeTouch.left=t.touches[0].pageX,i.activeTouch.top=t.touches[0].pageY)}}),Ea(i.scroller,"touchmove",function(){i.activeTouch&&(i.activeTouch.moved=!0)}),Ea(i.scroller,"touchend",function(n){var o=i.activeTouch;if(o&&!Gt(i,n)&&null!=o.left&&!o.moved&&new Date-o.start<300){var a,l=e.coordsChar(i.activeTouch,"page");a=!o.prev||r(o,o.prev)?new fe(l,l):!o.prev.prev||r(o,o.prev.prev)?e.findWordAt(l):new fe(Bo(l.line,0),me(e.doc,Bo(l.line+1,0))),e.setSelection(a.anchor,a.head),e.focus(),Ma(n)}t()}),Ea(i.scroller,"touchcancel",t),Ea(i.scroller,"scroll",function(){i.scroller.clientHeight&&(rn(e,i.scroller.scrollTop),on(e,i.scroller.scrollLeft,!0),Pa(e,"scroll",e))}),Ea(i.scroller,"mousewheel",function(t){an(e,t)}),Ea(i.scroller,"DOMMouseScroll",function(t){an(e,t)}),Ea(i.wrapper,"scroll",function(){i.wrapper.scrollTop=i.wrapper.scrollLeft=0}),i.dragFunctions={enter:function(t){Ti(e,t)||Aa(t)},over:function(t){Ti(e,t)||(tn(e,t),Aa(t))},start:function(t){en(e,t)},drop:Et(e,Qt),leave:function(t){Ti(e,t)||nn(e)}};var l=i.input.getField();Ea(l,"keyup",function(t){pn.call(e,t)}),Ea(l,"keydown",Et(e,hn)),Ea(l,"keypress",Et(e,mn)),Ea(l,"focus",Bi(vn,e)),Ea(l,"blur",Bi(yn,e))}function Ut(t,n,r){var i=r&&r!=e.Init;if(!n!=!i){var o=t.display.dragFunctions,a=n?Ea:Ia;a(t.display.scroller,"dragstart",o.start),a(t.display.scroller,"dragenter",o.enter),a(t.display.scroller,"dragover",o.over),a(t.display.scroller,"dragleave",o.leave),a(t.display.scroller,"drop",o.drop)}}function qt(e){var t=e.display;t.lastWrapHeight==t.wrapper.clientHeight&&t.lastWrapWidth==t.wrapper.clientWidth||(t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize())}function Gt(e,t){for(var n=wi(t);n!=e.wrapper;n=n.parentNode)if(!n||1==n.nodeType&&"true"==n.getAttribute("cm-ignore-events")||n.parentNode==e.sizer&&n!=e.mover)return!0}function Yt(e,t,n,r){var i=e.display;if(!n&&"true"==wi(t).getAttribute("cm-not-content"))return null;var o,a,l=i.lineSpace.getBoundingClientRect();try{o=t.clientX-l.left,a=t.clientY-l.top}catch(t){return null}var s,c=gt(e,o,a);if(r&&1==c.xRel&&(s=Zr(e.doc,c.line).text).length==c.ch){var u=Fa(s,s.length,e.options.tabSize)-s.length;c=Bo(c.line,Math.max(0,Math.round((o-Ge(e.display).left)/xt(e.display))-u))}return c}function $t(e){var t=this,n=t.display;if(!(Ti(t,e)||n.activeTouch&&n.input.supportsTouch())){if(n.shift=e.shiftKey,Gt(n,e))return void(wo||(n.scroller.draggable=!1,setTimeout(function(){n.scroller.draggable=!0},100)));if(!Jt(t,e)){var r=Yt(t,e);switch(window.focus(),ki(e)){case 1:t.state.selectingText?t.state.selectingText(e):r?Vt(t,e,r):wi(e)==n.scroller&&Ma(e);break;case 2:wo&&(t.state.lastMiddleDown=+new Date),r&&be(t.doc,r),setTimeout(function(){n.input.focus()},20),Ma(e);break;case 3:Do?xn(t,e):gn(t)}}}}function Vt(e,t,n){xo?setTimeout(Bi(X,e),0):e.curOp.focus=Gi();var r,i=+new Date;Uo&&Uo.time>i-400&&0==_o(Uo.pos,n)?r="triple":jo&&jo.time>i-400&&0==_o(jo.pos,n)?(r="double",Uo={time:i,pos:n}):(r="single",jo={time:i,pos:n});var o,a=e.doc.sel,l=Eo?t.metaKey:t.ctrlKey;e.options.dragDrop&&el&&!e.isReadOnly()&&"single"==r&&(o=a.contains(n))>-1&&(_o((o=a.ranges[o]).from(),n)<0||n.xRel>0)&&(_o(o.to(),n)>0||n.xRel<0)?Kt(e,t,n,l):Xt(e,t,n,r,l)}function Kt(e,t,n,r){var i=e.display,o=+new Date,a=Et(e,function(l){wo&&(i.scroller.draggable=!1),e.state.draggingText=!1,Ia(document,"mouseup",a),Ia(i.scroller,"drop",a),Math.abs(t.clientX-l.clientX)+Math.abs(t.clientY-l.clientY)<10&&(Ma(l),!r&&+new Date-200<o&&be(e.doc,n),wo||xo&&9==bo?setTimeout(function(){document.body.focus(),i.input.focus()},20):i.input.focus())});wo&&(i.scroller.draggable=!0),e.state.draggingText=a,i.scroller.dragDrop&&i.scroller.dragDrop(),Ea(document,"mouseup",a),Ea(i.scroller,"drop",a)}function Xt(e,t,n,r,i){function o(t){if(0!=_o(g,t))if(g=t,"rect"==r){for(var i=[],o=e.options.tabSize,a=Fa(Zr(c,n.line).text,n.ch,o),l=Fa(Zr(c,t.line).text,t.ch,o),s=Math.min(a,l),d=Math.max(a,l),p=Math.min(n.line,t.line),m=Math.min(e.lastLine(),Math.max(n.line,t.line));m>=p;p++){var v=Zr(c,p).text,y=za(v,s,o);s==d?i.push(new fe(Bo(p,y),Bo(p,y))):v.length>y&&i.push(new fe(Bo(p,y),Bo(p,za(v,d,o))))}i.length||i.push(new fe(n,n)),Te(c,he(h.ranges.slice(0,f).concat(i),f),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var x=u,b=x.anchor,w=t;if("single"!=r){if("double"==r)var k=e.findWordAt(t);else var k=new fe(Bo(t.line,0),me(c,Bo(t.line+1,0)));_o(k.anchor,b)>0?(w=k.head,b=K(x.from(),k.anchor)):(w=k.anchor,b=V(x.to(),k.head))}var i=h.ranges.slice(0);i[f]=new fe(me(c,b),w),Te(c,he(i,f),Ba)}}function a(t){var n=++y,i=Yt(e,t,!0,"rect"==r);if(i)if(0!=_o(i,g)){e.curOp.focus=Gi(),o(i);var l=b(s,c);(i.line>=l.to||i.line<l.from)&&setTimeout(Et(e,function(){y==n&&a(t)}),150)}else{var u=t.clientY<v.top?-20:t.clientY>v.bottom?20:0;u&&setTimeout(Et(e,function(){y==n&&(s.scroller.scrollTop+=u,a(t))}),50)}}function l(t){e.state.selectingText=!1,y=1/0,Ma(t),s.input.focus(),Ia(document,"mousemove",x),Ia(document,"mouseup",w),c.history.lastSelOrigin=null}var s=e.display,c=e.doc;Ma(t);var u,f,h=c.sel,d=h.ranges;if(i&&!t.shiftKey?(f=c.sel.contains(n),u=f>-1?d[f]:new fe(n,n)):(u=c.sel.primary(),f=c.sel.primIndex),Oo?t.shiftKey&&t.metaKey:t.altKey)r="rect",i||(u=new fe(n,n)),n=Yt(e,t,!0,!0),f=-1;else if("double"==r){var p=e.findWordAt(n);u=e.display.shift||c.extend?xe(c,u,p.anchor,p.head):p}else if("triple"==r){var m=new fe(Bo(n.line,0),me(c,Bo(n.line+1,0)));u=e.display.shift||c.extend?xe(c,u,m.anchor,m.head):m}else u=xe(c,u,n);i?-1==f?(f=d.length,Te(c,he(d.concat([u]),f),{scroll:!1,origin:"*mouse"})):d.length>1&&d[f].empty()&&"single"==r&&!t.shiftKey?(Te(c,he(d.slice(0,f).concat(d.slice(f+1)),0),{scroll:!1,origin:"*mouse"}),h=c.sel):ke(c,f,u,Ba):(f=0,Te(c,new ue([u],0),Ba),h=c.sel);var g=n,v=s.wrapper.getBoundingClientRect(),y=0,x=Et(e,function(e){ki(e)?a(e):l(e)}),w=Et(e,l);e.state.selectingText=w,Ea(document,"mousemove",x),Ea(document,"mouseup",w)}function Zt(e,t,n,r){try{var i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&Ma(t);var a=e.display,l=a.lineDiv.getBoundingClientRect();if(o>l.bottom||!Ni(e,n))return bi(t);o-=l.top-a.viewOffset;for(var s=0;s<e.options.gutters.length;++s){var c=a.gutters.childNodes[s];if(c&&c.getBoundingClientRect().right>=i){var u=ni(e.doc,o),f=e.options.gutters[s];return Pa(e,n,e,u,f,t),bi(t)}}}function Jt(e,t){return Zt(e,t,"gutterClick",!0)}function Qt(e){var t=this;if(nn(t),!Ti(t,e)&&!Gt(t.display,e)){Ma(e),xo&&($o=+new Date);var n=Yt(t,e,!0),r=e.dataTransfer.files;if(n&&!t.isReadOnly())if(r&&r.length&&window.FileReader&&window.File)for(var i=r.length,o=Array(i),a=0,l=function(e,r){if(!t.options.allowDropFileTypes||-1!=Pi(t.options.allowDropFileTypes,e.type)){var l=new FileReader;l.onload=Et(t,function(){var e=l.result;if(/[\x00-\x08\x0e-\x1f]{2}/.test(e)&&(e=""),o[r]=e,++a==i){n=me(t.doc,n);var s={from:n,to:n,text:t.doc.splitLines(o.join(t.doc.lineSeparator())),origin:"paste"};Tn(t.doc,s),Le(t.doc,de(n,Qo(s)))}}),l.readAsText(e)}},s=0;i>s;++s)l(r[s],s);else{if(t.state.draggingText&&t.doc.sel.contains(n)>-1)return t.state.draggingText(e),void setTimeout(function(){t.display.input.focus()},20);try{var o=e.dataTransfer.getData("Text");if(o){if(t.state.draggingText&&!(Eo?e.altKey:e.ctrlKey))var c=t.listSelections();if(Me(t.doc,de(n,n)),c)for(var s=0;s<c.length;++s)In(t.doc,"",c[s].anchor,c[s].head,"drag");t.replaceSelection(o,"around","paste"),t.display.input.focus()}}catch(e){}}}}function en(e,t){if(xo&&(!e.state.draggingText||+new Date-$o<100))return void Aa(t);if(!Ti(e,t)&&!Gt(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!Lo)){var n=ji("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",Co&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),Co&&n.parentNode.removeChild(n)}}function tn(e,t){var n=Yt(e,t);if(n){var r=document.createDocumentFragment();He(e,n,r),e.display.dragCursor||(e.display.dragCursor=ji("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),qi(e.display.dragCursor,r)}}function nn(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function rn(e,t){Math.abs(e.doc.scrollTop-t)<2||(e.doc.scrollTop=t,go||A(e,{top:t}),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t),e.display.scrollbars.setScrollTop(t),go&&A(e),_e(e,100))}function on(e,t,n){(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)||(t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),e.doc.scrollLeft=t,w(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function an(e,t){var n=Xo(t),r=n.x,i=n.y,o=e.display,a=o.scroller,l=a.scrollWidth>a.clientWidth,s=a.scrollHeight>a.clientHeight;if(r&&l||i&&s){if(i&&Eo&&wo)e:for(var c=t.target,u=o.view;c!=a;c=c.parentNode)for(var f=0;f<u.length;f++)if(u[f].node==c){e.display.currentWheelTarget=c;break e}if(r&&!go&&!Co&&null!=Ko)return i&&s&&rn(e,Math.max(0,Math.min(a.scrollTop+i*Ko,a.scrollHeight-a.clientHeight))),on(e,Math.max(0,Math.min(a.scrollLeft+r*Ko,a.scrollWidth-a.clientWidth))),(!i||i&&s)&&Ma(t),void(o.wheelStartX=null);if(i&&null!=Ko){var h=i*Ko,d=e.doc.scrollTop,p=d+o.wrapper.clientHeight;0>h?d=Math.max(0,d+h-50):p=Math.min(e.doc.height,p+h+50),A(e,{top:d,bottom:p})}20>Vo&&(null==o.wheelStartX?(o.wheelStartX=a.scrollLeft,o.wheelStartY=a.scrollTop,o.wheelDX=r,o.wheelDY=i,setTimeout(function(){if(null!=o.wheelStartX){var e=a.scrollLeft-o.wheelStartX,t=a.scrollTop-o.wheelStartY,n=t&&o.wheelDY&&t/o.wheelDY||e&&o.wheelDX&&e/o.wheelDX;o.wheelStartX=o.wheelStartY=null,n&&(Ko=(Ko*Vo+n)/(Vo+1),++Vo)}},200)):(o.wheelDX+=r,o.wheelDY+=i))}}function ln(e,t,n){if("string"==typeof t&&(t=ua[t],!t))return!1;e.display.input.ensurePolled();var r=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n&&(e.display.shift=!1),i=t(e)!=Ha}finally{e.display.shift=r,e.state.suppressEdits=!1}return i}function sn(e,t,n){for(var r=0;r<e.state.keyMaps.length;r++){var i=ha(t,e.state.keyMaps[r],n,e);if(i)return i}return e.options.extraKeys&&ha(t,e.options.extraKeys,n,e)||ha(t,e.options.keyMap,n,e)}function cn(e,t,n,r){var i=e.state.keySeq;if(i){if(da(t))return"handled";Zo.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),t=i+" "+t}var o=sn(e,t,r);return"multi"==o&&(e.state.keySeq=t),"handled"==o&&Ci(e,"keyHandled",e,t,n),"handled"!=o&&"multi"!=o||(Ma(n),Be(e)),i&&!o&&/\'$/.test(t)?(Ma(n),!0):!!o}function un(e,t){var n=pa(t,!0);return n?t.shiftKey&&!e.state.keySeq?cn(e,"Shift-"+n,t,function(t){return ln(e,t,!0)})||cn(e,n,t,function(t){return("string"==typeof t?/^go[A-Z]/.test(t):t.motion)?ln(e,t):void 0}):cn(e,n,t,function(t){return ln(e,t)}):!1}function fn(e,t,n){return cn(e,"'"+n+"'",t,function(t){return ln(e,t,!0)})}function hn(e){var t=this;if(t.curOp.focus=Gi(),!Ti(t,e)){xo&&11>bo&&27==e.keyCode&&(e.returnValue=!1);var n=e.keyCode;t.display.shift=16==n||e.shiftKey;var r=un(t,e);Co&&(Jo=r?n:null,!r&&88==n&&!rl&&(Eo?e.metaKey:e.ctrlKey)&&t.replaceSelection("",null,"cut")),18!=n||/\bCodeMirror-crosshair\b/.test(t.display.lineDiv.className)||dn(t)}}function dn(e){function t(e){18!=e.keyCode&&e.altKey||(Za(n,"CodeMirror-crosshair"),Ia(document,"keyup",t),Ia(document,"mouseover",t))}var n=e.display.lineDiv;Ja(n,"CodeMirror-crosshair"),Ea(document,"keyup",t),Ea(document,"mouseover",t)}function pn(e){16==e.keyCode&&(this.doc.sel.shift=!1),Ti(this,e)}function mn(e){var t=this;if(!(Gt(t.display,e)||Ti(t,e)||e.ctrlKey&&!e.altKey||Eo&&e.metaKey)){var n=e.keyCode,r=e.charCode;if(Co&&n==Jo)return Jo=null,void Ma(e);if(!Co||e.which&&!(e.which<10)||!un(t,e)){var i=String.fromCharCode(null==r?n:r);fn(t,e,i)||t.display.input.onKeyPress(e)}}}function gn(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,yn(e))},100)}function vn(e){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(Pa(e,"focus",e),e.state.focused=!0,Ja(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),wo&&setTimeout(function(){e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),Be(e))}function yn(e){e.state.delayingBlurEvent||(e.state.focused&&(Pa(e,"blur",e),e.state.focused=!1,Za(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function xn(e,t){Gt(e.display,t)||bn(e,t)||Ti(e,t,"contextmenu")||e.display.input.onContextMenu(t)}function bn(e,t){return Ni(e,"gutterContextMenu")?Zt(e,t,"gutterContextMenu",!1):!1}function wn(e,t){if(_o(e,t.from)<0)return e;if(_o(e,t.to)<=0)return Qo(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch;return e.line==t.to.line&&(r+=Qo(t).ch-t.to.ch),Bo(n,r)}function kn(e,t){for(var n=[],r=0;r<e.sel.ranges.length;r++){var i=e.sel.ranges[r];n.push(new fe(wn(i.anchor,t),wn(i.head,t)))}return he(n,e.sel.primIndex)}function Sn(e,t,n){return e.line==t.line?Bo(n.line,e.ch-t.ch+n.ch):Bo(n.line+(e.line-t.line),e.ch)}function Cn(e,t,n){for(var r=[],i=Bo(e.first,0),o=i,a=0;a<t.length;a++){var l=t[a],s=Sn(l.from,i,o),c=Sn(Qo(l),i,o);if(i=l.to,o=c,"around"==n){var u=e.sel.ranges[a],f=_o(u.head,u.anchor)<0;r[a]=new fe(f?c:s,f?s:c)}else r[a]=new fe(s,s)}return new ue(r,e.sel.primIndex)}function Ln(e,t,n){var r={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){this.canceled=!0}};return n&&(r.update=function(t,n,r,i){t&&(this.from=me(e,t)),n&&(this.to=me(e,n)),r&&(this.text=r),void 0!==i&&(this.origin=i)}),Pa(e,"beforeChange",e,r),e.cm&&Pa(e.cm,"beforeChange",e.cm,r),r.canceled?null:{from:r.from,to:r.to,text:r.text,origin:r.origin}}function Tn(e,t,n){if(e.cm){if(!e.cm.curOp)return Et(e.cm,Tn)(e,t,n);if(e.cm.state.suppressEdits)return}if(!(Ni(e,"beforeChange")||e.cm&&Ni(e.cm,"beforeChange"))||(t=Ln(e,t,!0))){var r=Ho&&!n&&sr(e,t.from,t.to);if(r)for(var i=r.length-1;i>=0;--i)Mn(e,{from:r[i].from,to:r[i].to,text:i?[""]:t.text});else Mn(e,t)}}function Mn(e,t){if(1!=t.text.length||""!=t.text[0]||0!=_o(t.from,t.to)){var n=kn(e,t);ci(e,t,n,e.cm?e.cm.curOp.id:NaN),En(e,t,n,or(e,t));var r=[];Kr(e,function(e,n){n||-1!=Pi(r,e.history)||(xi(e.history,t),r.push(e.history)),En(e,t,null,or(e,t))})}}function Nn(e,t,n){if(!e.cm||!e.cm.state.suppressEdits){for(var r,i=e.history,o=e.sel,a="undo"==t?i.done:i.undone,l="undo"==t?i.undone:i.done,s=0;s<a.length&&(r=a[s],n?!r.ranges||r.equals(e.sel):r.ranges);s++);if(s!=a.length){for(i.lastOrigin=i.lastSelOrigin=null;r=a.pop(),r.ranges;){if(hi(r,l),n&&!r.equals(e.sel))return void Te(e,r,{clearRedo:!1});o=r}var c=[];hi(o,l),l.push({changes:c,generation:i.generation}),i.generation=r.generation||++i.maxGeneration;for(var u=Ni(e,"beforeChange")||e.cm&&Ni(e.cm,"beforeChange"),s=r.changes.length-1;s>=0;--s){var f=r.changes[s];if(f.origin=t,u&&!Ln(e,f,!1))return void(a.length=0);c.push(ai(e,f));var h=s?kn(e,f):Ii(a);En(e,f,h,lr(e,f)),!s&&e.cm&&e.cm.scrollIntoView({from:f.from,to:Qo(f)});var d=[];Kr(e,function(e,t){t||-1!=Pi(d,e.history)||(xi(e.history,f),d.push(e.history)),En(e,f,null,lr(e,f))})}}}}function An(e,t){if(0!=t&&(e.first+=t,e.sel=new ue(Ri(e.sel.ranges,function(e){return new fe(Bo(e.anchor.line+t,e.anchor.ch),Bo(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){Dt(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;r<n.viewTo;r++)Ht(e.cm,r,"gutter")}}function En(e,t,n,r){if(e.cm&&!e.cm.curOp)return Et(e.cm,En)(e,t,n,r);if(t.to.line<e.first)return void An(e,t.text.length-1-(t.to.line-t.from.line));if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var i=t.text.length-1-(e.first-t.from.line);An(e,i),t={from:Bo(e.first,0),to:Bo(t.to.line+i,t.to.ch),text:[Ii(t.text)],origin:t.origin}}var o=e.lastLine();t.to.line>o&&(t={from:t.from,to:Bo(o,Zr(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=Jr(e,t.from,t.to),n||(n=kn(e,t)),e.cm?On(e.cm,t,r):Yr(e,t,r),Me(e,n,Wa)}}function On(e,t,n){var r=e.doc,i=e.display,a=t.from,l=t.to,s=!1,c=a.line;e.options.lineWrapping||(c=ti(yr(Zr(r,a.line))),r.iter(c,l.line+1,function(e){return e==i.maxLine?(s=!0,!0):void 0})),r.sel.contains(t.from,t.to)>-1&&Mi(e),Yr(r,t,n,o(e)),e.options.lineWrapping||(r.iter(c,a.line+t.text.length,function(e){var t=f(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0)),r.frontier=Math.min(r.frontier,a.line),_e(e,400);var u=t.text.length-(l.line-a.line)-1;t.full?Dt(e):a.line!=l.line||1!=t.text.length||Gr(e.doc,t)?Dt(e,a.line,l.line+1,u):Ht(e,a.line,"text");var h=Ni(e,"changes"),d=Ni(e,"change");if(d||h){var p={from:a,to:l,text:t.text,removed:t.removed,origin:t.origin};d&&Ci(e,"change",e,p),h&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(p)}e.display.selForContextMenu=null}function In(e,t,n,r,i){if(r||(r=n),_o(r,n)<0){var o=r;r=n,n=o}"string"==typeof t&&(t=e.splitLines(t)),Tn(e,{from:n,to:r,text:t,origin:i})}function Pn(e,t){if(!Ti(e,"scrollCursorIntoView")){var n=e.display,r=n.sizer.getBoundingClientRect(),i=null;if(t.top+r.top<0?i=!0:t.bottom+r.top>(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!Mo){var o=ji("div","​",null,"position: absolute; top: "+(t.top-n.viewOffset-Ue(e.display))+"px; height: "+(t.bottom-t.top+Ye(e)+n.barHeight)+"px; left: "+t.left+"px; width: 2px;");e.display.lineSpace.appendChild(o),o.scrollIntoView(i),e.display.lineSpace.removeChild(o)}}}function Rn(e,t,n,r){null==r&&(r=0);for(var i=0;5>i;i++){var o=!1,a=dt(e,t),l=n&&n!=t?dt(e,n):a,s=Hn(e,Math.min(a.left,l.left),Math.min(a.top,l.top)-r,Math.max(a.left,l.left),Math.max(a.bottom,l.bottom)+r),c=e.doc.scrollTop,u=e.doc.scrollLeft;if(null!=s.scrollTop&&(rn(e,s.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(o=!0)),null!=s.scrollLeft&&(on(e,s.scrollLeft),Math.abs(e.doc.scrollLeft-u)>1&&(o=!0)),!o)break}return a}function Dn(e,t,n,r,i){var o=Hn(e,t,n,r,i);null!=o.scrollTop&&rn(e,o.scrollTop),null!=o.scrollLeft&&on(e,o.scrollLeft)}function Hn(e,t,n,r,i){var o=e.display,a=yt(e.display);0>n&&(n=0);var l=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:o.scroller.scrollTop,s=Ve(e),c={};i-n>s&&(i=n+s);var u=e.doc.height+qe(o),f=a>n,h=i>u-a;if(l>n)c.scrollTop=f?0:n;else if(i>l+s){var d=Math.min(n,(h?u:i)-s);d!=l&&(c.scrollTop=d)}var p=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:o.scroller.scrollLeft,m=$e(e)-(e.options.fixedGutter?o.gutters.offsetWidth:0),g=r-t>m;return g&&(r=t+m),10>t?c.scrollLeft=0:p>t?c.scrollLeft=Math.max(0,t-(g?0:10)):r>m+p-3&&(c.scrollLeft=r+(g?0:10)-m),c}function Wn(e,t,n){null==t&&null==n||_n(e),null!=t&&(e.curOp.scrollLeft=(null==e.curOp.scrollLeft?e.doc.scrollLeft:e.curOp.scrollLeft)+t),null!=n&&(e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+n)}function Bn(e){_n(e);var t=e.getCursor(),n=t,r=t;e.options.lineWrapping||(n=t.ch?Bo(t.line,t.ch-1):t,r=Bo(t.line,t.ch+1)),e.curOp.scrollToPos={from:n,to:r,margin:e.options.cursorScrollMargin,isCursor:!0}}function _n(e){var t=e.curOp.scrollToPos;if(t){e.curOp.scrollToPos=null;var n=pt(e,t.from),r=pt(e,t.to),i=Hn(e,Math.min(n.left,r.left),Math.min(n.top,r.top)-t.margin,Math.max(n.right,r.right),Math.max(n.bottom,r.bottom)+t.margin);e.scrollTo(i.scrollLeft,i.scrollTop)}}function Fn(e,t,n,r){var i,o=e.doc;null==n&&(n="add"),"smart"==n&&(o.mode.indent?i=je(e,t):n="prev");var a=e.options.tabSize,l=Zr(o,t),s=Fa(l.text,null,a);l.stateAfter&&(l.stateAfter=null);var c,u=l.text.match(/^\s*/)[0];if(r||/\S/.test(l.text)){if("smart"==n&&(c=o.mode.indent(i,l.text.slice(u.length),l.text),c==Ha||c>150)){if(!r)return;n="prev"}}else c=0,n="not";"prev"==n?c=t>o.first?Fa(Zr(o,t-1).text,null,a):0:"add"==n?c=s+e.options.indentUnit:"subtract"==n?c=s-e.options.indentUnit:"number"==typeof n&&(c=s+n),c=Math.max(0,c);var f="",h=0;if(e.options.indentWithTabs)for(var d=Math.floor(c/a);d;--d)h+=a,f+=" ";if(c>h&&(f+=Oi(c-h)),f!=u)return In(o,f,Bo(t,0),Bo(t,u.length),"+input"),l.stateAfter=null,!0;for(var d=0;d<o.sel.ranges.length;d++){var p=o.sel.ranges[d];if(p.head.line==t&&p.head.ch<u.length){var h=Bo(t,u.length);ke(o,d,new fe(h,h));break}}}function zn(e,t,n,r){var i=t,o=t;return"number"==typeof t?o=Zr(e,pe(e,t)):i=ti(t),null==i?null:(r(o,i)&&e.cm&&Ht(e.cm,i,n),o)}function jn(e,t){for(var n=e.doc.sel.ranges,r=[],i=0;i<n.length;i++){for(var o=t(n[i]);r.length&&_o(o.from,Ii(r).to)<=0;){var a=r.pop();if(_o(a.from,o.from)<0){o.from=a.from;break}}r.push(o)}At(e,function(){for(var t=r.length-1;t>=0;t--)In(e.doc,"",r[t].from,r[t].to,"+delete");Bn(e)})}function Un(e,t,n,r,i){function o(){var t=l+n;return t<e.first||t>=e.first+e.size?!1:(l=t,u=Zr(e,t))}function a(e){var t=(i?fo:ho)(u,s,n,!0);if(null==t){if(e||!o())return!1;s=i?(0>n?io:ro)(u):0>n?u.text.length:0}else s=t;return!0}var l=t.line,s=t.ch,c=n,u=Zr(e,l);if("char"==r)a();else if("column"==r)a(!0);else if("word"==r||"group"==r)for(var f=null,h="group"==r,d=e.cm&&e.cm.getHelper(t,"wordChars"),p=!0;!(0>n)||a(!p);p=!1){var m=u.text.charAt(s)||"\n",g=_i(m,d)?"w":h&&"\n"==m?"n":!h||/\s/.test(m)?null:"p";if(!h||p||g||(g="s"),f&&f!=g){0>n&&(n=1,a());break}if(g&&(f=g),n>0&&!a(!p))break}var v=Ie(e,Bo(l,s),t,c,!0);return _o(t,v)||(v.hitSide=!0),v}function qn(e,t,n,r){var i,o=e.doc,a=t.left;if("page"==r){var l=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight);i=t.top+n*(l-(0>n?1.5:.5)*yt(e.display))}else"line"==r&&(i=n>0?t.bottom+3:t.top-3);for(;;){var s=gt(e,a,i);if(!s.outside)break;if(0>n?0>=i:i>=o.height){s.hitSide=!0;break}i+=5*n}return s}function Gn(t,n,r,i){e.defaults[t]=n,r&&(ta[t]=i?function(e,t,n){n!=na&&r(e,t,n)}:r)}function Yn(e){for(var t,n,r,i,o=e.split(/-(?!$)/),e=o[o.length-1],a=0;a<o.length-1;a++){var l=o[a];if(/^(cmd|meta|m)$/i.test(l))i=!0;else if(/^a(lt)?$/i.test(l))t=!0;else if(/^(c|ctrl|control)$/i.test(l))n=!0;else{ -if(!/^s(hift)$/i.test(l))throw new Error("Unrecognized modifier name: "+l);r=!0}}return t&&(e="Alt-"+e),n&&(e="Ctrl-"+e),i&&(e="Cmd-"+e),r&&(e="Shift-"+e),e}function $n(e){return"string"==typeof e?fa[e]:e}function Vn(e,t,n,r,i){if(r&&r.shared)return Kn(e,t,n,r,i);if(e.cm&&!e.cm.curOp)return Et(e.cm,Vn)(e,t,n,r,i);var o=new va(e,i),a=_o(t,n);if(r&&Wi(r,o,!1),a>0||0==a&&o.clearWhenEmpty!==!1)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=ji("span",[o.replacedWith],"CodeMirror-widget"),r.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),r.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(vr(e,t.line,t,n,o)||t.line!=n.line&&vr(e,n.line,t,n,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");Wo=!0}o.addToHistory&&ci(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var l,s=t.line,c=e.cm;if(e.iter(s,n.line+1,function(e){c&&o.collapsed&&!c.options.lineWrapping&&yr(e)==c.display.maxLine&&(l=!0),o.collapsed&&s!=t.line&&ei(e,0),nr(e,new Qn(o,s==t.line?t.ch:null,s==n.line?n.ch:null)),++s}),o.collapsed&&e.iter(t.line,n.line+1,function(t){kr(e,t)&&ei(t,0)}),o.clearOnEnter&&Ea(o,"beforeCursorEnter",function(){o.clear()}),o.readOnly&&(Ho=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++ga,o.atomic=!0),c){if(l&&(c.curOp.updateMaxLine=!0),o.collapsed)Dt(c,t.line,n.line+1);else if(o.className||o.title||o.startStyle||o.endStyle||o.css)for(var u=t.line;u<=n.line;u++)Ht(c,u,"text");o.atomic&&Ae(c.doc),Ci(c,"markerAdded",c,o)}return o}function Kn(e,t,n,r,i){r=Wi(r),r.shared=!1;var o=[Vn(e,t,n,r,i)],a=o[0],l=r.widgetNode;return Kr(e,function(e){l&&(r.widgetNode=l.cloneNode(!0)),o.push(Vn(e,me(e,t),me(e,n),r,i));for(var s=0;s<e.linked.length;++s)if(e.linked[s].isParent)return;a=Ii(o)}),new ya(o,a)}function Xn(e){return e.findMarks(Bo(e.first,0),e.clipPos(Bo(e.lastLine())),function(e){return e.parent})}function Zn(e,t){for(var n=0;n<t.length;n++){var r=t[n],i=r.find(),o=e.clipPos(i.from),a=e.clipPos(i.to);if(_o(o,a)){var l=Vn(e,o,a,r.primary,r.primary.type);r.markers.push(l),l.parent=r}}}function Jn(e){for(var t=0;t<e.length;t++){var n=e[t],r=[n.primary.doc];Kr(n.primary.doc,function(e){r.push(e)});for(var i=0;i<n.markers.length;i++){var o=n.markers[i];-1==Pi(r,o.doc)&&(o.parent=null,n.markers.splice(i--,1))}}}function Qn(e,t,n){this.marker=e,this.from=t,this.to=n}function er(e,t){if(e)for(var n=0;n<e.length;++n){var r=e[n];if(r.marker==t)return r}}function tr(e,t){for(var n,r=0;r<e.length;++r)e[r]!=t&&(n||(n=[])).push(e[r]);return n}function nr(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}function rr(e,t,n){if(e)for(var r,i=0;i<e.length;++i){var o=e[i],a=o.marker,l=null==o.from||(a.inclusiveLeft?o.from<=t:o.from<t);if(l||o.from==t&&"bookmark"==a.type&&(!n||!o.marker.insertLeft)){var s=null==o.to||(a.inclusiveRight?o.to>=t:o.to>t);(r||(r=[])).push(new Qn(a,o.from,s?null:o.to))}}return r}function ir(e,t,n){if(e)for(var r,i=0;i<e.length;++i){var o=e[i],a=o.marker,l=null==o.to||(a.inclusiveRight?o.to>=t:o.to>t);if(l||o.from==t&&"bookmark"==a.type&&(!n||o.marker.insertLeft)){var s=null==o.from||(a.inclusiveLeft?o.from<=t:o.from<t);(r||(r=[])).push(new Qn(a,s?null:o.from-t,null==o.to?null:o.to-t))}}return r}function or(e,t){if(t.full)return null;var n=ve(e,t.from.line)&&Zr(e,t.from.line).markedSpans,r=ve(e,t.to.line)&&Zr(e,t.to.line).markedSpans;if(!n&&!r)return null;var i=t.from.ch,o=t.to.ch,a=0==_o(t.from,t.to),l=rr(n,i,a),s=ir(r,o,a),c=1==t.text.length,u=Ii(t.text).length+(c?i:0);if(l)for(var f=0;f<l.length;++f){var h=l[f];if(null==h.to){var d=er(s,h.marker);d?c&&(h.to=null==d.to?null:d.to+u):h.to=i}}if(s)for(var f=0;f<s.length;++f){var h=s[f];if(null!=h.to&&(h.to+=u),null==h.from){var d=er(l,h.marker);d||(h.from=u,c&&(l||(l=[])).push(h))}else h.from+=u,c&&(l||(l=[])).push(h)}l&&(l=ar(l)),s&&s!=l&&(s=ar(s));var p=[l];if(!c){var m,g=t.text.length-2;if(g>0&&l)for(var f=0;f<l.length;++f)null==l[f].to&&(m||(m=[])).push(new Qn(l[f].marker,null,null));for(var f=0;g>f;++f)p.push(m);p.push(s)}return p}function ar(e){for(var t=0;t<e.length;++t){var n=e[t];null!=n.from&&n.from==n.to&&n.marker.clearWhenEmpty!==!1&&e.splice(t--,1)}return e.length?e:null}function lr(e,t){var n=mi(e,t),r=or(e,t);if(!n)return r;if(!r)return n;for(var i=0;i<n.length;++i){var o=n[i],a=r[i];if(o&&a)e:for(var l=0;l<a.length;++l){for(var s=a[l],c=0;c<o.length;++c)if(o[c].marker==s.marker)continue e;o.push(s)}else a&&(n[i]=a)}return n}function sr(e,t,n){var r=null;if(e.iter(t.line,n.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var n=e.markedSpans[t].marker;!n.readOnly||r&&-1!=Pi(r,n)||(r||(r=[])).push(n)}}),!r)return null;for(var i=[{from:t,to:n}],o=0;o<r.length;++o)for(var a=r[o],l=a.find(0),s=0;s<i.length;++s){var c=i[s];if(!(_o(c.to,l.from)<0||_o(c.from,l.to)>0)){var u=[s,1],f=_o(c.from,l.from),h=_o(c.to,l.to);(0>f||!a.inclusiveLeft&&!f)&&u.push({from:c.from,to:l.from}),(h>0||!a.inclusiveRight&&!h)&&u.push({from:l.to,to:c.to}),i.splice.apply(i,u),s+=u.length-1}}return i}function cr(e){var t=e.markedSpans;if(t){for(var n=0;n<t.length;++n)t[n].marker.detachLine(e);e.markedSpans=null}}function ur(e,t){if(t){for(var n=0;n<t.length;++n)t[n].marker.attachLine(e);e.markedSpans=t}}function fr(e){return e.inclusiveLeft?-1:0}function hr(e){return e.inclusiveRight?1:0}function dr(e,t){var n=e.lines.length-t.lines.length;if(0!=n)return n;var r=e.find(),i=t.find(),o=_o(r.from,i.from)||fr(e)-fr(t);if(o)return-o;var a=_o(r.to,i.to)||hr(e)-hr(t);return a?a:t.id-e.id}function pr(e,t){var n,r=Wo&&e.markedSpans;if(r)for(var i,o=0;o<r.length;++o)i=r[o],i.marker.collapsed&&null==(t?i.from:i.to)&&(!n||dr(n,i.marker)<0)&&(n=i.marker);return n}function mr(e){return pr(e,!0)}function gr(e){return pr(e,!1)}function vr(e,t,n,r,i){var o=Zr(e,t),a=Wo&&o.markedSpans;if(a)for(var l=0;l<a.length;++l){var s=a[l];if(s.marker.collapsed){var c=s.marker.find(0),u=_o(c.from,n)||fr(s.marker)-fr(i),f=_o(c.to,r)||hr(s.marker)-hr(i);if(!(u>=0&&0>=f||0>=u&&f>=0)&&(0>=u&&(s.marker.inclusiveRight&&i.inclusiveLeft?_o(c.to,n)>=0:_o(c.to,n)>0)||u>=0&&(s.marker.inclusiveRight&&i.inclusiveLeft?_o(c.from,r)<=0:_o(c.from,r)<0)))return!0}}}function yr(e){for(var t;t=mr(e);)e=t.find(-1,!0).line;return e}function xr(e){for(var t,n;t=gr(e);)e=t.find(1,!0).line,(n||(n=[])).push(e);return n}function br(e,t){var n=Zr(e,t),r=yr(n);return n==r?t:ti(r)}function wr(e,t){if(t>e.lastLine())return t;var n,r=Zr(e,t);if(!kr(e,r))return t;for(;n=gr(r);)r=n.find(1,!0).line;return ti(r)+1}function kr(e,t){var n=Wo&&t.markedSpans;if(n)for(var r,i=0;i<n.length;++i)if(r=n[i],r.marker.collapsed){if(null==r.from)return!0;if(!r.marker.widgetNode&&0==r.from&&r.marker.inclusiveLeft&&Sr(e,t,r))return!0}}function Sr(e,t,n){if(null==n.to){var r=n.marker.find(1,!0);return Sr(e,r.line,er(r.line.markedSpans,n.marker))}if(n.marker.inclusiveRight&&n.to==t.text.length)return!0;for(var i,o=0;o<t.markedSpans.length;++o)if(i=t.markedSpans[o],i.marker.collapsed&&!i.marker.widgetNode&&i.from==n.to&&(null==i.to||i.to!=n.from)&&(i.marker.inclusiveLeft||n.marker.inclusiveRight)&&Sr(e,t,i))return!0}function Cr(e,t,n){ri(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&Wn(e,null,n)}function Lr(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!Va(document.body,e.node)){var n="position: relative;";e.coverGutter&&(n+="margin-left: -"+t.display.gutters.offsetWidth+"px;"),e.noHScroll&&(n+="width: "+t.display.wrapper.clientWidth+"px;"),qi(t.display.measure,ji("div",[e.node],null,n))}return e.height=e.node.parentNode.offsetHeight}function Tr(e,t,n,r){var i=new xa(e,n,r),o=e.cm;return o&&i.noHScroll&&(o.display.alignWidgets=!0),zn(e,t,"widget",function(t){var n=t.widgets||(t.widgets=[]);if(null==i.insertAt?n.push(i):n.splice(Math.min(n.length-1,Math.max(0,i.insertAt)),0,i),i.line=t,o&&!kr(e,t)){var r=ri(t)<e.scrollTop;ei(t,t.height+Lr(i)),r&&Wn(o,null,i.height),o.curOp.forceUpdate=!0}return!0}),i}function Mr(e,t,n,r){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),cr(e),ur(e,n);var i=r?r(e):1;i!=e.height&&ei(e,i)}function Nr(e){e.parent=null,cr(e)}function Ar(e,t){if(e)for(;;){var n=e.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!n)break;e=e.slice(0,n.index)+e.slice(n.index+n[0].length);var r=n[1]?"bgClass":"textClass";null==t[r]?t[r]=n[2]:new RegExp("(?:^|s)"+n[2]+"(?:$|s)").test(t[r])||(t[r]+=" "+n[2])}return e}function Er(t,n){if(t.blankLine)return t.blankLine(n);if(t.innerMode){var r=e.innerMode(t,n);return r.mode.blankLine?r.mode.blankLine(r.state):void 0}}function Or(t,n,r,i){for(var o=0;10>o;o++){i&&(i[0]=e.innerMode(t,r).mode);var a=t.token(n,r);if(n.pos>n.start)return a}throw new Error("Mode "+t.name+" failed to advance stream.")}function Ir(e,t,n,r){function i(e){return{start:f.start,end:f.pos,string:f.current(),type:o||null,state:e?sa(a.mode,u):u}}var o,a=e.doc,l=a.mode;t=me(a,t);var s,c=Zr(a,t.line),u=je(e,t.line,n),f=new ma(c.text,e.options.tabSize);for(r&&(s=[]);(r||f.pos<t.ch)&&!f.eol();)f.start=f.pos,o=Or(l,f,u),r&&s.push(i(!0));return r?s:i()}function Pr(e,t,n,r,i,o,a){var l=n.flattenSpans;null==l&&(l=e.options.flattenSpans);var s,c=0,u=null,f=new ma(t,e.options.tabSize),h=e.options.addModeClass&&[null];for(""==t&&Ar(Er(n,r),o);!f.eol();){if(f.pos>e.options.maxHighlightLength?(l=!1,a&&Hr(e,t,r,f.pos),f.pos=t.length,s=null):s=Ar(Or(n,f,r,h),o),h){var d=h[0].name;d&&(s="m-"+(s?d+" "+s:d))}if(!l||u!=s){for(;c<f.start;)c=Math.min(f.start,c+5e4),i(c,u);u=s}f.start=f.pos}for(;c<f.pos;){var p=Math.min(f.pos,c+5e4);i(p,u),c=p}}function Rr(e,t,n,r){var i=[e.state.modeGen],o={};Pr(e,t.text,e.doc.mode,n,function(e,t){i.push(e,t)},o,r);for(var a=0;a<e.state.overlays.length;++a){var l=e.state.overlays[a],s=1,c=0;Pr(e,t.text,l.mode,!0,function(e,t){for(var n=s;e>c;){var r=i[s];r>e&&i.splice(s,1,e,i[s+1],r),s+=2,c=Math.min(e,r)}if(t)if(l.opaque)i.splice(n,s-n,e,"cm-overlay "+t),s=n+2;else for(;s>n;n+=2){var o=i[n+1];i[n+1]=(o?o+" ":"")+"cm-overlay "+t}},o)}return{styles:i,classes:o.bgClass||o.textClass?o:null}}function Dr(e,t,n){if(!t.styles||t.styles[0]!=e.state.modeGen){var r=je(e,ti(t)),i=Rr(e,t,t.text.length>e.options.maxHighlightLength?sa(e.doc.mode,r):r);t.stateAfter=r,t.styles=i.styles,i.classes?t.styleClasses=i.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.frontier&&e.doc.frontier++}return t.styles}function Hr(e,t,n,r){var i=e.doc.mode,o=new ma(t,e.options.tabSize);for(o.start=o.pos=r||0,""==t&&Er(i,n);!o.eol();)Or(i,o,n),o.start=o.pos}function Wr(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass?ka:wa;return n[e]||(n[e]=e.replace(/\S+/g,"cm-$&"))}function Br(e,t){var n=ji("span",null,null,wo?"padding-right: .1px":null),r={pre:ji("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,splitSpaces:(xo||wo)&&e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o,a=i?t.rest[i-1]:t.line;r.pos=0,r.addToken=Fr,Ji(e.display.measure)&&(o=ii(a))&&(r.addToken=jr(r.addToken,o)),r.map=[];var l=t!=e.display.externalMeasured&&ti(a);qr(a,r,Dr(e,a,l)),a.styleClasses&&(a.styleClasses.bgClass&&(r.bgClass=$i(a.styleClasses.bgClass,r.bgClass||"")),a.styleClasses.textClass&&(r.textClass=$i(a.styleClasses.textClass,r.textClass||""))),0==r.map.length&&r.map.push(0,0,r.content.appendChild(Zi(e.display.measure))),0==i?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(wo){var s=r.content.lastChild;(/\bcm-tab\b/.test(s.className)||s.querySelector&&s.querySelector(".cm-tab"))&&(r.content.className="cm-tab-wrap-hack")}return Pa(e,"renderLine",e,t.line,r.pre),r.pre.className&&(r.textClass=$i(r.pre.className,r.textClass||"")),r}function _r(e){var t=ji("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function Fr(e,t,n,r,i,o,a){if(t){var l=e.splitSpaces?t.replace(/ {3,}/g,zr):t,s=e.cm.state.specialChars,c=!1;if(s.test(t))for(var u=document.createDocumentFragment(),f=0;;){s.lastIndex=f;var h=s.exec(t),d=h?h.index-f:t.length-f;if(d){var p=document.createTextNode(l.slice(f,f+d));xo&&9>bo?u.appendChild(ji("span",[p])):u.appendChild(p),e.map.push(e.pos,e.pos+d,p),e.col+=d,e.pos+=d}if(!h)break;if(f+=d+1," "==h[0]){var m=e.cm.options.tabSize,g=m-e.col%m,p=u.appendChild(ji("span",Oi(g),"cm-tab"));p.setAttribute("role","presentation"),p.setAttribute("cm-text"," "),e.col+=g}else if("\r"==h[0]||"\n"==h[0]){var p=u.appendChild(ji("span","\r"==h[0]?"␍":"␤","cm-invalidchar"));p.setAttribute("cm-text",h[0]),e.col+=1}else{var p=e.cm.options.specialCharPlaceholder(h[0]);p.setAttribute("cm-text",h[0]),xo&&9>bo?u.appendChild(ji("span",[p])):u.appendChild(p),e.col+=1}e.map.push(e.pos,e.pos+1,p),e.pos++}else{e.col+=t.length;var u=document.createTextNode(l);e.map.push(e.pos,e.pos+t.length,u),xo&&9>bo&&(c=!0),e.pos+=t.length}if(n||r||i||c||a){var v=n||"";r&&(v+=r),i&&(v+=i);var y=ji("span",[u],v,a);return o&&(y.title=o),e.content.appendChild(y)}e.content.appendChild(u)}}function zr(e){for(var t=" ",n=0;n<e.length-2;++n)t+=n%2?" ":" ";return t+=" "}function jr(e,t){return function(n,r,i,o,a,l,s){i=i?i+" cm-force-border":"cm-force-border";for(var c=n.pos,u=c+r.length;;){for(var f=0;f<t.length;f++){var h=t[f];if(h.to>c&&h.from<=c)break}if(h.to>=u)return e(n,r,i,o,a,l,s);e(n,r.slice(0,h.to-c),i,o,null,l,s),o=null,r=r.slice(h.to-c),c=h.to}}}function Ur(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",n.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t}function qr(e,t,n){var r=e.markedSpans,i=e.text,o=0;if(r)for(var a,l,s,c,u,f,h,d=i.length,p=0,m=1,g="",v=0;;){if(v==p){s=c=u=f=l="",h=null,v=1/0;for(var y,x=[],b=0;b<r.length;++b){var w=r[b],k=w.marker;"bookmark"==k.type&&w.from==p&&k.widgetNode?x.push(k):w.from<=p&&(null==w.to||w.to>p||k.collapsed&&w.to==p&&w.from==p)?(null!=w.to&&w.to!=p&&v>w.to&&(v=w.to,c=""),k.className&&(s+=" "+k.className),k.css&&(l=(l?l+";":"")+k.css),k.startStyle&&w.from==p&&(u+=" "+k.startStyle),k.endStyle&&w.to==v&&(y||(y=[])).push(k.endStyle,w.to),k.title&&!f&&(f=k.title),k.collapsed&&(!h||dr(h.marker,k)<0)&&(h=w)):w.from>p&&v>w.from&&(v=w.from)}if(y)for(var b=0;b<y.length;b+=2)y[b+1]==v&&(c+=" "+y[b]);if(!h||h.from==p)for(var b=0;b<x.length;++b)Ur(t,0,x[b]);if(h&&(h.from||0)==p){if(Ur(t,(null==h.to?d+1:h.to)-p,h.marker,null==h.from),null==h.to)return;h.to==p&&(h=!1)}}if(p>=d)break;for(var S=Math.min(d,v);;){if(g){var C=p+g.length;if(!h){var L=C>S?g.slice(0,S-p):g;t.addToken(t,L,a?a+s:s,u,p+L.length==v?c:"",f,l)}if(C>=S){g=g.slice(S-p),p=S;break}p=C,u=""}g=i.slice(o,o=n[m++]),a=Wr(n[m++],t.cm.options)}}else for(var m=1;m<n.length;m+=2)t.addToken(t,i.slice(o,o=n[m]),Wr(n[m+1],t.cm.options))}function Gr(e,t){return 0==t.from.ch&&0==t.to.ch&&""==Ii(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function Yr(e,t,n,r){function i(e){return n?n[e]:null}function o(e,n,i){Mr(e,n,i,r),Ci(e,"change",e,t)}function a(e,t){for(var n=e,o=[];t>n;++n)o.push(new ba(c[n],i(n),r));return o}var l=t.from,s=t.to,c=t.text,u=Zr(e,l.line),f=Zr(e,s.line),h=Ii(c),d=i(c.length-1),p=s.line-l.line;if(t.full)e.insert(0,a(0,c.length)),e.remove(c.length,e.size-c.length);else if(Gr(e,t)){var m=a(0,c.length-1);o(f,f.text,d),p&&e.remove(l.line,p),m.length&&e.insert(l.line,m)}else if(u==f)if(1==c.length)o(u,u.text.slice(0,l.ch)+h+u.text.slice(s.ch),d);else{var m=a(1,c.length-1);m.push(new ba(h+u.text.slice(s.ch),d,r)),o(u,u.text.slice(0,l.ch)+c[0],i(0)),e.insert(l.line+1,m)}else if(1==c.length)o(u,u.text.slice(0,l.ch)+c[0]+f.text.slice(s.ch),i(0)),e.remove(l.line+1,p);else{o(u,u.text.slice(0,l.ch)+c[0],i(0)),o(f,h+f.text.slice(s.ch),d);var m=a(1,c.length-1);p>1&&e.remove(l.line+1,p-1),e.insert(l.line+1,m)}Ci(e,"change",e,t)}function $r(e){this.lines=e,this.parent=null;for(var t=0,n=0;t<e.length;++t)e[t].parent=this,n+=e[t].height;this.height=n}function Vr(e){this.children=e;for(var t=0,n=0,r=0;r<e.length;++r){var i=e[r];t+=i.chunkSize(),n+=i.height,i.parent=this}this.size=t,this.height=n,this.parent=null}function Kr(e,t,n){function r(e,i,o){if(e.linked)for(var a=0;a<e.linked.length;++a){var l=e.linked[a];if(l.doc!=i){var s=o&&l.sharedHist;n&&!s||(t(l.doc,s),r(l.doc,e,s))}}}r(e,null,!0)}function Xr(e,t){if(t.cm)throw new Error("This document is already in use.");e.doc=t,t.cm=e,a(e),n(e),e.options.lineWrapping||h(e),e.options.mode=t.modeOption,Dt(e)}function Zr(e,t){if(t-=e.first,0>t||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],o=i.chunkSize();if(o>t){n=i;break}t-=o}return n.lines[t]}function Jr(e,t,n){var r=[],i=t.line;return e.iter(t.line,n.line+1,function(e){var o=e.text;i==n.line&&(o=o.slice(0,n.ch)),i==t.line&&(o=o.slice(t.ch)),r.push(o),++i}),r}function Qr(e,t,n){var r=[];return e.iter(t,n,function(e){r.push(e.text)}),r}function ei(e,t){var n=t-e.height;if(n)for(var r=e;r;r=r.parent)r.height+=n}function ti(e){if(null==e.parent)return null;for(var t=e.parent,n=Pi(t.lines,e),r=t.parent;r;t=r,r=r.parent)for(var i=0;r.children[i]!=t;++i)n+=r.children[i].chunkSize();return n+t.first}function ni(e,t){var n=e.first;e:do{for(var r=0;r<e.children.length;++r){var i=e.children[r],o=i.height;if(o>t){e=i;continue e}t-=o,n+=i.chunkSize()}return n}while(!e.lines);for(var r=0;r<e.lines.length;++r){var a=e.lines[r],l=a.height;if(l>t)break;t-=l}return n+r}function ri(e){e=yr(e);for(var t=0,n=e.parent,r=0;r<n.lines.length;++r){var i=n.lines[r];if(i==e)break;t+=i.height}for(var o=n.parent;o;n=o,o=n.parent)for(var r=0;r<o.children.length;++r){var a=o.children[r];if(a==n)break;t+=a.height}return t}function ii(e){var t=e.order;return null==t&&(t=e.order=ll(e.text)),t}function oi(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function ai(e,t){var n={from:$(t.from),to:Qo(t),text:Jr(e,t.from,t.to)};return di(e,n,t.from.line,t.to.line+1),Kr(e,function(e){di(e,n,t.from.line,t.to.line+1)},!0),n}function li(e){for(;e.length;){var t=Ii(e);if(!t.ranges)break;e.pop()}}function si(e,t){return t?(li(e.done),Ii(e.done)):e.done.length&&!Ii(e.done).ranges?Ii(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),Ii(e.done)):void 0}function ci(e,t,n,r){var i=e.history;i.undone.length=0;var o,a=+new Date;if((i.lastOp==r||i.lastOrigin==t.origin&&t.origin&&("+"==t.origin.charAt(0)&&e.cm&&i.lastModTime>a-e.cm.options.historyEventDelay||"*"==t.origin.charAt(0)))&&(o=si(i,i.lastOp==r))){var l=Ii(o.changes);0==_o(t.from,t.to)&&0==_o(t.from,l.to)?l.to=Qo(t):o.changes.push(ai(e,t))}else{var s=Ii(i.done);for(s&&s.ranges||hi(e.sel,i.done),o={changes:[ai(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(n),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=a,i.lastOp=i.lastSelOp=r,i.lastOrigin=i.lastSelOrigin=t.origin,l||Pa(e,"historyAdded")}function ui(e,t,n,r){var i=t.charAt(0);return"*"==i||"+"==i&&n.ranges.length==r.ranges.length&&n.somethingSelected()==r.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}function fi(e,t,n,r){var i=e.history,o=r&&r.origin;n==i.lastSelOp||o&&i.lastSelOrigin==o&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==o||ui(e,o,Ii(i.done),t))?i.done[i.done.length-1]=t:hi(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=o,i.lastSelOp=n,r&&r.clearRedo!==!1&&li(i.undone)}function hi(e,t){var n=Ii(t);n&&n.ranges&&n.equals(e)||t.push(e)}function di(e,t,n,r){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,r),function(n){n.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=n.markedSpans),++o})}function pi(e){if(!e)return null;for(var t,n=0;n<e.length;++n)e[n].marker.explicitlyCleared?t||(t=e.slice(0,n)):t&&t.push(e[n]);return t?t.length?t:null:e}function mi(e,t){var n=t["spans_"+e.id];if(!n)return null;for(var r=0,i=[];r<t.text.length;++r)i.push(pi(n[r]));return i}function gi(e,t,n){for(var r=0,i=[];r<e.length;++r){var o=e[r];if(o.ranges)i.push(n?ue.prototype.deepCopy.call(o):o);else{var a=o.changes,l=[];i.push({changes:l});for(var s=0;s<a.length;++s){var c,u=a[s];if(l.push({from:u.from,to:u.to,text:u.text}),t)for(var f in u)(c=f.match(/^spans_(\d+)$/))&&Pi(t,Number(c[1]))>-1&&(Ii(l)[f]=u[f],delete u[f])}}}return i}function vi(e,t,n,r){n<e.line?e.line+=r:t<e.line&&(e.line=t,e.ch=0)}function yi(e,t,n,r){for(var i=0;i<e.length;++i){var o=e[i],a=!0;if(o.ranges){o.copied||(o=e[i]=o.deepCopy(),o.copied=!0);for(var l=0;l<o.ranges.length;l++)vi(o.ranges[l].anchor,t,n,r),vi(o.ranges[l].head,t,n,r)}else{for(var l=0;l<o.changes.length;++l){var s=o.changes[l];if(n<s.from.line)s.from=Bo(s.from.line+r,s.from.ch),s.to=Bo(s.to.line+r,s.to.ch);else if(t<=s.to.line){a=!1;break}}a||(e.splice(0,i+1),i=0)}}}function xi(e,t){var n=t.from.line,r=t.to.line,i=t.text.length-(r-n)-1;yi(e.done,n,r,i),yi(e.undone,n,r,i)}function bi(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function wi(e){return e.target||e.srcElement}function ki(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),Eo&&e.ctrlKey&&1==t&&(t=3),t}function Si(e,t,n){var r=e._handlers&&e._handlers[t];return n?r&&r.length>0?r.slice():Oa:r||Oa}function Ci(e,t){function n(e){return function(){e.apply(null,o)}}var r=Si(e,t,!1);if(r.length){var i,o=Array.prototype.slice.call(arguments,2);Go?i=Go.delayedCallbacks:Ra?i=Ra:(i=Ra=[],setTimeout(Li,0));for(var a=0;a<r.length;++a)i.push(n(r[a]))}}function Li(){var e=Ra;Ra=null;for(var t=0;t<e.length;++t)e[t]()}function Ti(e,t,n){return"string"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),Pa(e,n||t.type,e,t),bi(t)||t.codemirrorIgnore}function Mi(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var n=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),r=0;r<t.length;++r)-1==Pi(n,t[r])&&n.push(t[r])}function Ni(e,t){return Si(e,t).length>0}function Ai(e){e.prototype.on=function(e,t){Ea(this,e,t)},e.prototype.off=function(e,t){Ia(this,e,t)}}function Ei(){this.id=null}function Oi(e){for(;ja.length<=e;)ja.push(Ii(ja)+" ");return ja[e]}function Ii(e){return e[e.length-1]}function Pi(e,t){for(var n=0;n<e.length;++n)if(e[n]==t)return n;return-1}function Ri(e,t){for(var n=[],r=0;r<e.length;r++)n[r]=t(e[r],r);return n}function Di(){}function Hi(e,t){var n;return Object.create?n=Object.create(e):(Di.prototype=e,n=new Di),t&&Wi(t,n),n}function Wi(e,t,n){t||(t={});for(var r in e)!e.hasOwnProperty(r)||n===!1&&t.hasOwnProperty(r)||(t[r]=e[r]);return t}function Bi(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function _i(e,t){return t?t.source.indexOf("\\w")>-1&&Ya(e)?!0:t.test(e):Ya(e)}function Fi(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}function zi(e){return e.charCodeAt(0)>=768&&$a.test(e)}function ji(e,t,n,r){var i=document.createElement(e);if(n&&(i.className=n),r&&(i.style.cssText=r),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)i.appendChild(t[o]);return i}function Ui(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function qi(e,t){return Ui(e).appendChild(t)}function Gi(){for(var e=document.activeElement;e&&e.root&&e.root.activeElement;)e=e.root.activeElement;return e}function Yi(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}function $i(e,t){for(var n=e.split(" "),r=0;r<n.length;r++)n[r]&&!Yi(n[r]).test(t)&&(t+=" "+n[r]);return t}function Vi(e){if(document.body.getElementsByClassName)for(var t=document.body.getElementsByClassName("CodeMirror"),n=0;n<t.length;n++){var r=t[n].CodeMirror;r&&e(r)}}function Ki(){Qa||(Xi(),Qa=!0)}function Xi(){var e;Ea(window,"resize",function(){null==e&&(e=setTimeout(function(){e=null,Vi(qt)},100))}),Ea(window,"blur",function(){Vi(yn)})}function Zi(e){if(null==Ka){var t=ji("span","​");qi(e,ji("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Ka=t.offsetWidth<=1&&t.offsetHeight>2&&!(xo&&8>bo))}var n=Ka?ji("span","​"):ji("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}function Ji(e){if(null!=Xa)return Xa;var t=qi(e,document.createTextNode("AخA")),n=qa(t,0,1).getBoundingClientRect();if(!n||n.left==n.right)return!1;var r=qa(t,1,2).getBoundingClientRect();return Xa=r.right-n.right<3}function Qi(e){if(null!=il)return il;var t=qi(e,ji("span","x")),n=t.getBoundingClientRect(),r=qa(t,0,1).getBoundingClientRect();return il=Math.abs(n.left-r.left)>1}function eo(e,t,n,r){if(!e)return r(t,n,"ltr");for(var i=!1,o=0;o<e.length;++o){var a=e[o];(a.from<n&&a.to>t||t==n&&a.to==t)&&(r(Math.max(a.from,t),Math.min(a.to,n),1==a.level?"rtl":"ltr"),i=!0)}i||r(t,n,"ltr")}function to(e){return e.level%2?e.to:e.from}function no(e){return e.level%2?e.from:e.to}function ro(e){var t=ii(e);return t?to(t[0]):0}function io(e){var t=ii(e);return t?no(Ii(t)):e.text.length}function oo(e,t){var n=Zr(e.doc,t),r=yr(n);r!=n&&(t=ti(r));var i=ii(r),o=i?i[0].level%2?io(r):ro(r):0;return Bo(t,o)}function ao(e,t){for(var n,r=Zr(e.doc,t);n=gr(r);)r=n.find(1,!0).line,t=null;var i=ii(r),o=i?i[0].level%2?ro(r):io(r):r.text.length;return Bo(null==t?ti(r):t,o)}function lo(e,t){var n=oo(e,t.line),r=Zr(e.doc,n.line),i=ii(r);if(!i||0==i[0].level){var o=Math.max(0,r.text.search(/\S/)),a=t.line==n.line&&t.ch<=o&&t.ch;return Bo(n.line,a?0:o)}return n}function so(e,t,n){var r=e[0].level;return t==r?!0:n==r?!1:n>t}function co(e,t){al=null;for(var n,r=0;r<e.length;++r){var i=e[r];if(i.from<t&&i.to>t)return r;if(i.from==t||i.to==t){if(null!=n)return so(e,i.level,e[n].level)?(i.from!=i.to&&(al=n),r):(i.from!=i.to&&(al=r),n);n=r}}return n}function uo(e,t,n,r){if(!r)return t+n;do t+=n;while(t>0&&zi(e.text.charAt(t)));return t}function fo(e,t,n,r){var i=ii(e);if(!i)return ho(e,t,n,r);for(var o=co(i,t),a=i[o],l=uo(e,t,a.level%2?-n:n,r);;){if(l>a.from&&l<a.to)return l;if(l==a.from||l==a.to)return co(i,l)==o?l:(a=i[o+=n],n>0==a.level%2?a.to:a.from);if(a=i[o+=n],!a)return null;l=n>0==a.level%2?uo(e,a.to,-1,r):uo(e,a.from,1,r)}}function ho(e,t,n,r){var i=t+n;if(r)for(;i>0&&zi(e.text.charAt(i));)i+=n;return 0>i||i>e.text.length?null:i}var po=navigator.userAgent,mo=navigator.platform,go=/gecko\/\d/i.test(po),vo=/MSIE \d/.test(po),yo=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(po),xo=vo||yo,bo=xo&&(vo?document.documentMode||6:yo[1]),wo=/WebKit\//.test(po),ko=wo&&/Qt\/\d+\.\d+/.test(po),So=/Chrome\//.test(po),Co=/Opera\//.test(po),Lo=/Apple Computer/.test(navigator.vendor),To=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(po),Mo=/PhantomJS/.test(po),No=/AppleWebKit/.test(po)&&/Mobile\/\w+/.test(po),Ao=No||/Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(po),Eo=No||/Mac/.test(mo),Oo=/\bCrOS\b/.test(po),Io=/win/i.test(mo),Po=Co&&po.match(/Version\/(\d*\.\d*)/);Po&&(Po=Number(Po[1])),Po&&Po>=15&&(Co=!1,wo=!0);var Ro=Eo&&(ko||Co&&(null==Po||12.11>Po)),Do=go||xo&&bo>=9,Ho=!1,Wo=!1;m.prototype=Wi({update:function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,r=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?r+"px":"0";var i=e.viewHeight-(t?r:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?r+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(n?r:0);this.horiz.firstChild.style.width=e.scrollWidth-e.clientWidth+o+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==r&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?r:0,bottom:t?r:0}},setScrollLeft:function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz)},setScrollTop:function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert)},zeroWidthHack:function(){var e=Eo&&!To?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new Ei,this.disableVert=new Ei},enableZeroWidthBar:function(e,t){function n(){var r=e.getBoundingClientRect(),i=document.elementFromPoint(r.left+1,r.bottom-1);i!=e?e.style.pointerEvents="none":t.set(1e3,n)}e.style.pointerEvents="auto",t.set(1e3,n)},clear:function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)}},m.prototype),g.prototype=Wi({update:function(){return{bottom:0,right:0}},setScrollLeft:function(){},setScrollTop:function(){},clear:function(){}},g.prototype),e.scrollbarModel={"native":m,"null":g},L.prototype.signal=function(e,t){Ni(e,t)&&this.events.push(arguments)},L.prototype.finish=function(){for(var e=0;e<this.events.length;e++)Pa.apply(null,this.events[e])};var Bo=e.Pos=function(e,t){return this instanceof Bo?(this.line=e,void(this.ch=t)):new Bo(e,t)},_o=e.cmpPos=function(e,t){return e.line-t.line||e.ch-t.ch},Fo=null;ne.prototype=Wi({init:function(e){function t(e){if(!Ti(r,e)){if(r.somethingSelected())Fo={lineWise:!1,text:r.getSelections()},n.inaccurateSelection&&(n.prevInput="",n.inaccurateSelection=!1,o.value=Fo.text.join("\n"),Ua(o));else{if(!r.options.lineWiseCopyCut)return;var t=ee(r);Fo={lineWise:!0,text:t.text},"cut"==e.type?r.setSelections(t.ranges,null,Wa):(n.prevInput="",o.value=t.text.join("\n"),Ua(o))}"cut"==e.type&&(r.state.cutIncoming=!0)}}var n=this,r=this.cm,i=this.wrapper=re(),o=this.textarea=i.firstChild;e.wrapper.insertBefore(i,e.wrapper.firstChild),No&&(o.style.width="0px"),Ea(o,"input",function(){xo&&bo>=9&&n.hasSelection&&(n.hasSelection=null),n.poll()}),Ea(o,"paste",function(e){Ti(r,e)||J(e,r)||(r.state.pasteIncoming=!0,n.fastPoll())}),Ea(o,"cut",t),Ea(o,"copy",t),Ea(e.scroller,"paste",function(t){Gt(e,t)||Ti(r,t)||(r.state.pasteIncoming=!0,n.focus())}),Ea(e.lineSpace,"selectstart",function(t){Gt(e,t)||Ma(t)}),Ea(o,"compositionstart",function(){var e=r.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:e,range:r.markText(e,r.getCursor("to"),{className:"CodeMirror-composing"})}}),Ea(o,"compositionend",function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)})},prepareSelection:function(){var e=this.cm,t=e.display,n=e.doc,r=De(e);if(e.options.moveInputWithCursor){var i=dt(e,n.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),a=t.lineDiv.getBoundingClientRect();r.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+a.top-o.top)),r.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+a.left-o.left))}return r},showSelection:function(e){var t=this.cm,n=t.display;qi(n.cursorDiv,e.cursors),qi(n.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},reset:function(e){if(!this.contextMenuPending){var t,n,r=this.cm,i=r.doc;if(r.somethingSelected()){this.prevInput="";var o=i.sel.primary();t=rl&&(o.to().line-o.from().line>100||(n=r.getSelection()).length>1e3);var a=t?"-":n||r.getSelection();this.textarea.value=a,r.state.focused&&Ua(this.textarea),xo&&bo>=9&&(this.hasSelection=a)}else e||(this.prevInput=this.textarea.value="",xo&&bo>=9&&(this.hasSelection=null));this.inaccurateSelection=t}},getField:function(){return this.textarea},supportsTouch:function(){return!1},focus:function(){if("nocursor"!=this.cm.options.readOnly&&(!Ao||Gi()!=this.textarea))try{this.textarea.focus()}catch(e){}},blur:function(){this.textarea.blur()},resetPosition:function(){this.wrapper.style.top=this.wrapper.style.left=0; -},receivedFocus:function(){this.slowPoll()},slowPoll:function(){var e=this;e.pollingFast||e.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},fastPoll:function(){function e(){var r=n.poll();r||t?(n.pollingFast=!1,n.slowPoll()):(t=!0,n.polling.set(60,e))}var t=!1,n=this;n.pollingFast=!0,n.polling.set(20,e)},poll:function(){var e=this.cm,t=this.textarea,n=this.prevInput;if(this.contextMenuPending||!e.state.focused||nl(t)&&!n&&!this.composing||e.isReadOnly()||e.options.disableInput||e.state.keySeq)return!1;var r=t.value;if(r==n&&!e.somethingSelected())return!1;if(xo&&bo>=9&&this.hasSelection===r||Eo&&/[\uf700-\uf7ff]/.test(r))return e.display.input.reset(),!1;if(e.doc.sel==e.display.selForContextMenu){var i=r.charCodeAt(0);if(8203!=i||n||(n="​"),8666==i)return this.reset(),this.cm.execCommand("undo")}for(var o=0,a=Math.min(n.length,r.length);a>o&&n.charCodeAt(o)==r.charCodeAt(o);)++o;var l=this;return At(e,function(){Z(e,r.slice(o),n.length-o,null,l.composing?"*compose":null),r.length>1e3||r.indexOf("\n")>-1?t.value=l.prevInput="":l.prevInput=r,l.composing&&(l.composing.range.clear(),l.composing.range=e.markText(l.composing.start,e.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},ensurePolled:function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},onKeyPress:function(){xo&&bo>=9&&(this.hasSelection=null),this.fastPoll()},onContextMenu:function(e){function t(){if(null!=a.selectionStart){var e=i.somethingSelected(),t="​"+(e?a.value:"");a.value="⇚",a.value=t,r.prevInput=e?"":"​",a.selectionStart=1,a.selectionEnd=t.length,o.selForContextMenu=i.doc.sel}}function n(){if(r.contextMenuPending=!1,r.wrapper.style.cssText=f,a.style.cssText=u,xo&&9>bo&&o.scrollbars.setScrollTop(o.scroller.scrollTop=s),null!=a.selectionStart){(!xo||xo&&9>bo)&&t();var e=0,n=function(){o.selForContextMenu==i.doc.sel&&0==a.selectionStart&&a.selectionEnd>0&&"​"==r.prevInput?Et(i,ua.selectAll)(i):e++<10?o.detectingSelectAll=setTimeout(n,500):o.input.reset()};o.detectingSelectAll=setTimeout(n,200)}}var r=this,i=r.cm,o=i.display,a=r.textarea,l=Yt(i,e),s=o.scroller.scrollTop;if(l&&!Co){var c=i.options.resetSelectionOnContextMenu;c&&-1==i.doc.sel.contains(l)&&Et(i,Te)(i.doc,de(l),Wa);var u=a.style.cssText,f=r.wrapper.style.cssText;r.wrapper.style.cssText="position: absolute";var h=r.wrapper.getBoundingClientRect();if(a.style.cssText="position: absolute; width: 30px; height: 30px; top: "+(e.clientY-h.top-5)+"px; left: "+(e.clientX-h.left-5)+"px; z-index: 1000; background: "+(xo?"rgba(255, 255, 255, .05)":"transparent")+"; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",wo)var d=window.scrollY;if(o.input.focus(),wo&&window.scrollTo(null,d),o.input.reset(),i.somethingSelected()||(a.value=r.prevInput=" "),r.contextMenuPending=!0,o.selForContextMenu=i.doc.sel,clearTimeout(o.detectingSelectAll),xo&&bo>=9&&t(),Do){Aa(e);var p=function(){Ia(window,"mouseup",p),setTimeout(n,20)};Ea(window,"mouseup",p)}else setTimeout(n,50)}},readOnlyChanged:function(e){e||this.reset()},setUneditable:Di,needsContentAttribute:!1},ne.prototype),ie.prototype=Wi({init:function(e){function t(e){if(!Ti(r,e)){if(r.somethingSelected())Fo={lineWise:!1,text:r.getSelections()},"cut"==e.type&&r.replaceSelection("",null,"cut");else{if(!r.options.lineWiseCopyCut)return;var t=ee(r);Fo={lineWise:!0,text:t.text},"cut"==e.type&&r.operation(function(){r.setSelections(t.ranges,0,Wa),r.replaceSelection("",null,"cut")})}if(e.clipboardData&&!No)e.preventDefault(),e.clipboardData.clearData(),e.clipboardData.setData("text/plain",Fo.text.join("\n"));else{var n=re(),i=n.firstChild;r.display.lineSpace.insertBefore(n,r.display.lineSpace.firstChild),i.value=Fo.text.join("\n");var o=document.activeElement;Ua(i),setTimeout(function(){r.display.lineSpace.removeChild(n),o.focus()},50)}}}var n=this,r=n.cm,i=n.div=e.lineDiv;te(i),Ea(i,"paste",function(e){Ti(r,e)||J(e,r)}),Ea(i,"compositionstart",function(e){var t=e.data;if(n.composing={sel:r.doc.sel,data:t,startData:t},t){var i=r.doc.sel.primary(),o=r.getLine(i.head.line),a=o.indexOf(t,Math.max(0,i.head.ch-t.length));a>-1&&a<=i.head.ch&&(n.composing.sel=de(Bo(i.head.line,a),Bo(i.head.line,a+t.length)))}}),Ea(i,"compositionupdate",function(e){n.composing.data=e.data}),Ea(i,"compositionend",function(e){var t=n.composing;t&&(e.data==t.startData||/\u200b/.test(e.data)||(t.data=e.data),setTimeout(function(){t.handled||n.applyComposition(t),n.composing==t&&(n.composing=null)},50))}),Ea(i,"touchstart",function(){n.forceCompositionEnd()}),Ea(i,"input",function(){n.composing||!r.isReadOnly()&&n.pollContent()||At(n.cm,function(){Dt(r)})}),Ea(i,"copy",t),Ea(i,"cut",t)},prepareSelection:function(){var e=De(this.cm,!1);return e.focus=this.cm.state.focused,e},showSelection:function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},showPrimarySelection:function(){var e=window.getSelection(),t=this.cm.doc.sel.primary(),n=le(this.cm,e.anchorNode,e.anchorOffset),r=le(this.cm,e.focusNode,e.focusOffset);if(!n||n.bad||!r||r.bad||0!=_o(K(n,r),t.from())||0!=_o(V(n,r),t.to())){var i=oe(this.cm,t.from()),o=oe(this.cm,t.to());if(i||o){var a=this.cm.display.view,l=e.rangeCount&&e.getRangeAt(0);if(i){if(!o){var s=a[a.length-1].measure,c=s.maps?s.maps[s.maps.length-1]:s.map;o={node:c[c.length-1],offset:c[c.length-2]-c[c.length-3]}}}else i={node:a[0].measure.map[2],offset:0};try{var u=qa(i.node,i.offset,o.offset,o.node)}catch(f){}u&&(!go&&this.cm.state.focused?(e.collapse(i.node,i.offset),u.collapsed||e.addRange(u)):(e.removeAllRanges(),e.addRange(u)),l&&null==e.anchorNode?e.addRange(l):go&&this.startGracePeriod()),this.rememberSelection()}}},startGracePeriod:function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){e.cm.curOp.selectionChanged=!0})},20)},showMultipleSelections:function(e){qi(this.cm.display.cursorDiv,e.cursors),qi(this.cm.display.selectionDiv,e.selection)},rememberSelection:function(){var e=window.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},selectionInEditor:function(){var e=window.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return Va(this.div,t)},focus:function(){"nocursor"!=this.cm.options.readOnly&&this.div.focus()},blur:function(){this.div.blur()},getField:function(){return this.div},supportsTouch:function(){return!0},receivedFocus:function(){function e(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,e))}var t=this;this.selectionInEditor()?this.pollSelection():At(this.cm,function(){t.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,e)},selectionChanged:function(){var e=window.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},pollSelection:function(){if(!this.composing&&!this.gracePeriod&&this.selectionChanged()){var e=window.getSelection(),t=this.cm;this.rememberSelection();var n=le(t,e.anchorNode,e.anchorOffset),r=le(t,e.focusNode,e.focusOffset);n&&r&&At(t,function(){Te(t.doc,de(n,r),Wa),(n.bad||r.bad)&&(t.curOp.selectionChanged=!0)})}},pollContent:function(){var e=this.cm,t=e.display,n=e.doc.sel.primary(),r=n.from(),i=n.to();if(r.line<t.viewFrom||i.line>t.viewTo-1)return!1;var o;if(r.line==t.viewFrom||0==(o=Bt(e,r.line)))var a=ti(t.view[0].line),l=t.view[0].node;else var a=ti(t.view[o].line),l=t.view[o-1].node.nextSibling;var s=Bt(e,i.line);if(s==t.view.length-1)var c=t.viewTo-1,u=t.lineDiv.lastChild;else var c=ti(t.view[s+1].line)-1,u=t.view[s+1].node.previousSibling;for(var f=e.doc.splitLines(ce(e,l,u,a,c)),h=Jr(e.doc,Bo(a,0),Bo(c,Zr(e.doc,c).text.length));f.length>1&&h.length>1;)if(Ii(f)==Ii(h))f.pop(),h.pop(),c--;else{if(f[0]!=h[0])break;f.shift(),h.shift(),a++}for(var d=0,p=0,m=f[0],g=h[0],v=Math.min(m.length,g.length);v>d&&m.charCodeAt(d)==g.charCodeAt(d);)++d;for(var y=Ii(f),x=Ii(h),b=Math.min(y.length-(1==f.length?d:0),x.length-(1==h.length?d:0));b>p&&y.charCodeAt(y.length-p-1)==x.charCodeAt(x.length-p-1);)++p;f[f.length-1]=y.slice(0,y.length-p),f[0]=f[0].slice(d);var w=Bo(a,d),k=Bo(c,h.length?Ii(h).length-p:0);return f.length>1||f[0]||_o(w,k)?(In(e.doc,f,w,k,"+input"),!0):void 0},ensurePolled:function(){this.forceCompositionEnd()},reset:function(){this.forceCompositionEnd()},forceCompositionEnd:function(){this.composing&&!this.composing.handled&&(this.applyComposition(this.composing),this.composing.handled=!0,this.div.blur(),this.div.focus())},applyComposition:function(e){this.cm.isReadOnly()?Et(this.cm,Dt)(this.cm):e.data&&e.data!=e.startData&&Et(this.cm,Z)(this.cm,e.data,0,e.sel)},setUneditable:function(e){e.contentEditable="false"},onKeyPress:function(e){e.preventDefault(),this.cm.isReadOnly()||Et(this.cm,Z)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0)},readOnlyChanged:function(e){this.div.contentEditable=String("nocursor"!=e)},onContextMenu:Di,resetPosition:Di,needsContentAttribute:!0},ie.prototype),e.inputStyles={textarea:ne,contenteditable:ie},ue.prototype={primary:function(){return this.ranges[this.primIndex]},equals:function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var n=this.ranges[t],r=e.ranges[t];if(0!=_o(n.anchor,r.anchor)||0!=_o(n.head,r.head))return!1}return!0},deepCopy:function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new fe($(this.ranges[t].anchor),$(this.ranges[t].head));return new ue(e,this.primIndex)},somethingSelected:function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},contains:function(e,t){t||(t=e);for(var n=0;n<this.ranges.length;n++){var r=this.ranges[n];if(_o(t,r.from())>=0&&_o(e,r.to())<=0)return n}return-1}},fe.prototype={from:function(){return K(this.anchor,this.head)},to:function(){return V(this.anchor,this.head)},empty:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}};var zo,jo,Uo,qo={left:0,right:0,top:0,bottom:0},Go=null,Yo=0,$o=0,Vo=0,Ko=null;xo?Ko=-.53:go?Ko=15:So?Ko=-.7:Lo&&(Ko=-1/3);var Xo=function(e){var t=e.wheelDeltaX,n=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==n&&e.detail&&e.axis==e.VERTICAL_AXIS?n=e.detail:null==n&&(n=e.wheelDelta),{x:t,y:n}};e.wheelEventPixels=function(e){var t=Xo(e);return t.x*=Ko,t.y*=Ko,t};var Zo=new Ei,Jo=null,Qo=e.changeEnd=function(e){return e.text?Bo(e.from.line+e.text.length-1,Ii(e.text).length+(1==e.text.length?e.from.ch:0)):e.to};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,t){var n=this.options,r=n[e];n[e]==t&&"mode"!=e||(n[e]=t,ta.hasOwnProperty(e)&&Et(this,ta[e])(this,t,r))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"]($n(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;n<t.length;++n)if(t[n]==e||t[n].name==e)return t.splice(n,1),!0},addOverlay:Ot(function(t,n){var r=t.token?t:e.getMode(this.options,t);if(r.startState)throw new Error("Overlays may not be stateful.");this.state.overlays.push({mode:r,modeSpec:t,opaque:n&&n.opaque}),this.state.modeGen++,Dt(this)}),removeOverlay:Ot(function(e){for(var t=this.state.overlays,n=0;n<t.length;++n){var r=t[n].modeSpec;if(r==e||"string"==typeof e&&r.name==e)return t.splice(n,1),this.state.modeGen++,void Dt(this)}}),indentLine:Ot(function(e,t,n){"string"!=typeof t&&"number"!=typeof t&&(t=null==t?this.options.smartIndent?"smart":"prev":t?"add":"subtract"),ve(this.doc,e)&&Fn(this,e,t,n)}),indentSelection:Ot(function(e){for(var t=this.doc.sel.ranges,n=-1,r=0;r<t.length;r++){var i=t[r];if(i.empty())i.head.line>n&&(Fn(this,i.head.line,e,!0),n=i.head.line,r==this.doc.sel.primIndex&&Bn(this));else{var o=i.from(),a=i.to(),l=Math.max(n,o.line);n=Math.min(this.lastLine(),a.line-(a.ch?0:1))+1;for(var s=l;n>s;++s)Fn(this,s,e);var c=this.doc.sel.ranges;0==o.ch&&t.length==c.length&&c[r].from().ch>0&&ke(this.doc,r,new fe(o,c[r].to()),Wa)}}}),getTokenAt:function(e,t){return Ir(this,e,t)},getLineTokens:function(e,t){return Ir(this,Bo(e),t,!0)},getTokenTypeAt:function(e){e=me(this.doc,e);var t,n=Dr(this,Zr(this.doc,e.line)),r=0,i=(n.length-1)/2,o=e.ch;if(0==o)t=n[2];else for(;;){var a=r+i>>1;if((a?n[2*a-1]:0)>=o)i=a;else{if(!(n[2*a+1]<o)){t=n[2*a+2];break}r=a+1}}var l=t?t.indexOf("cm-overlay "):-1;return 0>l?t:0==l?null:t.slice(0,l-1)},getModeAt:function(t){var n=this.doc.mode;return n.innerMode?e.innerMode(n,this.getTokenAt(t).state).mode:n},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var n=[];if(!la.hasOwnProperty(t))return n;var r=la[t],i=this.getModeAt(e);if("string"==typeof i[t])r[i[t]]&&n.push(r[i[t]]);else if(i[t])for(var o=0;o<i[t].length;o++){var a=r[i[t][o]];a&&n.push(a)}else i.helperType&&r[i.helperType]?n.push(r[i.helperType]):r[i.name]&&n.push(r[i.name]);for(var o=0;o<r._global.length;o++){var l=r._global[o];l.pred(i,this)&&-1==Pi(n,l.val)&&n.push(l.val)}return n},getStateAfter:function(e,t){var n=this.doc;return e=pe(n,null==e?n.first+n.size-1:e),je(this,e+1,t)},cursorCoords:function(e,t){var n,r=this.doc.sel.primary();return n=null==e?r.head:"object"==typeof e?me(this.doc,e):e?r.from():r.to(),dt(this,n,t||"page")},charCoords:function(e,t){return ht(this,me(this.doc,e),t||"page")},coordsChar:function(e,t){return e=ft(this,e,t||"page"),gt(this,e.left,e.top)},lineAtHeight:function(e,t){return e=ft(this,{top:e,left:0},t||"page").top,ni(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t){var n,r=!1;if("number"==typeof e){var i=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:e>i&&(e=i,r=!0),n=Zr(this.doc,e)}else n=e;return ut(this,n,{top:0,left:0},t||"page").top+(r?this.doc.height-ri(n):0)},defaultTextHeight:function(){return yt(this.display)},defaultCharWidth:function(){return xt(this.display)},setGutterMarker:Ot(function(e,t,n){return zn(this.doc,e,"gutter",function(e){var r=e.gutterMarkers||(e.gutterMarkers={});return r[t]=n,!n&&Fi(r)&&(e.gutterMarkers=null),!0})}),clearGutter:Ot(function(e){var t=this,n=t.doc,r=n.first;n.iter(function(n){n.gutterMarkers&&n.gutterMarkers[e]&&(n.gutterMarkers[e]=null,Ht(t,r,"gutter"),Fi(n.gutterMarkers)&&(n.gutterMarkers=null)),++r})}),lineInfo:function(e){if("number"==typeof e){if(!ve(this.doc,e))return null;var t=e;if(e=Zr(this.doc,e),!e)return null}else{var t=ti(e);if(null==t)return null}return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,i){var o=this.display;e=dt(this,me(this.doc,e));var a=e.bottom,l=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),o.sizer.appendChild(t),"over"==r)a=e.top;else if("above"==r||"near"==r){var s=Math.max(o.wrapper.clientHeight,this.doc.height),c=Math.max(o.sizer.clientWidth,o.lineSpace.clientWidth);("above"==r||e.bottom+t.offsetHeight>s)&&e.top>t.offsetHeight?a=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=s&&(a=e.bottom),l+t.offsetWidth>c&&(l=c-t.offsetWidth)}t.style.top=a+"px",t.style.left=t.style.right="","right"==i?(l=o.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?l=0:"middle"==i&&(l=(o.sizer.clientWidth-t.offsetWidth)/2),t.style.left=l+"px"),n&&Dn(this,l,a,l+t.offsetWidth,a+t.offsetHeight)},triggerOnKeyDown:Ot(hn),triggerOnKeyPress:Ot(mn),triggerOnKeyUp:pn,execCommand:function(e){return ua.hasOwnProperty(e)?ua[e].call(null,this):void 0},triggerElectric:Ot(function(e){Q(this,e)}),findPosH:function(e,t,n,r){var i=1;0>t&&(i=-1,t=-t);for(var o=0,a=me(this.doc,e);t>o&&(a=Un(this.doc,a,i,n,r),!a.hitSide);++o);return a},moveH:Ot(function(e,t){var n=this;n.extendSelectionsBy(function(r){return n.display.shift||n.doc.extend||r.empty()?Un(n.doc,r.head,e,t,n.options.rtlMoveVisually):0>e?r.from():r.to()},_a)}),deleteH:Ot(function(e,t){var n=this.doc.sel,r=this.doc;n.somethingSelected()?r.replaceSelection("",null,"+delete"):jn(this,function(n){var i=Un(r,n.head,e,t,!1);return 0>e?{from:i,to:n.head}:{from:n.head,to:i}})}),findPosV:function(e,t,n,r){var i=1,o=r;0>t&&(i=-1,t=-t);for(var a=0,l=me(this.doc,e);t>a;++a){var s=dt(this,l,"div");if(null==o?o=s.left:s.left=o,l=qn(this,s,i,n),l.hitSide)break}return l},moveV:Ot(function(e,t){var n=this,r=this.doc,i=[],o=!n.display.shift&&!r.extend&&r.sel.somethingSelected();if(r.extendSelectionsBy(function(a){if(o)return 0>e?a.from():a.to();var l=dt(n,a.head,"div");null!=a.goalColumn&&(l.left=a.goalColumn),i.push(l.left);var s=qn(n,l,e,t);return"page"==t&&a==r.sel.primary()&&Wn(n,null,ht(n,s,"div").top-l.top),s},_a),i.length)for(var a=0;a<r.sel.ranges.length;a++)r.sel.ranges[a].goalColumn=i[a]}),findWordAt:function(e){var t=this.doc,n=Zr(t,e.line).text,r=e.ch,i=e.ch;if(n){var o=this.getHelper(e,"wordChars");(e.xRel<0||i==n.length)&&r?--r:++i;for(var a=n.charAt(r),l=_i(a,o)?function(e){return _i(e,o)}:/\s/.test(a)?function(e){return/\s/.test(e)}:function(e){return!/\s/.test(e)&&!_i(e)};r>0&&l(n.charAt(r-1));)--r;for(;i<n.length&&l(n.charAt(i));)++i}return new fe(Bo(e.line,r),Bo(e.line,i))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?Ja(this.display.cursorDiv,"CodeMirror-overwrite"):Za(this.display.cursorDiv,"CodeMirror-overwrite"),Pa(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==Gi()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:Ot(function(e,t){null==e&&null==t||_n(this),null!=e&&(this.curOp.scrollLeft=e),null!=t&&(this.curOp.scrollTop=t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-Ye(this)-this.display.barHeight,width:e.scrollWidth-Ye(this)-this.display.barWidth,clientHeight:Ve(this),clientWidth:$e(this)}},scrollIntoView:Ot(function(e,t){if(null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):"number"==typeof e?e={from:Bo(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line)_n(this),this.curOp.scrollToPos=e;else{var n=Hn(this,Math.min(e.from.left,e.to.left),Math.min(e.from.top,e.to.top)-e.margin,Math.max(e.from.right,e.to.right),Math.max(e.from.bottom,e.to.bottom)+e.margin);this.scrollTo(n.scrollLeft,n.scrollTop)}}),setSize:Ot(function(e,t){function n(e){return"number"==typeof e||/^\d+$/.test(String(e))?e+"px":e}var r=this;null!=e&&(r.display.wrapper.style.width=n(e)),null!=t&&(r.display.wrapper.style.height=n(t)),r.options.lineWrapping&&at(this);var i=r.display.viewFrom;r.doc.iter(i,r.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){Ht(r,i,"widget");break}++i}),r.curOp.forceUpdate=!0,Pa(r,"refresh",this)}),operation:function(e){return At(this,e)},refresh:Ot(function(){var e=this.display.cachedTextHeight;Dt(this),this.curOp.forceUpdate=!0,lt(this),this.scrollTo(this.doc.scrollLeft,this.doc.scrollTop),u(this),(null==e||Math.abs(e-yt(this.display))>.5)&&a(this),Pa(this,"refresh",this)}),swapDoc:Ot(function(e){var t=this.doc;return t.cm=null,Xr(this,e),lt(this),this.display.input.reset(),this.scrollTo(e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,Ci(this,"swapDoc",this,t),t}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Ai(e);var ea=e.defaults={},ta=e.optionHandlers={},na=e.Init={toString:function(){return"CodeMirror.Init"}};Gn("value","",function(e,t){e.setValue(t)},!0),Gn("mode",null,function(e,t){e.doc.modeOption=t,n(e)},!0),Gn("indentUnit",2,n,!0),Gn("indentWithTabs",!1),Gn("smartIndent",!0),Gn("tabSize",4,function(e){r(e),lt(e),Dt(e)},!0),Gn("lineSeparator",null,function(e,t){if(e.doc.lineSep=t,t){var n=[],r=e.doc.first;e.doc.iter(function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,n.push(Bo(r,o))}r++});for(var i=n.length-1;i>=0;i--)In(e.doc,t,n[i],Bo(n[i].line,n[i].ch+t.length))}}),Gn("specialChars",/[\u0000-\u001f\u007f\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g,function(t,n,r){t.state.specialChars=new RegExp(n.source+(n.test(" ")?"":"| "),"g"),r!=e.Init&&t.refresh()}),Gn("specialCharPlaceholder",_r,function(e){e.refresh()},!0),Gn("electricChars",!0),Gn("inputStyle",Ao?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),Gn("rtlMoveVisually",!Io),Gn("wholeLineUpdateBefore",!0),Gn("theme","default",function(e){l(e),s(e)},!0),Gn("keyMap","default",function(t,n,r){var i=$n(n),o=r!=e.Init&&$n(r);o&&o.detach&&o.detach(t,i),i.attach&&i.attach(t,o||null)}),Gn("extraKeys",null),Gn("lineWrapping",!1,i,!0),Gn("gutters",[],function(e){d(e.options),s(e)},!0),Gn("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?C(e.display)+"px":"0",e.refresh()},!0),Gn("coverGutterNextToScrollbar",!1,function(e){y(e)},!0),Gn("scrollbarStyle","native",function(e){v(e),y(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),Gn("lineNumbers",!1,function(e){d(e.options),s(e)},!0),Gn("firstLineNumber",1,s,!0),Gn("lineNumberFormatter",function(e){return e},s,!0),Gn("showCursorWhenSelecting",!1,Re,!0),Gn("resetSelectionOnContextMenu",!0),Gn("lineWiseCopyCut",!0),Gn("readOnly",!1,function(e,t){"nocursor"==t?(yn(e),e.display.input.blur(),e.display.disabled=!0):e.display.disabled=!1,e.display.input.readOnlyChanged(t)}),Gn("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),Gn("dragDrop",!0,Ut),Gn("allowDropFileTypes",null),Gn("cursorBlinkRate",530),Gn("cursorScrollMargin",0),Gn("cursorHeight",1,Re,!0),Gn("singleCursorHeightPerLine",!0,Re,!0),Gn("workTime",100),Gn("workDelay",100),Gn("flattenSpans",!0,r,!0),Gn("addModeClass",!1,r,!0),Gn("pollInterval",100),Gn("undoDepth",200,function(e,t){e.doc.history.undoDepth=t}),Gn("historyEventDelay",1250),Gn("viewportMargin",10,function(e){e.refresh()},!0),Gn("maxHighlightLength",1e4,r,!0),Gn("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),Gn("tabindex",null,function(e,t){e.display.input.getField().tabIndex=t||""}),Gn("autofocus",null);var ra=e.modes={},ia=e.mimeModes={};e.defineMode=function(t,n){e.defaults.mode||"null"==t||(e.defaults.mode=t),arguments.length>2&&(n.dependencies=Array.prototype.slice.call(arguments,2)),ra[t]=n},e.defineMIME=function(e,t){ia[e]=t},e.resolveMode=function(t){if("string"==typeof t&&ia.hasOwnProperty(t))t=ia[t];else if(t&&"string"==typeof t.name&&ia.hasOwnProperty(t.name)){var n=ia[t.name];"string"==typeof n&&(n={name:n}),t=Hi(n,t),t.name=n.name}else if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return e.resolveMode("application/xml");return"string"==typeof t?{name:t}:t||{name:"null"}},e.getMode=function(t,n){var n=e.resolveMode(n),r=ra[n.name];if(!r)return e.getMode(t,"text/plain");var i=r(t,n);if(oa.hasOwnProperty(n.name)){var o=oa[n.name];for(var a in o)o.hasOwnProperty(a)&&(i.hasOwnProperty(a)&&(i["_"+a]=i[a]),i[a]=o[a])}if(i.name=n.name,n.helperType&&(i.helperType=n.helperType),n.modeProps)for(var a in n.modeProps)i[a]=n.modeProps[a];return i},e.defineMode("null",function(){return{token:function(e){e.skipToEnd()}}}),e.defineMIME("text/plain","null");var oa=e.modeExtensions={};e.extendMode=function(e,t){var n=oa.hasOwnProperty(e)?oa[e]:oa[e]={};Wi(t,n)},e.defineExtension=function(t,n){e.prototype[t]=n},e.defineDocExtension=function(e,t){Ca.prototype[e]=t},e.defineOption=Gn;var aa=[];e.defineInitHook=function(e){aa.push(e)};var la=e.helpers={};e.registerHelper=function(t,n,r){la.hasOwnProperty(t)||(la[t]=e[t]={_global:[]}),la[t][n]=r},e.registerGlobalHelper=function(t,n,r,i){e.registerHelper(t,n,i),la[t]._global.push({pred:r,val:i})};var sa=e.copyState=function(e,t){if(t===!0)return t;if(e.copyState)return e.copyState(t);var n={};for(var r in t){var i=t[r];i instanceof Array&&(i=i.concat([])),n[r]=i}return n},ca=e.startState=function(e,t,n){return e.startState?e.startState(t,n):!0};e.innerMode=function(e,t){for(;e.innerMode;){var n=e.innerMode(t);if(!n||n.mode==e)break;t=n.state,e=n.mode}return n||{mode:e,state:t}};var ua=e.commands={selectAll:function(e){e.setSelection(Bo(e.firstLine(),0),Bo(e.lastLine()),Wa)},singleSelection:function(e){e.setSelection(e.getCursor("anchor"),e.getCursor("head"),Wa)},killLine:function(e){jn(e,function(t){if(t.empty()){var n=Zr(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line<e.lastLine()?{from:t.head,to:Bo(t.head.line+1,0)}:{from:t.head,to:Bo(t.head.line,n)}}return{from:t.from(),to:t.to()}})},deleteLine:function(e){jn(e,function(t){return{from:Bo(t.from().line,0),to:me(e.doc,Bo(t.to().line+1,0))}})},delLineLeft:function(e){jn(e,function(e){return{from:Bo(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(e){jn(e,function(t){var n=e.charCoords(t.head,"div").top+5,r=e.coordsChar({left:0,top:n},"div");return{from:r,to:t.from()}})},delWrappedLineRight:function(e){jn(e,function(t){var n=e.charCoords(t.head,"div").top+5,r=e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},"div");return{from:t.from(),to:r}})},undo:function(e){e.undo()},redo:function(e){e.redo()},undoSelection:function(e){e.undoSelection()},redoSelection:function(e){e.redoSelection()},goDocStart:function(e){e.extendSelection(Bo(e.firstLine(),0))},goDocEnd:function(e){e.extendSelection(Bo(e.lastLine()))},goLineStart:function(e){e.extendSelectionsBy(function(t){return oo(e,t.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(e){e.extendSelectionsBy(function(t){return lo(e,t.head)},{origin:"+move",bias:1})},goLineEnd:function(e){e.extendSelectionsBy(function(t){return ao(e,t.head.line)},{origin:"+move",bias:-1})},goLineRight:function(e){e.extendSelectionsBy(function(t){var n=e.charCoords(t.head,"div").top+5;return e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},"div")},_a)},goLineLeft:function(e){e.extendSelectionsBy(function(t){var n=e.charCoords(t.head,"div").top+5;return e.coordsChar({left:0,top:n},"div")},_a)},goLineLeftSmart:function(e){e.extendSelectionsBy(function(t){var n=e.charCoords(t.head,"div").top+5,r=e.coordsChar({left:0,top:n},"div");return r.ch<e.getLine(r.line).search(/\S/)?lo(e,t.head):r},_a)},goLineUp:function(e){e.moveV(-1,"line")},goLineDown:function(e){e.moveV(1,"line")},goPageUp:function(e){e.moveV(-1,"page")},goPageDown:function(e){e.moveV(1,"page")},goCharLeft:function(e){e.moveH(-1,"char")},goCharRight:function(e){e.moveH(1,"char")},goColumnLeft:function(e){e.moveH(-1,"column")},goColumnRight:function(e){e.moveH(1,"column")},goWordLeft:function(e){e.moveH(-1,"word")},goGroupRight:function(e){e.moveH(1,"group")},goGroupLeft:function(e){e.moveH(-1,"group")},goWordRight:function(e){e.moveH(1,"word")},delCharBefore:function(e){e.deleteH(-1,"char")},delCharAfter:function(e){e.deleteH(1,"char")},delWordBefore:function(e){e.deleteH(-1,"word")},delWordAfter:function(e){e.deleteH(1,"word")},delGroupBefore:function(e){e.deleteH(-1,"group")},delGroupAfter:function(e){e.deleteH(1,"group")},indentAuto:function(e){e.indentSelection("smart")},indentMore:function(e){e.indentSelection("add")},indentLess:function(e){e.indentSelection("subtract")},insertTab:function(e){e.replaceSelection(" ")},insertSoftTab:function(e){for(var t=[],n=e.listSelections(),r=e.options.tabSize,i=0;i<n.length;i++){var o=n[i].from(),a=Fa(e.getLine(o.line),o.ch,r);t.push(Oi(r-a%r))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection("add"):e.execCommand("insertTab")},transposeChars:function(e){At(e,function(){for(var t=e.listSelections(),n=[],r=0;r<t.length;r++){var i=t[r].head,o=Zr(e.doc,i.line).text;if(o)if(i.ch==o.length&&(i=new Bo(i.line,i.ch-1)),i.ch>0)i=new Bo(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),Bo(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var a=Zr(e.doc,i.line-1).text;a&&e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+a.charAt(a.length-1),Bo(i.line-1,a.length-1),Bo(i.line,1),"+transpose")}n.push(new fe(i,i))}e.setSelections(n)})},newlineAndIndent:function(e){At(e,function(){for(var t=e.listSelections().length,n=0;t>n;n++){var r=e.listSelections()[n];e.replaceRange(e.doc.lineSeparator(),r.anchor,r.head,"+input"),e.indentLine(r.from().line+1,null,!0)}Bn(e)})},openLine:function(e){e.replaceSelection("\n","start")},toggleOverwrite:function(e){e.toggleOverwrite()}},fa=e.keyMap={};fa.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},fa.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},fa.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},fa.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},fa["default"]=Eo?fa.macDefault:fa.pcDefault,e.normalizeKeyMap=function(e){var t={};for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];if(/^(name|fallthrough|(de|at)tach)$/.test(n))continue;if("..."==r){delete e[n];continue}for(var i=Ri(n.split(" "),Yn),o=0;o<i.length;o++){var a,l;o==i.length-1?(l=i.join(" "),a=r):(l=i.slice(0,o+1).join(" "),a="...");var s=t[l];if(s){if(s!=a)throw new Error("Inconsistent bindings for "+l)}else t[l]=a}delete e[n]}for(var c in t)e[c]=t[c];return e};var ha=e.lookupKey=function(e,t,n,r){t=$n(t);var i=t.call?t.call(e,r):t[e];if(i===!1)return"nothing";if("..."===i)return"multi";if(null!=i&&n(i))return"handled";if(t.fallthrough){if("[object Array]"!=Object.prototype.toString.call(t.fallthrough))return ha(e,t.fallthrough,n,r);for(var o=0;o<t.fallthrough.length;o++){var a=ha(e,t.fallthrough[o],n,r); -if(a)return a}}},da=e.isModifierKey=function(e){var t="string"==typeof e?e:ol[e.keyCode];return"Ctrl"==t||"Alt"==t||"Shift"==t||"Mod"==t},pa=e.keyName=function(e,t){if(Co&&34==e.keyCode&&e["char"])return!1;var n=ol[e.keyCode],r=n;return null==r||e.altGraphKey?!1:(e.altKey&&"Alt"!=n&&(r="Alt-"+r),(Ro?e.metaKey:e.ctrlKey)&&"Ctrl"!=n&&(r="Ctrl-"+r),(Ro?e.ctrlKey:e.metaKey)&&"Cmd"!=n&&(r="Cmd-"+r),!t&&e.shiftKey&&"Shift"!=n&&(r="Shift-"+r),r)};e.fromTextArea=function(t,n){function r(){t.value=c.getValue()}if(n=n?Wi(n):{},n.value=t.value,!n.tabindex&&t.tabIndex&&(n.tabindex=t.tabIndex),!n.placeholder&&t.placeholder&&(n.placeholder=t.placeholder),null==n.autofocus){var i=Gi();n.autofocus=i==t||null!=t.getAttribute("autofocus")&&i==document.body}if(t.form&&(Ea(t.form,"submit",r),!n.leaveSubmitMethodAlone)){var o=t.form,a=o.submit;try{var l=o.submit=function(){r(),o.submit=a,o.submit(),o.submit=l}}catch(s){}}n.finishInit=function(e){e.save=r,e.getTextArea=function(){return t},e.toTextArea=function(){e.toTextArea=isNaN,r(),t.parentNode.removeChild(e.getWrapperElement()),t.style.display="",t.form&&(Ia(t.form,"submit",r),"function"==typeof t.form.submit&&(t.form.submit=a))}},t.style.display="none";var c=e(function(e){t.parentNode.insertBefore(e,t.nextSibling)},n);return c};var ma=e.StringStream=function(e,t){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0};ma.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||void 0},next:function(){return this.pos<this.string.length?this.string.charAt(this.pos++):void 0},eat:function(e){var t=this.string.charAt(this.pos);if("string"==typeof e)var n=t==e;else var n=t&&(e.test?e.test(t):e(t));return n?(++this.pos,t):void 0},eatWhile:function(e){for(var t=this.pos;this.eat(e););return this.pos>t},eatSpace:function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},skipToEnd:function(){this.pos=this.string.length},skipTo:function(e){var t=this.string.indexOf(e,this.pos);return t>-1?(this.pos=t,!0):void 0},backUp:function(e){this.pos-=e},column:function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=Fa(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?Fa(this.string,this.lineStart,this.tabSize):0)},indentation:function(){return Fa(this.string,null,this.tabSize)-(this.lineStart?Fa(this.string,this.lineStart,this.tabSize):0)},match:function(e,t,n){if("string"!=typeof e){var r=this.string.slice(this.pos).match(e);return r&&r.index>0?null:(r&&t!==!1&&(this.pos+=r[0].length),r)}var i=function(e){return n?e.toLowerCase():e},o=this.string.substr(this.pos,e.length);return i(o)==i(e)?(t!==!1&&(this.pos+=e.length),!0):void 0},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}}};var ga=0,va=e.TextMarker=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++ga};Ai(va),va.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&bt(e),Ni(this,"clear")){var n=this.find();n&&Ci(this,"clear",n.from,n.to)}for(var r=null,i=null,o=0;o<this.lines.length;++o){var a=this.lines[o],l=er(a.markedSpans,this);e&&!this.collapsed?Ht(e,ti(a),"text"):e&&(null!=l.to&&(i=ti(a)),null!=l.from&&(r=ti(a))),a.markedSpans=tr(a.markedSpans,l),null==l.from&&this.collapsed&&!kr(this.doc,a)&&e&&ei(a,yt(e.display))}if(e&&this.collapsed&&!e.options.lineWrapping)for(var o=0;o<this.lines.length;++o){var s=yr(this.lines[o]),c=f(s);c>e.display.maxLineLength&&(e.display.maxLine=s,e.display.maxLineLength=c,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&Dt(e,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&Ae(e.doc)),e&&Ci(e,"markerCleared",e,this),t&&kt(e),this.parent&&this.parent.clear()}},va.prototype.find=function(e,t){null==e&&"bookmark"==this.type&&(e=1);for(var n,r,i=0;i<this.lines.length;++i){var o=this.lines[i],a=er(o.markedSpans,this);if(null!=a.from&&(n=Bo(t?o:ti(o),a.from),-1==e))return n;if(null!=a.to&&(r=Bo(t?o:ti(o),a.to),1==e))return r}return n&&{from:n,to:r}},va.prototype.changed=function(){var e=this.find(-1,!0),t=this,n=this.doc.cm;e&&n&&At(n,function(){var r=e.line,i=ti(e.line),o=Qe(n,i);if(o&&(ot(o),n.curOp.selectionChanged=n.curOp.forceUpdate=!0),n.curOp.updateMaxLine=!0,!kr(t.doc,r)&&null!=t.height){var a=t.height;t.height=null;var l=Lr(t)-a;l&&ei(r,r.height+l)}})},va.prototype.attachLine=function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=Pi(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)},va.prototype.detachLine=function(e){if(this.lines.splice(Pi(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}};var ga=0,ya=e.SharedTextMarker=function(e,t){this.markers=e,this.primary=t;for(var n=0;n<e.length;++n)e[n].parent=this};Ai(ya),ya.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();Ci(this,"clear")}},ya.prototype.find=function(e,t){return this.primary.find(e,t)};var xa=e.LineWidget=function(e,t,n){if(n)for(var r in n)n.hasOwnProperty(r)&&(this[r]=n[r]);this.doc=e,this.node=t};Ai(xa),xa.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,n=this.line,r=ti(n);if(null!=r&&t){for(var i=0;i<t.length;++i)t[i]==this&&t.splice(i--,1);t.length||(n.widgets=null);var o=Lr(this);ei(n,Math.max(0,n.height-o)),e&&At(e,function(){Cr(e,n,-o),Ht(e,r,"widget")})}},xa.prototype.changed=function(){var e=this.height,t=this.doc.cm,n=this.line;this.height=null;var r=Lr(this)-e;r&&(ei(n,n.height+r),t&&At(t,function(){t.curOp.forceUpdate=!0,Cr(t,n,r)}))};var ba=e.Line=function(e,t,n){this.text=e,ur(this,t),this.height=n?n(this):1};Ai(ba),ba.prototype.lineNo=function(){return ti(this)};var wa={},ka={};$r.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var n=e,r=e+t;r>n;++n){var i=this.lines[n];this.height-=i.height,Nr(i),Ci(i,"delete")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,n){this.height+=n,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var r=0;r<t.length;++r)t[r].parent=this},iterN:function(e,t,n){for(var r=e+t;r>e;++e)if(n(this.lines[e]))return!0}},Vr.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var n=0;n<this.children.length;++n){var r=this.children[n],i=r.chunkSize();if(i>e){var o=Math.min(t,i-e),a=r.height;if(r.removeInner(e,o),this.height-=a-r.height,i==o&&(this.children.splice(n--,1),r.parent=null),0==(t-=o))break;e=0}else e-=i}if(this.size-t<25&&(this.children.length>1||!(this.children[0]instanceof $r))){var l=[];this.collapse(l),this.children=[new $r(l)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,n){this.size+=t.length,this.height+=n;for(var r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(o>=e){if(i.insertInner(e,t,n),i.lines&&i.lines.length>50){for(var a=i.lines.length%25+25,l=a;l<i.lines.length;){var s=new $r(i.lines.slice(l,l+=25));i.height-=s.height,this.children.splice(++r,0,s),s.parent=this}i.lines=i.lines.slice(0,a),this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t=e.children.splice(e.children.length-5,5),n=new Vr(t);if(e.parent){e.size-=n.size,e.height-=n.height;var r=Pi(e.parent.children,e);e.parent.children.splice(r+1,0,n)}else{var i=new Vr(e.children);i.parent=e,e.children=[i,n],e=i}n.parent=e.parent}while(e.children.length>10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(o>e){var a=Math.min(t,o-e);if(i.iterN(e,a,n))return!0;if(0==(t-=a))break;e=0}else e-=o}}};var Sa=0,Ca=e.Doc=function(e,t,n,r){if(!(this instanceof Ca))return new Ca(e,t,n,r);null==n&&(n=0),Vr.call(this,[new $r([new ba("",null)])]),this.first=n,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.frontier=n;var i=Bo(n,0);this.sel=de(i),this.history=new oi(null),this.id=++Sa,this.modeOption=t,this.lineSep=r,this.extend=!1,"string"==typeof e&&(e=this.splitLines(e)),Yr(this,{from:i,to:i,text:e}),Te(this,de(i),Wa)};Ca.prototype=Hi(Vr.prototype,{constructor:Ca,iter:function(e,t,n){n?this.iterN(e-this.first,t-e,n):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var n=0,r=0;r<t.length;++r)n+=t[r].height;this.insertInner(e-this.first,t,n)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=Qr(this,this.first,this.first+this.size);return e===!1?t:t.join(e||this.lineSeparator())},setValue:It(function(e){var t=Bo(this.first,0),n=this.first+this.size-1;Tn(this,{from:t,to:Bo(n,Zr(this,n).text.length),text:this.splitLines(e),origin:"setValue",full:!0},!0),Te(this,de(t))}),replaceRange:function(e,t,n,r){t=me(this,t),n=n?me(this,n):t,In(this,e,t,n,r)},getRange:function(e,t,n){var r=Jr(this,me(this,e),me(this,t));return n===!1?r:r.join(n||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){return ve(this,e)?Zr(this,e):void 0},getLineNumber:function(e){return ti(e)},getLineHandleVisualStart:function(e){return"number"==typeof e&&(e=Zr(this,e)),yr(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return me(this,e)},getCursor:function(e){var t,n=this.sel.primary();return t=null==e||"head"==e?n.head:"anchor"==e?n.anchor:"end"==e||"to"==e||e===!1?n.to():n.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:It(function(e,t,n){Se(this,me(this,"number"==typeof e?Bo(e,t||0):e),null,n)}),setSelection:It(function(e,t,n){Se(this,me(this,e),me(this,t||e),n)}),extendSelection:It(function(e,t,n){be(this,me(this,e),t&&me(this,t),n)}),extendSelections:It(function(e,t){we(this,ye(this,e),t)}),extendSelectionsBy:It(function(e,t){var n=Ri(this.sel.ranges,e);we(this,ye(this,n),t)}),setSelections:It(function(e,t,n){if(e.length){for(var r=0,i=[];r<e.length;r++)i[r]=new fe(me(this,e[r].anchor),me(this,e[r].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),Te(this,he(i,t),n)}}),addSelection:It(function(e,t,n){var r=this.sel.ranges.slice(0);r.push(new fe(me(this,e),me(this,t||e))),Te(this,he(r,r.length-1),n)}),getSelection:function(e){for(var t,n=this.sel.ranges,r=0;r<n.length;r++){var i=Jr(this,n[r].from(),n[r].to());t=t?t.concat(i):i}return e===!1?t:t.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],n=this.sel.ranges,r=0;r<n.length;r++){var i=Jr(this,n[r].from(),n[r].to());e!==!1&&(i=i.join(e||this.lineSeparator())),t[r]=i}return t},replaceSelection:function(e,t,n){for(var r=[],i=0;i<this.sel.ranges.length;i++)r[i]=e;this.replaceSelections(r,t,n||"+input")},replaceSelections:It(function(e,t,n){for(var r=[],i=this.sel,o=0;o<i.ranges.length;o++){var a=i.ranges[o];r[o]={from:a.from(),to:a.to(),text:this.splitLines(e[o]),origin:n}}for(var l=t&&"end"!=t&&Cn(this,r,t),o=r.length-1;o>=0;o--)Tn(this,r[o]);l?Le(this,l):this.cm&&Bn(this.cm)}),undo:It(function(){Nn(this,"undo")}),redo:It(function(){Nn(this,"redo")}),undoSelection:It(function(){Nn(this,"undo",!0)}),redoSelection:It(function(){Nn(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r<e.done.length;r++)e.done[r].ranges||++t;for(var r=0;r<e.undone.length;r++)e.undone[r].ranges||++n;return{undo:t,redo:n}},clearHistory:function(){this.history=new oi(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:gi(this.history.done),undone:gi(this.history.undone)}},setHistory:function(e){var t=this.history=new oi(this.history.maxGeneration);t.done=gi(e.done.slice(0),null,!0),t.undone=gi(e.undone.slice(0),null,!0)},addLineClass:It(function(e,t,n){return zn(this,e,"gutter"==t?"gutter":"class",function(e){var r="text"==t?"textClass":"background"==t?"bgClass":"gutter"==t?"gutterClass":"wrapClass";if(e[r]){if(Yi(n).test(e[r]))return!1;e[r]+=" "+n}else e[r]=n;return!0})}),removeLineClass:It(function(e,t,n){return zn(this,e,"gutter"==t?"gutter":"class",function(e){var r="text"==t?"textClass":"background"==t?"bgClass":"gutter"==t?"gutterClass":"wrapClass",i=e[r];if(!i)return!1;if(null==n)e[r]=null;else{var o=i.match(Yi(n));if(!o)return!1;var a=o.index+o[0].length;e[r]=i.slice(0,o.index)+(o.index&&a!=i.length?" ":"")+i.slice(a)||null}return!0})}),addLineWidget:It(function(e,t,n){return Tr(this,e,t,n)}),removeLineWidget:function(e){e.clear()},markText:function(e,t,n){return Vn(this,me(this,e),me(this,t),n,n&&n.type||"range")},setBookmark:function(e,t){var n={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return e=me(this,e),Vn(this,e,e,n,"bookmark")},findMarksAt:function(e){e=me(this,e);var t=[],n=Zr(this,e.line).markedSpans;if(n)for(var r=0;r<n.length;++r){var i=n[r];(null==i.from||i.from<=e.ch)&&(null==i.to||i.to>=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,n){e=me(this,e),t=me(this,t);var r=[],i=e.line;return this.iter(e.line,t.line+1,function(o){var a=o.markedSpans;if(a)for(var l=0;l<a.length;l++){var s=a[l];null!=s.to&&i==e.line&&e.ch>=s.to||null==s.from&&i!=e.line||null!=s.from&&i==t.line&&s.from>=t.ch||n&&!n(s.marker)||r.push(s.marker.parent||s.marker)}++i}),r},getAllMarks:function(){var e=[];return this.iter(function(t){var n=t.markedSpans;if(n)for(var r=0;r<n.length;++r)null!=n[r].from&&e.push(n[r].marker)}),e},posFromIndex:function(e){var t,n=this.first,r=this.lineSeparator().length;return this.iter(function(i){var o=i.text.length+r;return o>e?(t=e,!0):(e-=o,void++n)}),me(this,Bo(n,t))},indexFromPos:function(e){e=me(this,e);var t=e.ch;if(e.line<this.first||e.ch<0)return 0;var n=this.lineSeparator().length;return this.iter(this.first,e.line,function(e){t+=e.text.length+n}),t},copy:function(e){var t=new Ca(Qr(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,n=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<n&&(n=e.to);var r=new Ca(Qr(this,t,n),e.mode||this.modeOption,t,this.lineSep);return e.sharedHist&&(r.history=this.history),(this.linked||(this.linked=[])).push({doc:r,sharedHist:e.sharedHist}),r.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],Zn(r,Xn(this)),r},unlinkDoc:function(t){if(t instanceof e&&(t=t.doc),this.linked)for(var n=0;n<this.linked.length;++n){var r=this.linked[n];if(r.doc==t){this.linked.splice(n,1),t.unlinkDoc(this),Jn(Xn(this));break}}if(t.history==this.history){var i=[t.id];Kr(t,function(e){i.push(e.id)},!0),t.history=new oi(null),t.history.done=gi(this.history.done,i),t.history.undone=gi(this.history.undone,i)}},iterLinkedDocs:function(e){Kr(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):tl(e)},lineSeparator:function(){return this.lineSep||"\n"}}),Ca.prototype.eachLine=Ca.prototype.iter;var La="iter insert remove copy getEditor constructor".split(" ");for(var Ta in Ca.prototype)Ca.prototype.hasOwnProperty(Ta)&&Pi(La,Ta)<0&&(e.prototype[Ta]=function(e){return function(){return e.apply(this.doc,arguments)}}(Ca.prototype[Ta]));Ai(Ca);var Ma=e.e_preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},Na=e.e_stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},Aa=e.e_stop=function(e){Ma(e),Na(e)},Ea=e.on=function(e,t,n){if(e.addEventListener)e.addEventListener(t,n,!1);else if(e.attachEvent)e.attachEvent("on"+t,n);else{var r=e._handlers||(e._handlers={}),i=r[t]||(r[t]=[]);i.push(n)}},Oa=[],Ia=e.off=function(e,t,n){if(e.removeEventListener)e.removeEventListener(t,n,!1);else if(e.detachEvent)e.detachEvent("on"+t,n);else for(var r=Si(e,t,!1),i=0;i<r.length;++i)if(r[i]==n){r.splice(i,1);break}},Pa=e.signal=function(e,t){var n=Si(e,t,!0);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),i=0;i<n.length;++i)n[i].apply(null,r)},Ra=null,Da=30,Ha=e.Pass={toString:function(){return"CodeMirror.Pass"}},Wa={scroll:!1},Ba={origin:"*mouse"},_a={origin:"+move"};Ei.prototype.set=function(e,t){clearTimeout(this.id),this.id=setTimeout(t,e)};var Fa=e.countColumn=function(e,t,n,r,i){null==t&&(t=e.search(/[^\s\u00a0]/),-1==t&&(t=e.length));for(var o=r||0,a=i||0;;){var l=e.indexOf(" ",o);if(0>l||l>=t)return a+(t-o);a+=l-o,a+=n-a%n,o=l+1}},za=e.findColumn=function(e,t,n){for(var r=0,i=0;;){var o=e.indexOf(" ",r);-1==o&&(o=e.length);var a=o-r;if(o==e.length||i+a>=t)return r+Math.min(a,t-i);if(i+=o-r,i+=n-i%n,r=o+1,i>=t)return r}},ja=[""],Ua=function(e){e.select()};No?Ua=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:xo&&(Ua=function(e){try{e.select()}catch(t){}});var qa,Ga=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,Ya=e.isWordChar=function(e){return/\w/.test(e)||e>"€"&&(e.toUpperCase()!=e.toLowerCase()||Ga.test(e))},$a=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;qa=document.createRange?function(e,t,n,r){var i=document.createRange();return i.setEnd(r||e,n),i.setStart(e,t),i}:function(e,t,n){var r=document.body.createTextRange();try{r.moveToElementText(e.parentNode)}catch(i){return r}return r.collapse(!0),r.moveEnd("character",n),r.moveStart("character",t),r};var Va=e.contains=function(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do if(11==t.nodeType&&(t=t.host),t==e)return!0;while(t=t.parentNode)};xo&&11>bo&&(Gi=function(){try{return document.activeElement}catch(e){return document.body}});var Ka,Xa,Za=e.rmClass=function(e,t){var n=e.className,r=Yi(t).exec(n);if(r){var i=n.slice(r.index+r[0].length);e.className=n.slice(0,r.index)+(i?r[1]+i:"")}},Ja=e.addClass=function(e,t){var n=e.className;Yi(t).test(n)||(e.className+=(n?" ":"")+t)},Qa=!1,el=function(){if(xo&&9>bo)return!1;var e=ji("div");return"draggable"in e||"dragDrop"in e}(),tl=e.splitLines=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,n=[],r=e.length;r>=t;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),a=o.indexOf("\r");-1!=a?(n.push(o.slice(0,a)),t+=a+1):(n.push(o),t=i+1)}return n}:function(e){return e.split(/\r\n?|\n/)},nl=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(t){return!1}}:function(e){try{var t=e.ownerDocument.selection.createRange()}catch(n){}return t&&t.parentElement()==e?0!=t.compareEndPoints("StartToEnd",t):!1},rl=function(){var e=ji("div");return"oncopy"in e?!0:(e.setAttribute("oncopy","return;"),"function"==typeof e.oncopy)}(),il=null,ol=e.keyNames={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",127:"Delete",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"};!function(){for(var e=0;10>e;e++)ol[e+48]=ol[e+96]=String(e);for(var e=65;90>=e;e++)ol[e]=String.fromCharCode(e);for(var e=1;12>=e;e++)ol[e+111]=ol[e+63235]="F"+e}();var al,ll=function(){function e(e){return 247>=e?n.charAt(e):e>=1424&&1524>=e?"R":e>=1536&&1773>=e?r.charAt(e-1536):e>=1774&&2220>=e?"r":e>=8192&&8203>=e?"w":8204==e?"b":"L"}function t(e,t,n){this.level=e,this.from=t,this.to=n}var n="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",r="rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm",i=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,o=/[stwN]/,a=/[LRr]/,l=/[Lb1n]/,s=/[1n]/,c="L";return function(n){if(!i.test(n))return!1;for(var r,u=n.length,f=[],h=0;u>h;++h)f.push(r=e(n.charCodeAt(h)));for(var h=0,d=c;u>h;++h){var r=f[h];"m"==r?f[h]=d:d=r}for(var h=0,p=c;u>h;++h){var r=f[h];"1"==r&&"r"==p?f[h]="n":a.test(r)&&(p=r,"r"==r&&(f[h]="R"))}for(var h=1,d=f[0];u-1>h;++h){var r=f[h];"+"==r&&"1"==d&&"1"==f[h+1]?f[h]="1":","!=r||d!=f[h+1]||"1"!=d&&"n"!=d||(f[h]=d),d=r}for(var h=0;u>h;++h){var r=f[h];if(","==r)f[h]="N";else if("%"==r){for(var m=h+1;u>m&&"%"==f[m];++m);for(var g=h&&"!"==f[h-1]||u>m&&"1"==f[m]?"1":"N",v=h;m>v;++v)f[v]=g;h=m-1}}for(var h=0,p=c;u>h;++h){var r=f[h];"L"==p&&"1"==r?f[h]="L":a.test(r)&&(p=r)}for(var h=0;u>h;++h)if(o.test(f[h])){for(var m=h+1;u>m&&o.test(f[m]);++m);for(var y="L"==(h?f[h-1]:c),x="L"==(u>m?f[m]:c),g=y||x?"L":"R",v=h;m>v;++v)f[v]=g;h=m-1}for(var b,w=[],h=0;u>h;)if(l.test(f[h])){var k=h;for(++h;u>h&&l.test(f[h]);++h);w.push(new t(0,k,h))}else{var S=h,C=w.length;for(++h;u>h&&"L"!=f[h];++h);for(var v=S;h>v;)if(s.test(f[v])){v>S&&w.splice(C,0,new t(1,S,v));var L=v;for(++v;h>v&&s.test(f[v]);++v);w.splice(C,0,new t(2,L,v)),S=v}else++v;h>S&&w.splice(C,0,new t(1,S,h))}return 1==w[0].level&&(b=n.match(/^\s+/))&&(w[0].from=b[0].length,w.unshift(new t(0,0,b[0].length))),1==Ii(w).level&&(b=n.match(/\s+$/))&&(Ii(w).to-=b[0].length,w.push(new t(0,u-b[0].length,u))),2==w[0].level&&w.unshift(new t(1,w[0].to,w[0].to)),w[0].level!=Ii(w).level&&w.push(new t(w[0].level,u,u)),w}}();return e.version="5.15.2",e})},{}],11:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror"),t("../markdown/markdown"),t("../../addon/mode/overlay")):"function"==typeof e&&e.amd?e(["../../lib/codemirror","../markdown/markdown","../../addon/mode/overlay"],i):i(CodeMirror)}(function(e){"use strict";var t=/^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\.beep|\.lwz|\.xpc|\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\.beeps?|xmpp|xri|ymsgr|z39\.50[rs]?):(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i;e.defineMode("gfm",function(n,r){function i(e){return e.code=!1,null}var o=0,a={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(e){return{code:e.code,codeBlock:e.codeBlock,ateSpace:e.ateSpace}},token:function(e,n){if(n.combineTokens=null,n.codeBlock)return e.match(/^```+/)?(n.codeBlock=!1,null):(e.skipToEnd(),null);if(e.sol()&&(n.code=!1),e.sol()&&e.match(/^```+/))return e.skipToEnd(),n.codeBlock=!0,null;if("`"===e.peek()){e.next();var i=e.pos;e.eatWhile("`");var a=1+e.pos-i;return n.code?a===o&&(n.code=!1):(o=a,n.code=!0),null}if(n.code)return e.next(),null;if(e.eatSpace())return n.ateSpace=!0,null;if((e.sol()||n.ateSpace)&&(n.ateSpace=!1,r.gitHubSpice!==!1)){if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?:[a-f0-9]{7,40}\b)/))return n.combineTokens=!0,"link";if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/))return n.combineTokens=!0,"link"}return e.match(t)&&"]("!=e.string.slice(e.start-2,e.start)&&(0==e.start||/\W/.test(e.string.charAt(e.start-1)))?(n.combineTokens=!0,"link"):(e.next(),null)},blankLine:i},l={underscoresBreakWords:!1,taskLists:!0,fencedCodeBlocks:"```",strikethrough:!0};for(var s in r)l[s]=r[s];return l.name="markdown",e.overlayMode(e.getMode(n,l),a)},"markdown"),e.defineMIME("text/x-gfm","gfm")})},{"../../addon/mode/overlay":8,"../../lib/codemirror":10,"../markdown/markdown":12}],12:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror"),t("../xml/xml"),t("../meta")):"function"==typeof e&&e.amd?e(["../../lib/codemirror","../xml/xml","../meta"],i):i(CodeMirror)}(function(e){"use strict";e.defineMode("markdown",function(t,n){function r(n){if(e.findModeByName){var r=e.findModeByName(n);r&&(n=r.mime||r.mimes[0])}var i=e.getMode(t,n);return"null"==i.name?null:i}function i(e,t,n){return t.f=t.inline=n,n(e,t)}function o(e,t,n){return t.f=t.block=n,n(e,t)}function a(e){return!e||!/\S/.test(e.string)}function l(e){return e.linkTitle=!1,e.em=!1,e.strong=!1,e.strikethrough=!1,e.quote=0,e.indentedCode=!1,k&&e.f==c&&(e.f=p,e.block=s),e.trailingSpace=0,e.trailingSpaceNewLine=!1,e.prevLine=e.thisLine,e.thisLine=null,null}function s(t,o){var l=t.sol(),s=o.list!==!1,c=o.indentedCode;o.indentedCode=!1,s&&(o.indentationDiff>=0?(o.indentationDiff<4&&(o.indentation-=o.indentationDiff),o.list=null):o.indentation>0?o.list=null:o.list=!1);var f=null;if(o.indentationDiff>=4)return t.skipToEnd(),c||a(o.prevLine)?(o.indentation-=4,o.indentedCode=!0,S.code):null;if(t.eatSpace())return null;if((f=t.match(A))&&f[1].length<=6)return o.header=f[1].length,n.highlightFormatting&&(o.formatting="header"),o.f=o.inline,h(o);if(!(a(o.prevLine)||o.quote||s||c)&&(f=t.match(E)))return o.header="="==f[0].charAt(0)?1:2,n.highlightFormatting&&(o.formatting="header"),o.f=o.inline,h(o);if(t.eat(">"))return o.quote=l?1:o.quote+1,n.highlightFormatting&&(o.formatting="quote"),t.eatSpace(),h(o);if("["===t.peek())return i(t,o,y);if(t.match(L,!0))return o.hr=!0,S.hr;if((a(o.prevLine)||s)&&(t.match(T,!1)||t.match(M,!1))){var d=null;for(t.match(T,!0)?d="ul":(t.match(M,!0),d="ol"),o.indentation=t.column()+t.current().length,o.list=!0;o.listStack&&t.column()<o.listStack[o.listStack.length-1];)o.listStack.pop();return o.listStack.push(o.indentation),n.taskLists&&t.match(N,!1)&&(o.taskList=!0),o.f=o.inline,n.highlightFormatting&&(o.formatting=["list","list-"+d]),h(o)}return n.fencedCodeBlocks&&(f=t.match(I,!0))?(o.fencedChars=f[1],o.localMode=r(f[2]),o.localMode&&(o.localState=e.startState(o.localMode)),o.f=o.block=u,n.highlightFormatting&&(o.formatting="code-block"),o.code=-1,h(o)):i(t,o,o.inline)}function c(t,n){var r=w.token(t,n.htmlState);if(!k){var i=e.innerMode(w,n.htmlState);("xml"==i.mode.name&&null===i.state.tagStart&&!i.state.context&&i.state.tokenize.isInText||n.md_inside&&t.current().indexOf(">")>-1)&&(n.f=p,n.block=s,n.htmlState=null)}return r}function u(e,t){return t.fencedChars&&e.match(t.fencedChars,!1)?(t.localMode=t.localState=null,t.f=t.block=f,null):t.localMode?t.localMode.token(e,t.localState):(e.skipToEnd(),S.code)}function f(e,t){e.match(t.fencedChars),t.block=s,t.f=p,t.fencedChars=null,n.highlightFormatting&&(t.formatting="code-block"),t.code=1;var r=h(t);return t.code=0,r}function h(e){var t=[];if(e.formatting){t.push(S.formatting),"string"==typeof e.formatting&&(e.formatting=[e.formatting]);for(var r=0;r<e.formatting.length;r++)t.push(S.formatting+"-"+e.formatting[r]),"header"===e.formatting[r]&&t.push(S.formatting+"-"+e.formatting[r]+"-"+e.header),"quote"===e.formatting[r]&&(!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=e.quote?t.push(S.formatting+"-"+e.formatting[r]+"-"+e.quote):t.push("error"))}if(e.taskOpen)return t.push("meta"),t.length?t.join(" "):null;if(e.taskClosed)return t.push("property"),t.length?t.join(" "):null;if(e.linkHref?t.push(S.linkHref,"url"):(e.strong&&t.push(S.strong),e.em&&t.push(S.em),e.strikethrough&&t.push(S.strikethrough),e.linkText&&t.push(S.linkText),e.code&&t.push(S.code)),e.header&&t.push(S.header,S.header+"-"+e.header),e.quote&&(t.push(S.quote),!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=e.quote?t.push(S.quote+"-"+e.quote):t.push(S.quote+"-"+n.maxBlockquoteDepth)),e.list!==!1){var i=(e.listStack.length-1)%3;i?1===i?t.push(S.list2):t.push(S.list3):t.push(S.list1)}return e.trailingSpaceNewLine?t.push("trailing-space-new-line"):e.trailingSpace&&t.push("trailing-space-"+(e.trailingSpace%2?"a":"b")),t.length?t.join(" "):null}function d(e,t){return e.match(O,!0)?h(t):void 0}function p(t,r){var i=r.text(t,r);if("undefined"!=typeof i)return i;if(r.list)return r.list=null,h(r);if(r.taskList){var a="x"!==t.match(N,!0)[1];return a?r.taskOpen=!0:r.taskClosed=!0,n.highlightFormatting&&(r.formatting="task"),r.taskList=!1,h(r)}if(r.taskOpen=!1,r.taskClosed=!1,r.header&&t.match(/^#+$/,!0))return n.highlightFormatting&&(r.formatting="header"), -h(r);var l=t.sol(),s=t.next();if(r.linkTitle){r.linkTitle=!1;var u=s;"("===s&&(u=")"),u=(u+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1");var f="^\\s*(?:[^"+u+"\\\\]+|\\\\\\\\|\\\\.)"+u;if(t.match(new RegExp(f),!0))return S.linkHref}if("`"===s){var d=r.formatting;n.highlightFormatting&&(r.formatting="code"),t.eatWhile("`");var p=t.current().length;if(0==r.code)return r.code=p,h(r);if(p==r.code){var v=h(r);return r.code=0,v}return r.formatting=d,h(r)}if(r.code)return h(r);if("\\"===s&&(t.next(),n.highlightFormatting)){var y=h(r),x=S.formatting+"-escape";return y?y+" "+x:x}if("!"===s&&t.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return t.match(/\[[^\]]*\]/),r.inline=r.f=g,S.image;if("["===s&&t.match(/[^\]]*\](\(.*\)| ?\[.*?\])/,!1))return r.linkText=!0,n.highlightFormatting&&(r.formatting="link"),h(r);if("]"===s&&r.linkText&&t.match(/\(.*?\)| ?\[.*?\]/,!1)){n.highlightFormatting&&(r.formatting="link");var y=h(r);return r.linkText=!1,r.inline=r.f=g,y}if("<"===s&&t.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1)){r.f=r.inline=m,n.highlightFormatting&&(r.formatting="link");var y=h(r);return y?y+=" ":y="",y+S.linkInline}if("<"===s&&t.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1)){r.f=r.inline=m,n.highlightFormatting&&(r.formatting="link");var y=h(r);return y?y+=" ":y="",y+S.linkEmail}if("<"===s&&t.match(/^(!--|\w)/,!1)){var b=t.string.indexOf(">",t.pos);if(-1!=b){var k=t.string.substring(t.start,b);/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(k)&&(r.md_inside=!0)}return t.backUp(1),r.htmlState=e.startState(w),o(t,r,c)}if("<"===s&&t.match(/^\/\w*?>/))return r.md_inside=!1,"tag";var C=!1;if(!n.underscoresBreakWords&&"_"===s&&"_"!==t.peek()&&t.match(/(\w)/,!1)){var L=t.pos-2;if(L>=0){var T=t.string.charAt(L);"_"!==T&&T.match(/(\w)/,!1)&&(C=!0)}}if("*"===s||"_"===s&&!C)if(l&&" "===t.peek());else{if(r.strong===s&&t.eat(s)){n.highlightFormatting&&(r.formatting="strong");var v=h(r);return r.strong=!1,v}if(!r.strong&&t.eat(s))return r.strong=s,n.highlightFormatting&&(r.formatting="strong"),h(r);if(r.em===s){n.highlightFormatting&&(r.formatting="em");var v=h(r);return r.em=!1,v}if(!r.em)return r.em=s,n.highlightFormatting&&(r.formatting="em"),h(r)}else if(" "===s&&(t.eat("*")||t.eat("_"))){if(" "===t.peek())return h(r);t.backUp(1)}if(n.strikethrough)if("~"===s&&t.eatWhile(s)){if(r.strikethrough){n.highlightFormatting&&(r.formatting="strikethrough");var v=h(r);return r.strikethrough=!1,v}if(t.match(/^[^\s]/,!1))return r.strikethrough=!0,n.highlightFormatting&&(r.formatting="strikethrough"),h(r)}else if(" "===s&&t.match(/^~~/,!0)){if(" "===t.peek())return h(r);t.backUp(2)}return" "===s&&(t.match(/ +$/,!1)?r.trailingSpace++:r.trailingSpace&&(r.trailingSpaceNewLine=!0)),h(r)}function m(e,t){var r=e.next();if(">"===r){t.f=t.inline=p,n.highlightFormatting&&(t.formatting="link");var i=h(t);return i?i+=" ":i="",i+S.linkInline}return e.match(/^[^>]+/,!0),S.linkInline}function g(e,t){if(e.eatSpace())return null;var r=e.next();return"("===r||"["===r?(t.f=t.inline=v("("===r?")":"]",0),n.highlightFormatting&&(t.formatting="link-string"),t.linkHref=!0,h(t)):"error"}function v(e){return function(t,r){var i=t.next();if(i===e){r.f=r.inline=p,n.highlightFormatting&&(r.formatting="link-string");var o=h(r);return r.linkHref=!1,o}return t.match(P[e]),r.linkHref=!0,h(r)}}function y(e,t){return e.match(/^([^\]\\]|\\.)*\]:/,!1)?(t.f=x,e.next(),n.highlightFormatting&&(t.formatting="link"),t.linkText=!0,h(t)):i(e,t,p)}function x(e,t){if(e.match(/^\]:/,!0)){t.f=t.inline=b,n.highlightFormatting&&(t.formatting="link");var r=h(t);return t.linkText=!1,r}return e.match(/^([^\]\\]|\\.)+/,!0),S.linkText}function b(e,t){return e.eatSpace()?null:(e.match(/^[^\s]+/,!0),void 0===e.peek()?t.linkTitle=!0:e.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/,!0),t.f=t.inline=p,S.linkHref+" url")}var w=e.getMode(t,"text/html"),k="null"==w.name;void 0===n.highlightFormatting&&(n.highlightFormatting=!1),void 0===n.maxBlockquoteDepth&&(n.maxBlockquoteDepth=0),void 0===n.underscoresBreakWords&&(n.underscoresBreakWords=!0),void 0===n.taskLists&&(n.taskLists=!1),void 0===n.strikethrough&&(n.strikethrough=!1),void 0===n.tokenTypeOverrides&&(n.tokenTypeOverrides={});var S={header:"header",code:"comment",quote:"quote",list1:"variable-2",list2:"variable-3",list3:"keyword",hr:"hr",image:"tag",formatting:"formatting",linkInline:"link",linkEmail:"link",linkText:"link",linkHref:"string",em:"em",strong:"strong",strikethrough:"strikethrough"};for(var C in S)S.hasOwnProperty(C)&&n.tokenTypeOverrides[C]&&(S[C]=n.tokenTypeOverrides[C]);var L=/^([*\-_])(?:\s*\1){2,}\s*$/,T=/^[*\-+]\s+/,M=/^[0-9]+([.)])\s+/,N=/^\[(x| )\](?=\s)/,A=n.allowAtxHeaderWithoutSpace?/^(#+)/:/^(#+)(?: |$)/,E=/^ *(?:\={1,}|-{1,})\s*$/,O=/^[^#!\[\]*_\\<>` "'(~]+/,I=new RegExp("^("+(n.fencedCodeBlocks===!0?"~~~+|```+":n.fencedCodeBlocks)+")[ \\t]*([\\w+#-]*)"),P={")":/^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/,"]":/^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\\]]|\\.)*\])*?(?=\])/},R={startState:function(){return{f:s,prevLine:null,thisLine:null,block:s,htmlState:null,indentation:0,inline:p,text:d,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,fencedChars:null}},copyState:function(t){return{f:t.f,prevLine:t.prevLine,thisLine:t.thisLine,block:t.block,htmlState:t.htmlState&&e.copyState(w,t.htmlState),indentation:t.indentation,localMode:t.localMode,localState:t.localMode?e.copyState(t.localMode,t.localState):null,inline:t.inline,text:t.text,formatting:!1,linkTitle:t.linkTitle,code:t.code,em:t.em,strong:t.strong,strikethrough:t.strikethrough,header:t.header,hr:t.hr,taskList:t.taskList,list:t.list,listStack:t.listStack.slice(0),quote:t.quote,indentedCode:t.indentedCode,trailingSpace:t.trailingSpace,trailingSpaceNewLine:t.trailingSpaceNewLine,md_inside:t.md_inside,fencedChars:t.fencedChars}},token:function(e,t){if(t.formatting=!1,e!=t.thisLine){var n=t.header||t.hr;if(t.header=0,t.hr=!1,e.match(/^\s*$/,!0)||n){if(l(t),!n)return null;t.prevLine=null}t.prevLine=t.thisLine,t.thisLine=e,t.taskList=!1,t.trailingSpace=0,t.trailingSpaceNewLine=!1,t.f=t.block;var r=e.match(/^\s*/,!0)[0].replace(/\t/g," ").length;if(t.indentationDiff=Math.min(r-t.indentation,4),t.indentation=t.indentation+t.indentationDiff,r>0)return null}return t.f(e,t)},innerMode:function(e){return e.block==c?{state:e.htmlState,mode:w}:e.localState?{state:e.localState,mode:e.localMode}:{state:e,mode:R}},blankLine:l,getType:h,fold:"markdown"};return R},"xml"),e.defineMIME("text/x-markdown","markdown")})},{"../../lib/codemirror":10,"../meta":13,"../xml/xml":14}],13:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../lib/codemirror")):"function"==typeof e&&e.amd?e(["../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";e.modeInfo=[{name:"APL",mime:"text/apl",mode:"apl",ext:["dyalog","apl"]},{name:"PGP",mimes:["application/pgp","application/pgp-keys","application/pgp-signature"],mode:"asciiarmor",ext:["pgp"]},{name:"ASN.1",mime:"text/x-ttcn-asn",mode:"asn.1",ext:["asn","asn1"]},{name:"Asterisk",mime:"text/x-asterisk",mode:"asterisk",file:/^extensions\.conf$/i},{name:"Brainfuck",mime:"text/x-brainfuck",mode:"brainfuck",ext:["b","bf"]},{name:"C",mime:"text/x-csrc",mode:"clike",ext:["c","h"]},{name:"C++",mime:"text/x-c++src",mode:"clike",ext:["cpp","c++","cc","cxx","hpp","h++","hh","hxx"],alias:["cpp"]},{name:"Cobol",mime:"text/x-cobol",mode:"cobol",ext:["cob","cpy"]},{name:"C#",mime:"text/x-csharp",mode:"clike",ext:["cs"],alias:["csharp"]},{name:"Clojure",mime:"text/x-clojure",mode:"clojure",ext:["clj","cljc","cljx"]},{name:"ClojureScript",mime:"text/x-clojurescript",mode:"clojure",ext:["cljs"]},{name:"Closure Stylesheets (GSS)",mime:"text/x-gss",mode:"css",ext:["gss"]},{name:"CMake",mime:"text/x-cmake",mode:"cmake",ext:["cmake","cmake.in"],file:/^CMakeLists.txt$/},{name:"CoffeeScript",mime:"text/x-coffeescript",mode:"coffeescript",ext:["coffee"],alias:["coffee","coffee-script"]},{name:"Common Lisp",mime:"text/x-common-lisp",mode:"commonlisp",ext:["cl","lisp","el"],alias:["lisp"]},{name:"Cypher",mime:"application/x-cypher-query",mode:"cypher",ext:["cyp","cypher"]},{name:"Cython",mime:"text/x-cython",mode:"python",ext:["pyx","pxd","pxi"]},{name:"Crystal",mime:"text/x-crystal",mode:"crystal",ext:["cr"]},{name:"CSS",mime:"text/css",mode:"css",ext:["css"]},{name:"CQL",mime:"text/x-cassandra",mode:"sql",ext:["cql"]},{name:"D",mime:"text/x-d",mode:"d",ext:["d"]},{name:"Dart",mimes:["application/dart","text/x-dart"],mode:"dart",ext:["dart"]},{name:"diff",mime:"text/x-diff",mode:"diff",ext:["diff","patch"]},{name:"Django",mime:"text/x-django",mode:"django"},{name:"Dockerfile",mime:"text/x-dockerfile",mode:"dockerfile",file:/^Dockerfile$/},{name:"DTD",mime:"application/xml-dtd",mode:"dtd",ext:["dtd"]},{name:"Dylan",mime:"text/x-dylan",mode:"dylan",ext:["dylan","dyl","intr"]},{name:"EBNF",mime:"text/x-ebnf",mode:"ebnf"},{name:"ECL",mime:"text/x-ecl",mode:"ecl",ext:["ecl"]},{name:"edn",mime:"application/edn",mode:"clojure",ext:["edn"]},{name:"Eiffel",mime:"text/x-eiffel",mode:"eiffel",ext:["e"]},{name:"Elm",mime:"text/x-elm",mode:"elm",ext:["elm"]},{name:"Embedded Javascript",mime:"application/x-ejs",mode:"htmlembedded",ext:["ejs"]},{name:"Embedded Ruby",mime:"application/x-erb",mode:"htmlembedded",ext:["erb"]},{name:"Erlang",mime:"text/x-erlang",mode:"erlang",ext:["erl"]},{name:"Factor",mime:"text/x-factor",mode:"factor",ext:["factor"]},{name:"FCL",mime:"text/x-fcl",mode:"fcl"},{name:"Forth",mime:"text/x-forth",mode:"forth",ext:["forth","fth","4th"]},{name:"Fortran",mime:"text/x-fortran",mode:"fortran",ext:["f","for","f77","f90"]},{name:"F#",mime:"text/x-fsharp",mode:"mllike",ext:["fs"],alias:["fsharp"]},{name:"Gas",mime:"text/x-gas",mode:"gas",ext:["s"]},{name:"Gherkin",mime:"text/x-feature",mode:"gherkin",ext:["feature"]},{name:"GitHub Flavored Markdown",mime:"text/x-gfm",mode:"gfm",file:/^(readme|contributing|history).md$/i},{name:"Go",mime:"text/x-go",mode:"go",ext:["go"]},{name:"Groovy",mime:"text/x-groovy",mode:"groovy",ext:["groovy","gradle"]},{name:"HAML",mime:"text/x-haml",mode:"haml",ext:["haml"]},{name:"Haskell",mime:"text/x-haskell",mode:"haskell",ext:["hs"]},{name:"Haskell (Literate)",mime:"text/x-literate-haskell",mode:"haskell-literate",ext:["lhs"]},{name:"Haxe",mime:"text/x-haxe",mode:"haxe",ext:["hx"]},{name:"HXML",mime:"text/x-hxml",mode:"haxe",ext:["hxml"]},{name:"ASP.NET",mime:"application/x-aspx",mode:"htmlembedded",ext:["aspx"],alias:["asp","aspx"]},{name:"HTML",mime:"text/html",mode:"htmlmixed",ext:["html","htm"],alias:["xhtml"]},{name:"HTTP",mime:"message/http",mode:"http"},{name:"IDL",mime:"text/x-idl",mode:"idl",ext:["pro"]},{name:"Jade",mime:"text/x-jade",mode:"jade",ext:["jade"]},{name:"Java",mime:"text/x-java",mode:"clike",ext:["java"]},{name:"Java Server Pages",mime:"application/x-jsp",mode:"htmlembedded",ext:["jsp"],alias:["jsp"]},{name:"JavaScript",mimes:["text/javascript","text/ecmascript","application/javascript","application/x-javascript","application/ecmascript"],mode:"javascript",ext:["js"],alias:["ecmascript","js","node"]},{name:"JSON",mimes:["application/json","application/x-json"],mode:"javascript",ext:["json","map"],alias:["json5"]},{name:"JSON-LD",mime:"application/ld+json",mode:"javascript",ext:["jsonld"],alias:["jsonld"]},{name:"JSX",mime:"text/jsx",mode:"jsx",ext:["jsx"]},{name:"Jinja2",mime:"null",mode:"jinja2"},{name:"Julia",mime:"text/x-julia",mode:"julia",ext:["jl"]},{name:"Kotlin",mime:"text/x-kotlin",mode:"clike",ext:["kt"]},{name:"LESS",mime:"text/x-less",mode:"css",ext:["less"]},{name:"LiveScript",mime:"text/x-livescript",mode:"livescript",ext:["ls"],alias:["ls"]},{name:"Lua",mime:"text/x-lua",mode:"lua",ext:["lua"]},{name:"Markdown",mime:"text/x-markdown",mode:"markdown",ext:["markdown","md","mkd"]},{name:"mIRC",mime:"text/mirc",mode:"mirc"},{name:"MariaDB SQL",mime:"text/x-mariadb",mode:"sql"},{name:"Mathematica",mime:"text/x-mathematica",mode:"mathematica",ext:["m","nb"]},{name:"Modelica",mime:"text/x-modelica",mode:"modelica",ext:["mo"]},{name:"MUMPS",mime:"text/x-mumps",mode:"mumps",ext:["mps"]},{name:"MS SQL",mime:"text/x-mssql",mode:"sql"},{name:"mbox",mime:"application/mbox",mode:"mbox",ext:["mbox"]},{name:"MySQL",mime:"text/x-mysql",mode:"sql"},{name:"Nginx",mime:"text/x-nginx-conf",mode:"nginx",file:/nginx.*\.conf$/i},{name:"NSIS",mime:"text/x-nsis",mode:"nsis",ext:["nsh","nsi"]},{name:"NTriples",mime:"text/n-triples",mode:"ntriples",ext:["nt"]},{name:"Objective C",mime:"text/x-objectivec",mode:"clike",ext:["m","mm"],alias:["objective-c","objc"]},{name:"OCaml",mime:"text/x-ocaml",mode:"mllike",ext:["ml","mli","mll","mly"]},{name:"Octave",mime:"text/x-octave",mode:"octave",ext:["m"]},{name:"Oz",mime:"text/x-oz",mode:"oz",ext:["oz"]},{name:"Pascal",mime:"text/x-pascal",mode:"pascal",ext:["p","pas"]},{name:"PEG.js",mime:"null",mode:"pegjs",ext:["jsonld"]},{name:"Perl",mime:"text/x-perl",mode:"perl",ext:["pl","pm"]},{name:"PHP",mime:"application/x-httpd-php",mode:"php",ext:["php","php3","php4","php5","phtml"]},{name:"Pig",mime:"text/x-pig",mode:"pig",ext:["pig"]},{name:"Plain Text",mime:"text/plain",mode:"null",ext:["txt","text","conf","def","list","log"]},{name:"PLSQL",mime:"text/x-plsql",mode:"sql",ext:["pls"]},{name:"PowerShell",mime:"application/x-powershell",mode:"powershell",ext:["ps1","psd1","psm1"]},{name:"Properties files",mime:"text/x-properties",mode:"properties",ext:["properties","ini","in"],alias:["ini","properties"]},{name:"ProtoBuf",mime:"text/x-protobuf",mode:"protobuf",ext:["proto"]},{name:"Python",mime:"text/x-python",mode:"python",ext:["BUILD","bzl","py","pyw"],file:/^(BUCK|BUILD)$/},{name:"Puppet",mime:"text/x-puppet",mode:"puppet",ext:["pp"]},{name:"Q",mime:"text/x-q",mode:"q",ext:["q"]},{name:"R",mime:"text/x-rsrc",mode:"r",ext:["r"],alias:["rscript"]},{name:"reStructuredText",mime:"text/x-rst",mode:"rst",ext:["rst"],alias:["rst"]},{name:"RPM Changes",mime:"text/x-rpm-changes",mode:"rpm"},{name:"RPM Spec",mime:"text/x-rpm-spec",mode:"rpm",ext:["spec"]},{name:"Ruby",mime:"text/x-ruby",mode:"ruby",ext:["rb"],alias:["jruby","macruby","rake","rb","rbx"]},{name:"Rust",mime:"text/x-rustsrc",mode:"rust",ext:["rs"]},{name:"SAS",mime:"text/x-sas",mode:"sas",ext:["sas"]},{name:"Sass",mime:"text/x-sass",mode:"sass",ext:["sass"]},{name:"Scala",mime:"text/x-scala",mode:"clike",ext:["scala"]},{name:"Scheme",mime:"text/x-scheme",mode:"scheme",ext:["scm","ss"]},{name:"SCSS",mime:"text/x-scss",mode:"css",ext:["scss"]},{name:"Shell",mime:"text/x-sh",mode:"shell",ext:["sh","ksh","bash"],alias:["bash","sh","zsh"],file:/^PKGBUILD$/},{name:"Sieve",mime:"application/sieve",mode:"sieve",ext:["siv","sieve"]},{name:"Slim",mimes:["text/x-slim","application/x-slim"],mode:"slim",ext:["slim"]},{name:"Smalltalk",mime:"text/x-stsrc",mode:"smalltalk",ext:["st"]},{name:"Smarty",mime:"text/x-smarty",mode:"smarty",ext:["tpl"]},{name:"Solr",mime:"text/x-solr",mode:"solr"},{name:"Soy",mime:"text/x-soy",mode:"soy",ext:["soy"],alias:["closure template"]},{name:"SPARQL",mime:"application/sparql-query",mode:"sparql",ext:["rq","sparql"],alias:["sparul"]},{name:"Spreadsheet",mime:"text/x-spreadsheet",mode:"spreadsheet",alias:["excel","formula"]},{name:"SQL",mime:"text/x-sql",mode:"sql",ext:["sql"]},{name:"Squirrel",mime:"text/x-squirrel",mode:"clike",ext:["nut"]},{name:"Swift",mime:"text/x-swift",mode:"swift",ext:["swift"]},{name:"sTeX",mime:"text/x-stex",mode:"stex"},{name:"LaTeX",mime:"text/x-latex",mode:"stex",ext:["text","ltx"],alias:["tex"]},{name:"SystemVerilog",mime:"text/x-systemverilog",mode:"verilog",ext:["v"]},{name:"Tcl",mime:"text/x-tcl",mode:"tcl",ext:["tcl"]},{name:"Textile",mime:"text/x-textile",mode:"textile",ext:["textile"]},{name:"TiddlyWiki ",mime:"text/x-tiddlywiki",mode:"tiddlywiki"},{name:"Tiki wiki",mime:"text/tiki",mode:"tiki"},{name:"TOML",mime:"text/x-toml",mode:"toml",ext:["toml"]},{name:"Tornado",mime:"text/x-tornado",mode:"tornado"},{name:"troff",mime:"text/troff",mode:"troff",ext:["1","2","3","4","5","6","7","8","9"]},{name:"TTCN",mime:"text/x-ttcn",mode:"ttcn",ext:["ttcn","ttcn3","ttcnpp"]},{name:"TTCN_CFG",mime:"text/x-ttcn-cfg",mode:"ttcn-cfg",ext:["cfg"]},{name:"Turtle",mime:"text/turtle",mode:"turtle",ext:["ttl"]},{name:"TypeScript",mime:"application/typescript",mode:"javascript",ext:["ts"],alias:["ts"]},{name:"Twig",mime:"text/x-twig",mode:"twig"},{name:"Web IDL",mime:"text/x-webidl",mode:"webidl",ext:["webidl"]},{name:"VB.NET",mime:"text/x-vb",mode:"vb",ext:["vb"]},{name:"VBScript",mime:"text/vbscript",mode:"vbscript",ext:["vbs"]},{name:"Velocity",mime:"text/velocity",mode:"velocity",ext:["vtl"]},{name:"Verilog",mime:"text/x-verilog",mode:"verilog",ext:["v"]},{name:"VHDL",mime:"text/x-vhdl",mode:"vhdl",ext:["vhd","vhdl"]},{name:"XML",mimes:["application/xml","text/xml"],mode:"xml",ext:["xml","xsl","xsd"],alias:["rss","wsdl","xsd"]},{name:"XQuery",mime:"application/xquery",mode:"xquery",ext:["xy","xquery"]},{name:"Yacas",mime:"text/x-yacas",mode:"yacas",ext:["ys"]},{name:"YAML",mime:"text/x-yaml",mode:"yaml",ext:["yaml","yml"],alias:["yml"]},{name:"Z80",mime:"text/x-z80",mode:"z80",ext:["z80"]},{name:"mscgen",mime:"text/x-mscgen",mode:"mscgen",ext:["mscgen","mscin","msc"]},{name:"xu",mime:"text/x-xu",mode:"mscgen",ext:["xu"]},{name:"msgenny",mime:"text/x-msgenny",mode:"mscgen",ext:["msgenny"]}];for(var t=0;t<e.modeInfo.length;t++){var n=e.modeInfo[t];n.mimes&&(n.mime=n.mimes[0])}e.findModeByMIME=function(t){t=t.toLowerCase();for(var n=0;n<e.modeInfo.length;n++){var r=e.modeInfo[n];if(r.mime==t)return r;if(r.mimes)for(var i=0;i<r.mimes.length;i++)if(r.mimes[i]==t)return r}},e.findModeByExtension=function(t){for(var n=0;n<e.modeInfo.length;n++){var r=e.modeInfo[n];if(r.ext)for(var i=0;i<r.ext.length;i++)if(r.ext[i]==t)return r}},e.findModeByFileName=function(t){for(var n=0;n<e.modeInfo.length;n++){var r=e.modeInfo[n];if(r.file&&r.file.test(t))return r}var i=t.lastIndexOf("."),o=i>-1&&t.substring(i+1,t.length);return o?e.findModeByExtension(o):void 0},e.findModeByName=function(t){t=t.toLowerCase();for(var n=0;n<e.modeInfo.length;n++){var r=e.modeInfo[n];if(r.name.toLowerCase()==t)return r;if(r.alias)for(var i=0;i<r.alias.length;i++)if(r.alias[i].toLowerCase()==t)return r}}})},{"../lib/codemirror":10}],14:[function(t,n,r){!function(i){"object"==typeof r&&"object"==typeof n?i(t("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";var t={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},n={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,caseFold:!1};e.defineMode("xml",function(r,i){function o(e,t){function n(n){return t.tokenize=n,n(e,t)}var r=e.next();if("<"==r)return e.eat("!")?e.eat("[")?e.match("CDATA[")?n(s("atom","]]>")):null:e.match("--")?n(s("comment","-->")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),n(c(1))):null:e.eat("?")?(e.eatWhile(/[\w\._\-]/),t.tokenize=s("meta","?>"),"meta"):(T=e.eat("/")?"closeTag":"openTag",t.tokenize=a,"tag bracket");if("&"==r){var i;return i=e.eat("#")?e.eat("x")?e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):e.eatWhile(/[\d]/)&&e.eat(";"):e.eatWhile(/[\w\.\-:]/)&&e.eat(";"),i?"atom":"error"}return e.eatWhile(/[^&<]/),null}function a(e,t){var n=e.next();if(">"==n||"/"==n&&e.eat(">"))return t.tokenize=o,T=">"==n?"endTag":"selfcloseTag","tag bracket";if("="==n)return T="equals",null;if("<"==n){t.tokenize=o,t.state=d,t.tagName=t.tagStart=null;var r=t.tokenize(e,t);return r?r+" tag error":"tag error"}return/[\'\"]/.test(n)?(t.tokenize=l(n),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function l(e){var t=function(t,n){for(;!t.eol();)if(t.next()==e){n.tokenize=a;break}return"string"};return t.isInAttribute=!0,t}function s(e,t){return function(n,r){for(;!n.eol();){if(n.match(t)){r.tokenize=o;break}n.next()}return e}}function c(e){return function(t,n){for(var r;null!=(r=t.next());){if("<"==r)return n.tokenize=c(e+1),n.tokenize(t,n);if(">"==r){if(1==e){n.tokenize=o;break}return n.tokenize=c(e-1),n.tokenize(t,n)}}return"meta"}}function u(e,t,n){this.prev=e.context,this.tagName=t,this.indent=e.indented,this.startOfLine=n,(S.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}function f(e){e.context&&(e.context=e.context.prev)}function h(e,t){for(var n;;){if(!e.context)return;if(n=e.context.tagName,!S.contextGrabbers.hasOwnProperty(n)||!S.contextGrabbers[n].hasOwnProperty(t))return;f(e)}}function d(e,t,n){return"openTag"==e?(n.tagStart=t.column(),p):"closeTag"==e?m:d}function p(e,t,n){return"word"==e?(n.tagName=t.current(),M="tag",y):(M="error",p)}function m(e,t,n){if("word"==e){var r=t.current();return n.context&&n.context.tagName!=r&&S.implicitlyClosed.hasOwnProperty(n.context.tagName)&&f(n),n.context&&n.context.tagName==r||S.matchClosing===!1?(M="tag",g):(M="tag error",v)}return M="error",v}function g(e,t,n){return"endTag"!=e?(M="error",g):(f(n),d)}function v(e,t,n){return M="error",g(e,t,n)}function y(e,t,n){if("word"==e)return M="attribute",x;if("endTag"==e||"selfcloseTag"==e){var r=n.tagName,i=n.tagStart;return n.tagName=n.tagStart=null,"selfcloseTag"==e||S.autoSelfClosers.hasOwnProperty(r)?h(n,r):(h(n,r),n.context=new u(n,r,i==n.indented)),d}return M="error",y}function x(e,t,n){return"equals"==e?b:(S.allowMissing||(M="error"),y(e,t,n))}function b(e,t,n){return"string"==e?w:"word"==e&&S.allowUnquoted?(M="string",y):(M="error",y(e,t,n))}function w(e,t,n){return"string"==e?w:y(e,t,n)}var k=r.indentUnit,S={},C=i.htmlMode?t:n;for(var L in C)S[L]=C[L];for(var L in i)S[L]=i[L];var T,M;return o.isInText=!0,{startState:function(e){var t={tokenize:o,state:d,indented:e||0,tagName:null,tagStart:null,context:null};return null!=e&&(t.baseIndent=e),t},token:function(e,t){if(!t.tagName&&e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;T=null;var n=t.tokenize(e,t);return(n||T)&&"comment"!=n&&(M=null,t.state=t.state(T||n,e,t),M&&(n="error"==M?n+" error":M)),n},indent:function(t,n,r){var i=t.context;if(t.tokenize.isInAttribute)return t.tagStart==t.indented?t.stringStartCol+1:t.indented+k;if(i&&i.noIndent)return e.Pass;if(t.tokenize!=a&&t.tokenize!=o)return r?r.match(/^(\s*)/)[0].length:0;if(t.tagName)return S.multilineTagIndentPastTag!==!1?t.tagStart+t.tagName.length+2:t.tagStart+k*(S.multilineTagIndentFactor||1);if(S.alignCDATA&&/<!\[CDATA\[/.test(n))return 0;var l=n&&/^<(\/)?([\w_:\.-]*)/.exec(n);if(l&&l[1])for(;i;){if(i.tagName==l[2]){i=i.prev;break}if(!S.implicitlyClosed.hasOwnProperty(i.tagName))break;i=i.prev}else if(l)for(;i;){var s=S.contextGrabbers[i.tagName];if(!s||!s.hasOwnProperty(l[2]))break;i=i.prev}for(;i&&i.prev&&!i.startOfLine;)i=i.prev;return i?i.indent+k:t.baseIndent||0},electricInput:/<\/[\s\w:]+>$/,blockCommentStart:"<!--",blockCommentEnd:"-->",configuration:S.htmlMode?"html":"xml",helperType:S.htmlMode?"html":"xml",skipAttribute:function(e){e.state==b&&(e.state=y)}}}),e.defineMIME("text/xml","xml"),e.defineMIME("application/xml","xml"),e.mimeModes.hasOwnProperty("text/html")||e.defineMIME("text/html",{name:"xml",htmlMode:!0})})},{"../../lib/codemirror":10}],15:[function(e,t,n){n.read=function(e,t,n,r,i){var o,a,l=8*i-r-1,s=(1<<l)-1,c=s>>1,u=-7,f=n?i-1:0,h=n?-1:1,d=e[t+f];for(f+=h,o=d&(1<<-u)-1,d>>=-u,u+=l;u>0;o=256*o+e[t+f],f+=h,u-=8);for(a=o&(1<<-u)-1,o>>=-u,u+=r;u>0;a=256*a+e[t+f],f+=h,u-=8);if(0===o)o=1-c;else{if(o===s)return a?NaN:(d?-1:1)*(1/0);a+=Math.pow(2,r),o-=c}return(d?-1:1)*a*Math.pow(2,o-r)},n.write=function(e,t,n,r,i,o){var a,l,s,c=8*o-i-1,u=(1<<c)-1,f=u>>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,p=r?1:-1,m=0>t||0===t&&0>1/t?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(l=isNaN(t)?1:0,a=u):(a=Math.floor(Math.log(t)/Math.LN2),t*(s=Math.pow(2,-a))<1&&(a--,s*=2),t+=a+f>=1?h/s:h*Math.pow(2,1-f),t*s>=2&&(a++,s/=2),a+f>=u?(l=0,a=u):a+f>=1?(l=(t*s-1)*Math.pow(2,i),a+=f):(l=t*Math.pow(2,f-1)*Math.pow(2,i),a=0));i>=8;e[n+d]=255&l,d+=p,l/=256,i-=8);for(a=a<<i|l,c+=i;c>0;e[n+d]=255&a,d+=p,a/=256,c-=8);e[n+d-p]|=128*m}},{}],16:[function(e,t,n){var r={}.toString;t.exports=Array.isArray||function(e){return"[object Array]"==r.call(e)}},{}],17:[function(t,n,r){(function(t){(function(){function t(e){this.tokens=[],this.tokens.links={},this.options=e||h.defaults,this.rules=d.normal,this.options.gfm&&(this.options.tables?this.rules=d.tables:this.rules=d.gfm)}function i(e,t){if(this.options=t||h.defaults,this.links=e,this.rules=p.normal,this.renderer=this.options.renderer||new o,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.gfm?this.options.breaks?this.rules=p.breaks:this.rules=p.gfm:this.options.pedantic&&(this.rules=p.pedantic)}function o(e){this.options=e||{}}function a(e){this.tokens=[],this.token=null,this.options=e||h.defaults,this.options.renderer=this.options.renderer||new o,this.renderer=this.options.renderer,this.renderer.options=this.options}function l(e,t){return e.replace(t?/&/g:/&(?!#?\w+;)/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function s(e){return e.replace(/&([#\w]+);/g,function(e,t){return t=t.toLowerCase(),"colon"===t?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}function c(e,t){return e=e.source,t=t||"",function n(r,i){return r?(i=i.source||i,i=i.replace(/(^|[^\[])\^/g,"$1"),e=e.replace(r,i),n):new RegExp(e,t)}}function u(){}function f(e){for(var t,n,r=1;r<arguments.length;r++){t=arguments[r];for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}function h(e,n,r){if(r||"function"==typeof n){r||(r=n,n=null),n=f({},h.defaults,n||{});var i,o,s=n.highlight,c=0;try{i=t.lex(e,n)}catch(u){return r(u)}o=i.length;var d=function(e){if(e)return n.highlight=s,r(e);var t;try{t=a.parse(i,n)}catch(o){e=o}return n.highlight=s,e?r(e):r(null,t)};if(!s||s.length<3)return d();if(delete n.highlight,!o)return d();for(;c<i.length;c++)!function(e){return"code"!==e.type?--o||d():s(e.text,e.lang,function(t,n){return t?d(t):null==n||n===e.text?--o||d():(e.text=n,e.escaped=!0,void(--o||d()))})}(i[c])}else try{return n&&(n=f({},h.defaults,n)),a.parse(t.lex(e,n),n)}catch(u){if(u.message+="\nPlease report this to https://github.com/chjj/marked.",(n||h.defaults).silent)return"<p>An error occured:</p><pre>"+l(u.message+"",!0)+"</pre>";throw u}}var d={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:u,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:u,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:u,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};d.bullet=/(?:[*+-]|\d+\.)/,d.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,d.item=c(d.item,"gm")(/bull/g,d.bullet)(),d.list=c(d.list)(/bull/g,d.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+d.def.source+")")(),d.blockquote=c(d.blockquote)("def",d.def)(),d._tag="(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b",d.html=c(d.html)("comment",/<!--[\s\S]*?-->/)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/)(/tag/g,d._tag)(),d.paragraph=c(d.paragraph)("hr",d.hr)("heading",d.heading)("lheading",d.lheading)("blockquote",d.blockquote)("tag","<"+d._tag)("def",d.def)(),d.normal=f({},d),d.gfm=f({},d.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),d.gfm.paragraph=c(d.paragraph)("(?!","(?!"+d.gfm.fences.source.replace("\\1","\\2")+"|"+d.list.source.replace("\\1","\\3")+"|")(),d.tables=f({},d.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/}),t.rules=d,t.lex=function(e,n){var r=new t(n);return r.lex(e)},t.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},t.prototype.token=function(e,t,n){for(var r,i,o,a,l,s,c,u,f,e=e.replace(/^ +$/gm,"");e;)if((o=this.rules.newline.exec(e))&&(e=e.substring(o[0].length),o[0].length>1&&this.tokens.push({type:"space"})),o=this.rules.code.exec(e))e=e.substring(o[0].length),o=o[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?o:o.replace(/\n+$/,"")});else if(o=this.rules.fences.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"code",lang:o[2],text:o[3]||""});else if(o=this.rules.heading.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"heading",depth:o[1].length,text:o[2]});else if(t&&(o=this.rules.nptable.exec(e))){for(e=e.substring(o[0].length),s={type:"table",header:o[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:o[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:o[3].replace(/\n$/,"").split("\n")},u=0;u<s.align.length;u++)/^ *-+: *$/.test(s.align[u])?s.align[u]="right":/^ *:-+: *$/.test(s.align[u])?s.align[u]="center":/^ *:-+ *$/.test(s.align[u])?s.align[u]="left":s.align[u]=null;for(u=0;u<s.cells.length;u++)s.cells[u]=s.cells[u].split(/ *\| */);this.tokens.push(s)}else if(o=this.rules.lheading.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"heading",depth:"="===o[2]?1:2,text:o[1]});else if(o=this.rules.hr.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"hr"});else if(o=this.rules.blockquote.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"blockquote_start"}),o=o[0].replace(/^ *> ?/gm,""),this.token(o,t,!0),this.tokens.push({type:"blockquote_end"});else if(o=this.rules.list.exec(e)){for(e=e.substring(o[0].length),a=o[2],this.tokens.push({type:"list_start",ordered:a.length>1}),o=o[0].match(this.rules.item),r=!1,f=o.length,u=0;f>u;u++)s=o[u],c=s.length,s=s.replace(/^ *([*+-]|\d+\.) +/,""),~s.indexOf("\n ")&&(c-=s.length,s=this.options.pedantic?s.replace(/^ {1,4}/gm,""):s.replace(new RegExp("^ {1,"+c+"}","gm"),"")),this.options.smartLists&&u!==f-1&&(l=d.bullet.exec(o[u+1])[0],a===l||a.length>1&&l.length>1||(e=o.slice(u+1).join("\n")+e,u=f-1)),i=r||/\n\n(?!\s*$)/.test(s),u!==f-1&&(r="\n"===s.charAt(s.length-1),i||(i=r)),this.tokens.push({type:i?"loose_item_start":"list_item_start"}),this.token(s,!1,n),this.tokens.push({type:"list_item_end"});this.tokens.push({type:"list_end"})}else if(o=this.rules.html.exec(e))e=e.substring(o[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===o[1]||"script"===o[1]||"style"===o[1]),text:o[0]});else if(!n&&t&&(o=this.rules.def.exec(e)))e=e.substring(o[0].length),this.tokens.links[o[1].toLowerCase()]={href:o[2],title:o[3]};else if(t&&(o=this.rules.table.exec(e))){for(e=e.substring(o[0].length),s={type:"table", -header:o[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:o[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:o[3].replace(/(?: *\| *)?\n$/,"").split("\n")},u=0;u<s.align.length;u++)/^ *-+: *$/.test(s.align[u])?s.align[u]="right":/^ *:-+: *$/.test(s.align[u])?s.align[u]="center":/^ *:-+ *$/.test(s.align[u])?s.align[u]="left":s.align[u]=null;for(u=0;u<s.cells.length;u++)s.cells[u]=s.cells[u].replace(/^ *\| *| *\| *$/g,"").split(/ *\| */);this.tokens.push(s)}else if(t&&(o=this.rules.paragraph.exec(e)))e=e.substring(o[0].length),this.tokens.push({type:"paragraph",text:"\n"===o[1].charAt(o[1].length-1)?o[1].slice(0,-1):o[1]});else if(o=this.rules.text.exec(e))e=e.substring(o[0].length),this.tokens.push({type:"text",text:o[0]});else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0));return this.tokens};var p={escape:/^\\([\\`*{}\[\]()#+\-.!_>])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:u,tag:/^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:u,text:/^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/};p._inside=/(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/,p._href=/\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/,p.link=c(p.link)("inside",p._inside)("href",p._href)(),p.reflink=c(p.reflink)("inside",p._inside)(),p.normal=f({},p),p.pedantic=f({},p.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/}),p.gfm=f({},p.normal,{escape:c(p.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:c(p.text)("]|","~]|")("|","|https?://|")()}),p.breaks=f({},p.gfm,{br:c(p.br)("{2,}","*")(),text:c(p.gfm.text)("{2,}","*")()}),i.rules=p,i.output=function(e,t,n){var r=new i(t,n);return r.output(e)},i.prototype.output=function(e){for(var t,n,r,i,o="";e;)if(i=this.rules.escape.exec(e))e=e.substring(i[0].length),o+=i[1];else if(i=this.rules.autolink.exec(e))e=e.substring(i[0].length),"@"===i[2]?(n=":"===i[1].charAt(6)?this.mangle(i[1].substring(7)):this.mangle(i[1]),r=this.mangle("mailto:")+n):(n=l(i[1]),r=n),o+=this.renderer.link(r,null,n);else if(this.inLink||!(i=this.rules.url.exec(e))){if(i=this.rules.tag.exec(e))!this.inLink&&/^<a /i.test(i[0])?this.inLink=!0:this.inLink&&/^<\/a>/i.test(i[0])&&(this.inLink=!1),e=e.substring(i[0].length),o+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(i[0]):l(i[0]):i[0];else if(i=this.rules.link.exec(e))e=e.substring(i[0].length),this.inLink=!0,o+=this.outputLink(i,{href:i[2],title:i[3]}),this.inLink=!1;else if((i=this.rules.reflink.exec(e))||(i=this.rules.nolink.exec(e))){if(e=e.substring(i[0].length),t=(i[2]||i[1]).replace(/\s+/g," "),t=this.links[t.toLowerCase()],!t||!t.href){o+=i[0].charAt(0),e=i[0].substring(1)+e;continue}this.inLink=!0,o+=this.outputLink(i,t),this.inLink=!1}else if(i=this.rules.strong.exec(e))e=e.substring(i[0].length),o+=this.renderer.strong(this.output(i[2]||i[1]));else if(i=this.rules.em.exec(e))e=e.substring(i[0].length),o+=this.renderer.em(this.output(i[2]||i[1]));else if(i=this.rules.code.exec(e))e=e.substring(i[0].length),o+=this.renderer.codespan(l(i[2],!0));else if(i=this.rules.br.exec(e))e=e.substring(i[0].length),o+=this.renderer.br();else if(i=this.rules.del.exec(e))e=e.substring(i[0].length),o+=this.renderer.del(this.output(i[1]));else if(i=this.rules.text.exec(e))e=e.substring(i[0].length),o+=this.renderer.text(l(this.smartypants(i[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else e=e.substring(i[0].length),n=l(i[1]),r=n,o+=this.renderer.link(r,null,n);return o},i.prototype.outputLink=function(e,t){var n=l(t.href),r=t.title?l(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,l(e[1]))},i.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014\/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014\/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},i.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,i=0;r>i;i++)t=e.charCodeAt(i),Math.random()>.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},o.prototype.code=function(e,t,n){if(this.options.highlight){var r=this.options.highlight(e,t);null!=r&&r!==e&&(n=!0,e=r)}return t?'<pre><code class="'+this.options.langPrefix+l(t,!0)+'">'+(n?e:l(e,!0))+"\n</code></pre>\n":"<pre><code>"+(n?e:l(e,!0))+"\n</code></pre>"},o.prototype.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},o.prototype.html=function(e){return e},o.prototype.heading=function(e,t,n){return"<h"+t+' id="'+this.options.headerPrefix+n.toLowerCase().replace(/[^\w]+/g,"-")+'">'+e+"</h"+t+">\n"},o.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},o.prototype.list=function(e,t){var n=t?"ol":"ul";return"<"+n+">\n"+e+"</"+n+">\n"},o.prototype.listitem=function(e){return"<li>"+e+"</li>\n"},o.prototype.paragraph=function(e){return"<p>"+e+"</p>\n"},o.prototype.table=function(e,t){return"<table>\n<thead>\n"+e+"</thead>\n<tbody>\n"+t+"</tbody>\n</table>\n"},o.prototype.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},o.prototype.tablecell=function(e,t){var n=t.header?"th":"td",r=t.align?"<"+n+' style="text-align:'+t.align+'">':"<"+n+">";return r+e+"</"+n+">\n"},o.prototype.strong=function(e){return"<strong>"+e+"</strong>"},o.prototype.em=function(e){return"<em>"+e+"</em>"},o.prototype.codespan=function(e){return"<code>"+e+"</code>"},o.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"},o.prototype.del=function(e){return"<del>"+e+"</del>"},o.prototype.link=function(e,t,n){if(this.options.sanitize){try{var r=decodeURIComponent(s(e)).replace(/[^\w:]/g,"").toLowerCase()}catch(i){return""}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:"))return""}var o='<a href="'+e+'"';return t&&(o+=' title="'+t+'"'),o+=">"+n+"</a>"},o.prototype.image=function(e,t,n){var r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">"},o.prototype.text=function(e){return e},a.parse=function(e,t,n){var r=new a(t,n);return r.parse(e)},a.prototype.parse=function(e){this.inline=new i(e.links,this.options,this.renderer),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},a.prototype.next=function(){return this.token=this.tokens.pop()},a.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},a.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},a.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,i,o="",a="";for(n="",e=0;e<this.token.header.length;e++)r={header:!0,align:this.token.align[e]},n+=this.renderer.tablecell(this.inline.output(this.token.header[e]),{header:!0,align:this.token.align[e]});for(o+=this.renderer.tablerow(n),e=0;e<this.token.cells.length;e++){for(t=this.token.cells[e],n="",i=0;i<t.length;i++)n+=this.renderer.tablecell(this.inline.output(t[i]),{header:!1,align:this.token.align[i]});a+=this.renderer.tablerow(n)}return this.renderer.table(o,a);case"blockquote_start":for(var a="";"blockquote_end"!==this.next().type;)a+=this.tok();return this.renderer.blockquote(a);case"list_start":for(var a="",l=this.token.ordered;"list_end"!==this.next().type;)a+=this.tok();return this.renderer.list(a,l);case"list_item_start":for(var a="";"list_item_end"!==this.next().type;)a+="text"===this.token.type?this.parseText():this.tok();return this.renderer.listitem(a);case"loose_item_start":for(var a="";"list_item_end"!==this.next().type;)a+=this.tok();return this.renderer.listitem(a);case"html":var s=this.token.pre||this.options.pedantic?this.token.text:this.inline.output(this.token.text);return this.renderer.html(s);case"paragraph":return this.renderer.paragraph(this.inline.output(this.token.text));case"text":return this.renderer.paragraph(this.parseText())}},u.exec=u,h.options=h.setOptions=function(e){return f(h.defaults,e),h},h.defaults={gfm:!0,tables:!0,breaks:!1,pedantic:!1,sanitize:!1,sanitizer:null,mangle:!0,smartLists:!1,silent:!1,highlight:null,langPrefix:"lang-",smartypants:!1,headerPrefix:"",renderer:new o,xhtml:!1},h.Parser=a,h.parser=a.parse,h.Renderer=o,h.Lexer=t,h.lexer=t.lex,h.InlineLexer=i,h.inlineLexer=i.output,h.parse=h,"undefined"!=typeof n&&"object"==typeof r?n.exports=h:"function"==typeof e&&e.amd?e(function(){return h}):this.marked=h}).call(function(){return this||("undefined"!=typeof window?window:t)}())}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],18:[function(e,t,n){(function(n,r){"use strict";var i=function(e,t,n,i){if(i=i||{},this.dictionary=null,this.rules={},this.dictionaryTable={},this.compoundRules=[],this.compoundRuleCodes={},this.replacementTable=[],this.flags=i.flags||{},e){if(this.dictionary=e,"undefined"!=typeof window&&"chrome"in window&&"extension"in window.chrome&&"getURL"in window.chrome.extension)t||(t=this._readFile(chrome.extension.getURL("lib/typo/dictionaries/"+e+"/"+e+".aff"))),n||(n=this._readFile(chrome.extension.getURL("lib/typo/dictionaries/"+e+"/"+e+".dic")));else{if(i.dictionaryPath)var o=i.dictionaryPath;else if("undefined"!=typeof r)var o=r+"/dictionaries";else var o="./dictionaries";t||(t=this._readFile(o+"/"+e+"/"+e+".aff")),n||(n=this._readFile(o+"/"+e+"/"+e+".dic"))}this.rules=this._parseAFF(t),this.compoundRuleCodes={};for(var a=0,l=this.compoundRules.length;l>a;a++)for(var s=this.compoundRules[a],c=0,u=s.length;u>c;c++)this.compoundRuleCodes[s[c]]=[];"ONLYINCOMPOUND"in this.flags&&(this.compoundRuleCodes[this.flags.ONLYINCOMPOUND]=[]),this.dictionaryTable=this._parseDIC(n);for(var a in this.compoundRuleCodes)0==this.compoundRuleCodes[a].length&&delete this.compoundRuleCodes[a];for(var a=0,l=this.compoundRules.length;l>a;a++){for(var f=this.compoundRules[a],h="",c=0,u=f.length;u>c;c++){var d=f[c];h+=d in this.compoundRuleCodes?"("+this.compoundRuleCodes[d].join("|")+")":d}this.compoundRules[a]=new RegExp(h,"i")}}return this};i.prototype={load:function(e){for(var t in e)this[t]=e[t];return this},_readFile:function(t,r){if(r||(r="utf8"),"undefined"!=typeof XMLHttpRequest){var i=new XMLHttpRequest;return i.open("GET",t,!1),i.overrideMimeType&&i.overrideMimeType("text/plain; charset="+r),i.send(null),i.responseText}if("undefined"!=typeof e){var o=e("fs");try{if(o.existsSync(t)){var a=o.statSync(t),l=o.openSync(t,"r"),s=new n(a.size);return o.readSync(l,s,0,s.length,null),s.toString(r,0,s.length)}console.log("Path "+t+" does not exist.")}catch(c){return console.log(c),""}}},_parseAFF:function(e){var t={};e=this._removeAffixComments(e);for(var n=e.split("\n"),r=0,i=n.length;i>r;r++){var o=n[r],a=o.split(/\s+/),l=a[0];if("PFX"==l||"SFX"==l){for(var s=a[1],c=a[2],u=parseInt(a[3],10),f=[],h=r+1,d=r+1+u;d>h;h++){var o=n[h],p=o.split(/\s+/),m=p[2],g=p[3].split("/"),v=g[0];"0"===v&&(v="");var y=this.parseRuleCodes(g[1]),x=p[4],b={};b.add=v,y.length>0&&(b.continuationClasses=y),"."!==x&&("SFX"===l?b.match=new RegExp(x+"$"):b.match=new RegExp("^"+x)),"0"!=m&&("SFX"===l?b.remove=new RegExp(m+"$"):b.remove=m),f.push(b)}t[s]={type:l,combineable:"Y"==c,entries:f},r+=u}else if("COMPOUNDRULE"===l){for(var u=parseInt(a[1],10),h=r+1,d=r+1+u;d>h;h++){var o=n[h],p=o.split(/\s+/);this.compoundRules.push(p[1])}r+=u}else if("REP"===l){var p=o.split(/\s+/);3===p.length&&this.replacementTable.push([p[1],p[2]])}else this.flags[l]=a[1]}return t},_removeAffixComments:function(e){return e=e.replace(/#.*$/gm,""),e=e.replace(/^\s\s*/m,"").replace(/\s\s*$/m,""),e=e.replace(/\n{2,}/g,"\n"),e=e.replace(/^\s\s*/,"").replace(/\s\s*$/,"")},_parseDIC:function(e){function t(e,t){e in r&&"object"==typeof r[e]||(r[e]=[]),r[e].push(t)}e=this._removeDicComments(e);for(var n=e.split("\n"),r={},i=1,o=n.length;o>i;i++){var a=n[i],l=a.split("/",2),s=l[0];if(l.length>1){var c=this.parseRuleCodes(l[1]);"NEEDAFFIX"in this.flags&&-1!=c.indexOf(this.flags.NEEDAFFIX)||t(s,c);for(var u=0,f=c.length;f>u;u++){var h=c[u],d=this.rules[h];if(d)for(var p=this._applyRule(s,d),m=0,g=p.length;g>m;m++){var v=p[m];if(t(v,[]),d.combineable)for(var y=u+1;f>y;y++){var x=c[y],b=this.rules[x];if(b&&b.combineable&&d.type!=b.type)for(var w=this._applyRule(v,b),k=0,S=w.length;S>k;k++){var C=w[k];t(C,[])}}}h in this.compoundRuleCodes&&this.compoundRuleCodes[h].push(s)}}else t(s.trim(),[])}return r},_removeDicComments:function(e){return e=e.replace(/^\t.*$/gm,"")},parseRuleCodes:function(e){if(!e)return[];if(!("FLAG"in this.flags))return e.split("");if("long"===this.flags.FLAG){for(var t=[],n=0,r=e.length;r>n;n+=2)t.push(e.substr(n,2));return t}return"num"===this.flags.FLAG?textCode.split(","):void 0},_applyRule:function(e,t){for(var n=t.entries,r=[],i=0,o=n.length;o>i;i++){var a=n[i];if(!a.match||e.match(a.match)){var l=e;if(a.remove&&(l=l.replace(a.remove,"")),"SFX"===t.type?l+=a.add:l=a.add+l,r.push(l),"continuationClasses"in a)for(var s=0,c=a.continuationClasses.length;c>s;s++){var u=this.rules[a.continuationClasses[s]];u&&(r=r.concat(this._applyRule(l,u)))}}}return r},check:function(e){var t=e.replace(/^\s\s*/,"").replace(/\s\s*$/,"");if(this.checkExact(t))return!0;if(t.toUpperCase()===t){var n=t[0]+t.substring(1).toLowerCase();if(this.hasFlag(n,"KEEPCASE"))return!1;if(this.checkExact(n))return!0}var r=t.toLowerCase();if(r!==t){if(this.hasFlag(r,"KEEPCASE"))return!1;if(this.checkExact(r))return!0}return!1},checkExact:function(e){var t=this.dictionaryTable[e];if("undefined"==typeof t){if("COMPOUNDMIN"in this.flags&&e.length>=this.flags.COMPOUNDMIN)for(var n=0,r=this.compoundRules.length;r>n;n++)if(e.match(this.compoundRules[n]))return!0;return!1}if("object"==typeof t){for(var n=0,r=t.length;r>n;n++)if(!this.hasFlag(e,"ONLYINCOMPOUND",t[n]))return!0;return!1}},hasFlag:function(e,t,n){if(t in this.flags){if("undefined"==typeof n)var n=Array.prototype.concat.apply([],this.dictionaryTable[e]);if(n&&-1!==n.indexOf(this.flags[t]))return!0}return!1},alphabet:"",suggest:function(e,t){function n(e){for(var t=[],n=0,r=e.length;r>n;n++){for(var i=e[n],o=[],a=0,l=i.length+1;l>a;a++)o.push([i.substring(0,a),i.substring(a,i.length)]);for(var s=[],a=0,l=o.length;l>a;a++){var u=o[a];u[1]&&s.push(u[0]+u[1].substring(1))}for(var f=[],a=0,l=o.length;l>a;a++){var u=o[a];u[1].length>1&&f.push(u[0]+u[1][1]+u[1][0]+u[1].substring(2))}for(var h=[],a=0,l=o.length;l>a;a++){var u=o[a];if(u[1])for(var d=0,p=c.alphabet.length;p>d;d++)h.push(u[0]+c.alphabet[d]+u[1].substring(1))}for(var m=[],a=0,l=o.length;l>a;a++){var u=o[a];if(u[1])for(var d=0,p=c.alphabet.length;p>d;d++)h.push(u[0]+c.alphabet[d]+u[1])}t=t.concat(s),t=t.concat(f),t=t.concat(h),t=t.concat(m)}return t}function r(e){for(var t=[],n=0;n<e.length;n++)c.check(e[n])&&t.push(e[n]);return t}function i(e){function i(e,t){return e[1]<t[1]?-1:1}for(var o=n([e]),a=n(o),l=r(o).concat(r(a)),s={},u=0,f=l.length;f>u;u++)l[u]in s?s[l[u]]+=1:s[l[u]]=1;var h=[];for(var u in s)h.push([u,s[u]]);h.sort(i).reverse();for(var d=[],u=0,f=Math.min(t,h.length);f>u;u++)c.hasFlag(h[u][0],"NOSUGGEST")||d.push(h[u][0]);return d}if(t||(t=5),this.check(e))return[];for(var o=0,a=this.replacementTable.length;a>o;o++){var l=this.replacementTable[o];if(-1!==e.indexOf(l[0])){var s=e.replace(l[0],l[1]);if(this.check(s))return[s]}}var c=this;return c.alphabet="abcdefghijklmnopqrstuvwxyz",i(e)}},"undefined"!=typeof t&&(t.exports=i)}).call(this,e("buffer").Buffer,"/node_modules/typo-js")},{buffer:3,fs:2}],19:[function(e,t,n){var r=e("codemirror");r.commands.tabAndIndentMarkdownList=function(e){var t=e.listSelections(),n=t[0].head,r=e.getStateAfter(n.line),i=r.list!==!1;if(i)return void e.execCommand("indentMore");if(e.options.indentWithTabs)e.execCommand("insertTab");else{var o=Array(e.options.tabSize+1).join(" ");e.replaceSelection(o)}},r.commands.shiftTabAndUnindentMarkdownList=function(e){var t=e.listSelections(),n=t[0].head,r=e.getStateAfter(n.line),i=r.list!==!1;if(i)return void e.execCommand("indentLess");if(e.options.indentWithTabs)e.execCommand("insertTab");else{var o=Array(e.options.tabSize+1).join(" ");e.replaceSelection(o)}}},{codemirror:10}],20:[function(e,t,n){"use strict";function r(e){return e=U?e.replace("Ctrl","Cmd"):e.replace("Cmd","Ctrl")}function i(e,t,n){e=e||{};var r=document.createElement("a");return t=void 0==t?!0:t,e.title&&t&&(r.title=a(e.title,e.action,n),U&&(r.title=r.title.replace("Ctrl","⌘"),r.title=r.title.replace("Alt","⌥"))),r.tabIndex=-1,r.className=e.className,r}function o(){var e=document.createElement("i");return e.className="separator",e.innerHTML="|",e}function a(e,t,n){var i,o=e;return t&&(i=Y(t),n[i]&&(o+=" ("+r(n[i])+")")),o}function l(e,t){t=t||e.getCursor("start");var n=e.getTokenAt(t);if(!n.type)return{};for(var r,i,o=n.type.split(" "),a={},l=0;l<o.length;l++)r=o[l],"strong"===r?a.bold=!0:"variable-2"===r?(i=e.getLine(t.line),/^\s*\d+\.\s/.test(i)?a["ordered-list"]=!0:a["unordered-list"]=!0):"atom"===r?a.quote=!0:"em"===r?a.italic=!0:"quote"===r?a.quote=!0:"strikethrough"===r?a.strikethrough=!0:"comment"===r?a.code=!0:"link"===r?a.link=!0:"tag"===r?a.image=!0:r.match(/^header(\-[1-6])?$/)&&(a[r.replace("header","heading")]=!0);return a}function s(e){var t=e.codemirror;t.setOption("fullScreen",!t.getOption("fullScreen")),t.getOption("fullScreen")?(V=document.body.style.overflow,document.body.style.overflow="hidden"):document.body.style.overflow=V;var n=t.getWrapperElement();/fullscreen/.test(n.previousSibling.className)?n.previousSibling.className=n.previousSibling.className.replace(/\s*fullscreen\b/,""):n.previousSibling.className+=" fullscreen";var r=e.toolbarElements.fullscreen;/active/.test(r.className)?r.className=r.className.replace(/\s*active\s*/g,""):r.className+=" active";var i=t.getWrapperElement().nextSibling;/editor-preview-active-side/.test(i.className)&&N(e)}function c(e){P(e,"bold",e.options.blockStyles.bold)}function u(e){P(e,"italic",e.options.blockStyles.italic)}function f(e){P(e,"strikethrough","~~")}function h(e){function t(e){if("object"!=typeof e)throw"fencing_line() takes a 'line' object (not a line number, or line text). Got: "+typeof e+": "+e;return e.styles&&e.styles[2]&&-1!==e.styles[2].indexOf("formatting-code-block")}function n(e){return e.state.base.base||e.state.base}function r(e,r,i,o,a){i=i||e.getLineHandle(r),o=o||e.getTokenAt({line:r,ch:1}),a=a||!!i.text&&e.getTokenAt({line:r,ch:i.text.length-1});var l=o.type?o.type.split(" "):[];return a&&n(a).indentedCode?"indented":-1===l.indexOf("comment")?!1:n(o).fencedChars||n(a).fencedChars||t(i)?"fenced":"single"}function i(e,t,n,r){var i=t.line+1,o=n.line+1,a=t.line!==n.line,l=r+"\n",s="\n"+r;a&&o++,a&&0===n.ch&&(s=r+"\n",o--),E(e,!1,[l,s]),e.setSelection({line:i,ch:0},{line:o,ch:0})}var o,a,l,s=e.options.blockStyles.code,c=e.codemirror,u=c.getCursor("start"),f=c.getCursor("end"),h=c.getTokenAt({line:u.line,ch:u.ch||1}),d=c.getLineHandle(u.line),p=r(c,u.line,d,h);if("single"===p){var m=d.text.slice(0,u.ch).replace("`",""),g=d.text.slice(u.ch).replace("`","");c.replaceRange(m+g,{line:u.line,ch:0},{line:u.line,ch:99999999999999}),u.ch--,u!==f&&f.ch--,c.setSelection(u,f),c.focus()}else if("fenced"===p)if(u.line!==f.line||u.ch!==f.ch){for(o=u.line;o>=0&&(d=c.getLineHandle(o),!t(d));o--);var v,y,x,b,w=c.getTokenAt({line:o,ch:1}),k=n(w).fencedChars;t(c.getLineHandle(u.line))?(v="",y=u.line):t(c.getLineHandle(u.line-1))?(v="",y=u.line-1):(v=k+"\n",y=u.line),t(c.getLineHandle(f.line))?(x="",b=f.line,0===f.ch&&(b+=1)):0!==f.ch&&t(c.getLineHandle(f.line+1))?(x="",b=f.line+1):(x=k+"\n",b=f.line+1),0===f.ch&&(b-=1),c.operation(function(){c.replaceRange(x,{line:b,ch:0},{line:b+(x?0:1),ch:0}),c.replaceRange(v,{line:y,ch:0},{line:y+(v?0:1),ch:0})}),c.setSelection({line:y+(v?1:0),ch:0},{line:b+(v?1:-1),ch:0}),c.focus()}else{var S=u.line;if(t(c.getLineHandle(u.line))&&("fenced"===r(c,u.line+1)?(o=u.line,S=u.line+1):(a=u.line,S=u.line-1)),void 0===o)for(o=S;o>=0&&(d=c.getLineHandle(o),!t(d));o--);if(void 0===a)for(l=c.lineCount(),a=S;l>a&&(d=c.getLineHandle(a),!t(d));a++);c.operation(function(){c.replaceRange("",{line:o,ch:0},{line:o+1,ch:0}),c.replaceRange("",{line:a-1,ch:0},{line:a,ch:0})}),c.focus()}else if("indented"===p){if(u.line!==f.line||u.ch!==f.ch)o=u.line,a=f.line,0===f.ch&&a--;else{for(o=u.line;o>=0;o--)if(d=c.getLineHandle(o),!d.text.match(/^\s*$/)&&"indented"!==r(c,o,d)){o+=1;break}for(l=c.lineCount(),a=u.line;l>a;a++)if(d=c.getLineHandle(a),!d.text.match(/^\s*$/)&&"indented"!==r(c,a,d)){a-=1;break}}var C=c.getLineHandle(a+1),L=C&&c.getTokenAt({line:a+1,ch:C.text.length-1}),T=L&&n(L).indentedCode;T&&c.replaceRange("\n",{line:a+1,ch:0});for(var M=o;a>=M;M++)c.indentLine(M,"subtract");c.focus()}else{var N=u.line===f.line&&u.ch===f.ch&&0===u.ch,A=u.line!==f.line;N||A?i(c,u,f,s):E(c,!1,["`","`"])}}function d(e){var t=e.codemirror;I(t,"quote")}function p(e){var t=e.codemirror;O(t,"smaller")}function m(e){var t=e.codemirror;O(t,"bigger")}function g(e){var t=e.codemirror;O(t,void 0,1)}function v(e){var t=e.codemirror;O(t,void 0,2)}function y(e){var t=e.codemirror;O(t,void 0,3)}function x(e){var t=e.codemirror;I(t,"unordered-list")}function b(e){var t=e.codemirror;I(t,"ordered-list")}function w(e){var t=e.codemirror;R(t)}function k(e){var t=e.codemirror,n=l(t),r=e.options,i="http://";return r.promptURLs&&(i=prompt(r.promptTexts.link),!i)?!1:void E(t,n.link,r.insertTexts.link,i)}function S(e){var t=e.codemirror,n=l(t),r=e.options,i="http://";return r.promptURLs&&(i=prompt(r.promptTexts.image),!i)?!1:void E(t,n.image,r.insertTexts.image,i)}function C(e){var t=e.codemirror,n=l(t),r=e.options;E(t,n.table,r.insertTexts.table)}function L(e){var t=e.codemirror,n=l(t),r=e.options;E(t,n.image,r.insertTexts.horizontalRule)}function T(e){var t=e.codemirror;t.undo(),t.focus()}function M(e){var t=e.codemirror;t.redo(),t.focus()}function N(e){var t=e.codemirror,n=t.getWrapperElement(),r=n.nextSibling,i=e.toolbarElements["side-by-side"],o=!1;/editor-preview-active-side/.test(r.className)?(r.className=r.className.replace(/\s*editor-preview-active-side\s*/g,""),i.className=i.className.replace(/\s*active\s*/g,""),n.className=n.className.replace(/\s*CodeMirror-sided\s*/g," ")):(setTimeout(function(){t.getOption("fullScreen")||s(e),r.className+=" editor-preview-active-side"},1),i.className+=" active",n.className+=" CodeMirror-sided",o=!0);var a=n.lastChild;if(/editor-preview-active/.test(a.className)){a.className=a.className.replace(/\s*editor-preview-active\s*/g,"");var l=e.toolbarElements.preview,c=n.previousSibling;l.className=l.className.replace(/\s*active\s*/g,""),c.className=c.className.replace(/\s*disabled-for-preview*/g,"")}var u=function(){r.innerHTML=e.options.previewRender(e.value(),r)};t.sideBySideRenderingFunction||(t.sideBySideRenderingFunction=u),o?(r.innerHTML=e.options.previewRender(e.value(),r),t.on("update",t.sideBySideRenderingFunction)):t.off("update",t.sideBySideRenderingFunction),t.refresh()}function A(e){var t=e.codemirror,n=t.getWrapperElement(),r=n.previousSibling,i=e.options.toolbar?e.toolbarElements.preview:!1,o=n.lastChild;o&&/editor-preview/.test(o.className)||(o=document.createElement("div"),o.className="editor-preview",n.appendChild(o)),/editor-preview-active/.test(o.className)?(o.className=o.className.replace(/\s*editor-preview-active\s*/g,""),i&&(i.className=i.className.replace(/\s*active\s*/g,""),r.className=r.className.replace(/\s*disabled-for-preview*/g,""))):(setTimeout(function(){o.className+=" editor-preview-active"},1),i&&(i.className+=" active",r.className+=" disabled-for-preview")),o.innerHTML=e.options.previewRender(e.value(),o);var a=t.getWrapperElement().nextSibling;/editor-preview-active-side/.test(a.className)&&N(e)}function E(e,t,n,r){if(!/editor-preview-active/.test(e.getWrapperElement().lastChild.className)){var i,o=n[0],a=n[1],l=e.getCursor("start"),s=e.getCursor("end");r&&(a=a.replace("#url#",r)),t?(i=e.getLine(l.line),o=i.slice(0,l.ch),a=i.slice(l.ch),e.replaceRange(o+a,{line:l.line,ch:0})):(i=e.getSelection(),e.replaceSelection(o+i+a),l.ch+=o.length,l!==s&&(s.ch+=o.length)),e.setSelection(l,s),e.focus()}}function O(e,t,n){if(!/editor-preview-active/.test(e.getWrapperElement().lastChild.className)){for(var r=e.getCursor("start"),i=e.getCursor("end"),o=r.line;o<=i.line;o++)!function(r){var i=e.getLine(r),o=i.search(/[^#]/);i=void 0!==t?0>=o?"bigger"==t?"###### "+i:"# "+i:6==o&&"smaller"==t?i.substr(7):1==o&&"bigger"==t?i.substr(2):"bigger"==t?i.substr(1):"#"+i:1==n?0>=o?"# "+i:o==n?i.substr(o+1):"# "+i.substr(o+1):2==n?0>=o?"## "+i:o==n?i.substr(o+1):"## "+i.substr(o+1):0>=o?"### "+i:o==n?i.substr(o+1):"### "+i.substr(o+1),e.replaceRange(i,{line:r,ch:0},{line:r,ch:99999999999999})}(o);e.focus()}}function I(e,t){if(!/editor-preview-active/.test(e.getWrapperElement().lastChild.className)){for(var n=l(e),r=e.getCursor("start"),i=e.getCursor("end"),o={quote:/^(\s*)\>\s+/,"unordered-list":/^(\s*)(\*|\-|\+)\s+/,"ordered-list":/^(\s*)\d+\.\s+/},a={quote:"> ","unordered-list":"* ","ordered-list":"1. "},s=r.line;s<=i.line;s++)!function(r){var i=e.getLine(r);i=n[t]?i.replace(o[t],"$1"):a[t]+i,e.replaceRange(i,{line:r,ch:0},{line:r,ch:99999999999999})}(s);e.focus()}}function P(e,t,n,r){if(!/editor-preview-active/.test(e.codemirror.getWrapperElement().lastChild.className)){r="undefined"==typeof r?n:r;var i,o=e.codemirror,a=l(o),s=n,c=r,u=o.getCursor("start"),f=o.getCursor("end");a[t]?(i=o.getLine(u.line),s=i.slice(0,u.ch),c=i.slice(u.ch),"bold"==t?(s=s.replace(/(\*\*|__)(?![\s\S]*(\*\*|__))/,""),c=c.replace(/(\*\*|__)/,"")):"italic"==t?(s=s.replace(/(\*|_)(?![\s\S]*(\*|_))/,""),c=c.replace(/(\*|_)/,"")):"strikethrough"==t&&(s=s.replace(/(\*\*|~~)(?![\s\S]*(\*\*|~~))/,""),c=c.replace(/(\*\*|~~)/,"")),o.replaceRange(s+c,{line:u.line,ch:0},{line:u.line,ch:99999999999999}),"bold"==t||"strikethrough"==t?(u.ch-=2,u!==f&&(f.ch-=2)):"italic"==t&&(u.ch-=1,u!==f&&(f.ch-=1))):(i=o.getSelection(),"bold"==t?(i=i.split("**").join(""),i=i.split("__").join("")):"italic"==t?(i=i.split("*").join(""),i=i.split("_").join("")):"strikethrough"==t&&(i=i.split("~~").join("")),o.replaceSelection(s+i+c),u.ch+=n.length,f.ch=u.ch+i.length),o.setSelection(u,f),o.focus()}}function R(e){if(!/editor-preview-active/.test(e.getWrapperElement().lastChild.className))for(var t,n=e.getCursor("start"),r=e.getCursor("end"),i=n.line;i<=r.line;i++)t=e.getLine(i),t=t.replace(/^[ ]*([# ]+|\*|\-|[> ]+|[0-9]+(.|\)))[ ]*/,""),e.replaceRange(t,{line:i,ch:0},{line:i,ch:99999999999999})}function D(e,t){for(var n in t)t.hasOwnProperty(n)&&(t[n]instanceof Array?e[n]=t[n].concat(e[n]instanceof Array?e[n]:[]):null!==t[n]&&"object"==typeof t[n]&&t[n].constructor===Object?e[n]=D(e[n]||{},t[n]):e[n]=t[n]);return e}function H(e){for(var t=1;t<arguments.length;t++)e=D(e,arguments[t]);return e}function W(e){var t=/[a-zA-Z0-9_\u0392-\u03c9\u0410-\u04F9]+|[\u4E00-\u9FFF\u3400-\u4dbf\uf900-\ufaff\u3040-\u309f\uac00-\ud7af]+/g,n=e.match(t),r=0;if(null===n)return r;for(var i=0;i<n.length;i++)r+=n[i].charCodeAt(0)>=19968?n[i].length:1;return r}function B(e){e=e||{},e.parent=this;var t=!0;if(e.autoDownloadFontAwesome===!1&&(t=!1),e.autoDownloadFontAwesome!==!0)for(var n=document.styleSheets,r=0;r<n.length;r++)n[r].href&&n[r].href.indexOf("//maxcdn.bootstrapcdn.com/font-awesome/")>-1&&(t=!1);if(t){var i=document.createElement("link");i.rel="stylesheet",i.href="https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css",document.getElementsByTagName("head")[0].appendChild(i)}if(e.element)this.element=e.element;else if(null===e.element)return void console.log("SimpleMDE: Error. No element was found.");if(void 0===e.toolbar){e.toolbar=[];for(var o in K)K.hasOwnProperty(o)&&(-1!=o.indexOf("separator-")&&e.toolbar.push("|"),(K[o]["default"]===!0||e.showIcons&&e.showIcons.constructor===Array&&-1!=e.showIcons.indexOf(o))&&e.toolbar.push(o))}e.hasOwnProperty("status")||(e.status=["autosave","lines","words","cursor"]),e.previewRender||(e.previewRender=function(e){return this.parent.markdown(e)}),e.parsingConfig=H({highlightFormatting:!0},e.parsingConfig||{}),e.insertTexts=H({},X,e.insertTexts||{}),e.promptTexts=Z,e.blockStyles=H({},J,e.blockStyles||{}),e.shortcuts=H({},G,e.shortcuts||{}),void 0!=e.autosave&&void 0!=e.autosave.unique_id&&""!=e.autosave.unique_id&&(e.autosave.uniqueId=e.autosave.unique_id),this.options=e,this.render(),!e.initialValue||this.options.autosave&&this.options.autosave.foundSavedValue===!0||this.value(e.initialValue)}function _(){if("object"!=typeof localStorage)return!1;try{localStorage.setItem("smde_localStorage",1),localStorage.removeItem("smde_localStorage")}catch(e){return!1}return!0}var F=e("codemirror");e("codemirror/addon/edit/continuelist.js"),e("./codemirror/tablist"),e("codemirror/addon/display/fullscreen.js"),e("codemirror/mode/markdown/markdown.js"),e("codemirror/addon/mode/overlay.js"),e("codemirror/addon/display/placeholder.js"),e("codemirror/addon/selection/mark-selection.js"),e("codemirror/mode/gfm/gfm.js"),e("codemirror/mode/xml/xml.js");var z=e("codemirror-spell-checker"),j=e("marked"),U=/Mac/.test(navigator.platform),q={toggleBold:c,toggleItalic:u,drawLink:k,toggleHeadingSmaller:p,toggleHeadingBigger:m,drawImage:S,toggleBlockquote:d,toggleOrderedList:b,toggleUnorderedList:x,toggleCodeBlock:h,togglePreview:A,toggleStrikethrough:f,toggleHeading1:g,toggleHeading2:v,toggleHeading3:y,cleanBlock:w,drawTable:C,drawHorizontalRule:L,undo:T,redo:M,toggleSideBySide:N,toggleFullScreen:s},G={toggleBold:"Cmd-B",toggleItalic:"Cmd-I",drawLink:"Cmd-K",toggleHeadingSmaller:"Cmd-H",toggleHeadingBigger:"Shift-Cmd-H",cleanBlock:"Cmd-E",drawImage:"Cmd-Alt-I",toggleBlockquote:"Cmd-'",toggleOrderedList:"Cmd-Alt-L",toggleUnorderedList:"Cmd-L",toggleCodeBlock:"Cmd-Alt-C",togglePreview:"Cmd-P",toggleSideBySide:"F9",toggleFullScreen:"F11"},Y=function(e){for(var t in q)if(q[t]===e)return t;return null},$=function(){var e=!1;return function(t){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4)))&&(e=!0); -}(navigator.userAgent||navigator.vendor||window.opera),e},V="",K={bold:{name:"bold",action:c,className:"fa fa-bold",title:"Bold","default":!0},italic:{name:"italic",action:u,className:"fa fa-italic",title:"Italic","default":!0},strikethrough:{name:"strikethrough",action:f,className:"fa fa-strikethrough",title:"Strikethrough"},heading:{name:"heading",action:p,className:"fa fa-header",title:"Heading","default":!0},"heading-smaller":{name:"heading-smaller",action:p,className:"fa fa-header fa-header-x fa-header-smaller",title:"Smaller Heading"},"heading-bigger":{name:"heading-bigger",action:m,className:"fa fa-header fa-header-x fa-header-bigger",title:"Bigger Heading"},"heading-1":{name:"heading-1",action:g,className:"fa fa-header fa-header-x fa-header-1",title:"Big Heading"},"heading-2":{name:"heading-2",action:v,className:"fa fa-header fa-header-x fa-header-2",title:"Medium Heading"},"heading-3":{name:"heading-3",action:y,className:"fa fa-header fa-header-x fa-header-3",title:"Small Heading"},"separator-1":{name:"separator-1"},code:{name:"code",action:h,className:"fa fa-code",title:"Code"},quote:{name:"quote",action:d,className:"fa fa-quote-left",title:"Quote","default":!0},"unordered-list":{name:"unordered-list",action:x,className:"fa fa-list-ul",title:"Generic List","default":!0},"ordered-list":{name:"ordered-list",action:b,className:"fa fa-list-ol",title:"Numbered List","default":!0},"clean-block":{name:"clean-block",action:w,className:"fa fa-eraser fa-clean-block",title:"Clean block"},"separator-2":{name:"separator-2"},link:{name:"link",action:k,className:"fa fa-link",title:"Create Link","default":!0},image:{name:"image",action:S,className:"fa fa-picture-o",title:"Insert Image","default":!0},table:{name:"table",action:C,className:"fa fa-table",title:"Insert Table"},"horizontal-rule":{name:"horizontal-rule",action:L,className:"fa fa-minus",title:"Insert Horizontal Line"},"separator-3":{name:"separator-3"},preview:{name:"preview",action:A,className:"fa fa-eye no-disable",title:"Toggle Preview","default":!0},"side-by-side":{name:"side-by-side",action:N,className:"fa fa-columns no-disable no-mobile",title:"Toggle Side by Side","default":!0},fullscreen:{name:"fullscreen",action:s,className:"fa fa-arrows-alt no-disable no-mobile",title:"Toggle Fullscreen","default":!0},"separator-4":{name:"separator-4"},guide:{name:"guide",action:"https://simplemde.com/markdown-guide",className:"fa fa-question-circle",title:"Markdown Guide","default":!0},"separator-5":{name:"separator-5"},undo:{name:"undo",action:T,className:"fa fa-undo no-disable",title:"Undo"},redo:{name:"redo",action:M,className:"fa fa-repeat no-disable",title:"Redo"}},X={link:["[","](#url#)"],image:["![](","#url#)"],table:["","\n\n| Column 1 | Column 2 | Column 3 |\n| -------- | -------- | -------- |\n| Text | Text | Text |\n\n"],horizontalRule:["","\n\n-----\n\n"]},Z={link:"URL for the link:",image:"URL of the image:"},J={bold:"**",code:"```",italic:"*"};B.prototype.markdown=function(e){if(j){var t={};return this.options&&this.options.renderingConfig&&this.options.renderingConfig.singleLineBreaks===!1?t.breaks=!1:t.breaks=!0,this.options&&this.options.renderingConfig&&this.options.renderingConfig.codeSyntaxHighlighting===!0&&window.hljs&&(t.highlight=function(e){return window.hljs.highlightAuto(e).value}),j.setOptions(t),j(e)}},B.prototype.render=function(e){if(e||(e=this.element||document.getElementsByTagName("textarea")[0]),!this._rendered||this._rendered!==e){this.element=e;var t=this.options,n=this,i={};for(var o in t.shortcuts)null!==t.shortcuts[o]&&null!==q[o]&&!function(e){i[r(t.shortcuts[e])]=function(){q[e](n)}}(o);i.Enter="newlineAndIndentContinueMarkdownList",i.Tab="tabAndIndentMarkdownList",i["Shift-Tab"]="shiftTabAndUnindentMarkdownList",i.Esc=function(e){e.getOption("fullScreen")&&s(n)},document.addEventListener("keydown",function(e){e=e||window.event,27==e.keyCode&&n.codemirror.getOption("fullScreen")&&s(n)},!1);var a,l;if(t.spellChecker!==!1?(a="spell-checker",l=t.parsingConfig,l.name="gfm",l.gitHubSpice=!1,z({codeMirrorInstance:F})):(a=t.parsingConfig,a.name="gfm",a.gitHubSpice=!1),this.codemirror=F.fromTextArea(e,{mode:a,backdrop:l,theme:"paper",tabSize:void 0!=t.tabSize?t.tabSize:2,indentUnit:void 0!=t.tabSize?t.tabSize:2,indentWithTabs:t.indentWithTabs!==!1,lineNumbers:!1,autofocus:t.autofocus===!0,extraKeys:i,lineWrapping:t.lineWrapping!==!1,allowDropFileTypes:["text/plain"],placeholder:t.placeholder||e.getAttribute("placeholder")||"",styleSelectedText:void 0!=t.styleSelectedText?t.styleSelectedText:!0}),t.forceSync===!0){var c=this.codemirror;c.on("change",function(){c.save()})}this.gui={},t.toolbar!==!1&&(this.gui.toolbar=this.createToolbar()),t.status!==!1&&(this.gui.statusbar=this.createStatusbar()),void 0!=t.autosave&&t.autosave.enabled===!0&&this.autosave(),this.gui.sideBySide=this.createSideBySide(),this._rendered=this.element;var u=this.codemirror;setTimeout(function(){u.refresh()}.bind(u),0)}},B.prototype.autosave=function(){if(_()){var e=this;if(void 0==this.options.autosave.uniqueId||""==this.options.autosave.uniqueId)return void console.log("SimpleMDE: You must set a uniqueId to use the autosave feature");null!=e.element.form&&void 0!=e.element.form&&e.element.form.addEventListener("submit",function(){localStorage.removeItem("smde_"+e.options.autosave.uniqueId)}),this.options.autosave.loaded!==!0&&("string"==typeof localStorage.getItem("smde_"+this.options.autosave.uniqueId)&&""!=localStorage.getItem("smde_"+this.options.autosave.uniqueId)&&(this.codemirror.setValue(localStorage.getItem("smde_"+this.options.autosave.uniqueId)),this.options.autosave.foundSavedValue=!0),this.options.autosave.loaded=!0),localStorage.setItem("smde_"+this.options.autosave.uniqueId,e.value());var t=document.getElementById("autosaved");if(null!=t&&void 0!=t&&""!=t){var n=new Date,r=n.getHours(),i=n.getMinutes(),o="am",a=r;a>=12&&(a=r-12,o="pm"),0==a&&(a=12),i=10>i?"0"+i:i,t.innerHTML="Autosaved: "+a+":"+i+" "+o}this.autosaveTimeoutId=setTimeout(function(){e.autosave()},this.options.autosave.delay||1e4)}else console.log("SimpleMDE: localStorage not available, cannot autosave")},B.prototype.clearAutosavedValue=function(){if(_()){if(void 0==this.options.autosave||void 0==this.options.autosave.uniqueId||""==this.options.autosave.uniqueId)return void console.log("SimpleMDE: You must set a uniqueId to clear the autosave value");localStorage.removeItem("smde_"+this.options.autosave.uniqueId)}else console.log("SimpleMDE: localStorage not available, cannot autosave")},B.prototype.createSideBySide=function(){var e=this.codemirror,t=e.getWrapperElement(),n=t.nextSibling;n&&/editor-preview-side/.test(n.className)||(n=document.createElement("div"),n.className="editor-preview-side",t.parentNode.insertBefore(n,t.nextSibling));var r=!1,i=!1;return e.on("scroll",function(e){if(r)return void(r=!1);i=!0;var t=e.getScrollInfo().height-e.getScrollInfo().clientHeight,o=parseFloat(e.getScrollInfo().top)/t,a=(n.scrollHeight-n.clientHeight)*o;n.scrollTop=a}),n.onscroll=function(){if(i)return void(i=!1);r=!0;var t=n.scrollHeight-n.clientHeight,o=parseFloat(n.scrollTop)/t,a=(e.getScrollInfo().height-e.getScrollInfo().clientHeight)*o;e.scrollTo(0,a)},n},B.prototype.createToolbar=function(e){if(e=e||this.options.toolbar,e&&0!==e.length){var t;for(t=0;t<e.length;t++)void 0!=K[e[t]]&&(e[t]=K[e[t]]);var n=document.createElement("div");n.className="editor-toolbar";var r=this,a={};for(r.toolbar=e,t=0;t<e.length;t++)if(("guide"!=e[t].name||r.options.toolbarGuideIcon!==!1)&&!(r.options.hideIcons&&-1!=r.options.hideIcons.indexOf(e[t].name)||("fullscreen"==e[t].name||"side-by-side"==e[t].name)&&$())){if("|"===e[t]){for(var s=!1,c=t+1;c<e.length;c++)"|"===e[c]||r.options.hideIcons&&-1!=r.options.hideIcons.indexOf(e[c].name)||(s=!0);if(!s)continue}!function(e){var t;t="|"===e?o():i(e,r.options.toolbarTips,r.options.shortcuts),e.action&&("function"==typeof e.action?t.onclick=function(t){t.preventDefault(),e.action(r)}:"string"==typeof e.action&&(t.href=e.action,t.target="_blank")),a[e.name||e]=t,n.appendChild(t)}(e[t])}r.toolbarElements=a;var u=this.codemirror;u.on("cursorActivity",function(){var e=l(u);for(var t in a)!function(t){var n=a[t];e[t]?n.className+=" active":"fullscreen"!=t&&"side-by-side"!=t&&(n.className=n.className.replace(/\s*active\s*/g,""))}(t)});var f=u.getWrapperElement();return f.parentNode.insertBefore(n,f),n}},B.prototype.createStatusbar=function(e){e=e||this.options.status;var t=this.options,n=this.codemirror;if(e&&0!==e.length){var r,i,o,a=[];for(r=0;r<e.length;r++)if(i=void 0,o=void 0,"object"==typeof e[r])a.push({className:e[r].className,defaultValue:e[r].defaultValue,onUpdate:e[r].onUpdate});else{var l=e[r];"words"===l?(o=function(e){e.innerHTML=W(n.getValue())},i=function(e){e.innerHTML=W(n.getValue())}):"lines"===l?(o=function(e){e.innerHTML=n.lineCount()},i=function(e){e.innerHTML=n.lineCount()}):"cursor"===l?(o=function(e){e.innerHTML="0:0"},i=function(e){var t=n.getCursor();e.innerHTML=t.line+":"+t.ch}):"autosave"===l&&(o=function(e){void 0!=t.autosave&&t.autosave.enabled===!0&&e.setAttribute("id","autosaved")}),a.push({className:l,defaultValue:o,onUpdate:i})}var s=document.createElement("div");for(s.className="editor-statusbar",r=0;r<a.length;r++){var c=a[r],u=document.createElement("span");u.className=c.className,"function"==typeof c.defaultValue&&c.defaultValue(u),"function"==typeof c.onUpdate&&this.codemirror.on("update",function(e,t){return function(){t.onUpdate(e)}}(u,c)),s.appendChild(u)}var f=this.codemirror.getWrapperElement();return f.parentNode.insertBefore(s,f.nextSibling),s}},B.prototype.value=function(e){return void 0===e?this.codemirror.getValue():(this.codemirror.getDoc().setValue(e),this)},B.toggleBold=c,B.toggleItalic=u,B.toggleStrikethrough=f,B.toggleBlockquote=d,B.toggleHeadingSmaller=p,B.toggleHeadingBigger=m,B.toggleHeading1=g,B.toggleHeading2=v,B.toggleHeading3=y,B.toggleCodeBlock=h,B.toggleUnorderedList=x,B.toggleOrderedList=b,B.cleanBlock=w,B.drawLink=k,B.drawImage=S,B.drawTable=C,B.drawHorizontalRule=L,B.undo=T,B.redo=M,B.togglePreview=A,B.toggleSideBySide=N,B.toggleFullScreen=s,B.prototype.toggleBold=function(){c(this)},B.prototype.toggleItalic=function(){u(this)},B.prototype.toggleStrikethrough=function(){f(this)},B.prototype.toggleBlockquote=function(){d(this)},B.prototype.toggleHeadingSmaller=function(){p(this)},B.prototype.toggleHeadingBigger=function(){m(this)},B.prototype.toggleHeading1=function(){g(this)},B.prototype.toggleHeading2=function(){v(this)},B.prototype.toggleHeading3=function(){y(this)},B.prototype.toggleCodeBlock=function(){h(this)},B.prototype.toggleUnorderedList=function(){x(this)},B.prototype.toggleOrderedList=function(){b(this)},B.prototype.cleanBlock=function(){w(this)},B.prototype.drawLink=function(){k(this)},B.prototype.drawImage=function(){S(this)},B.prototype.drawTable=function(){C(this)},B.prototype.drawHorizontalRule=function(){L(this)},B.prototype.undo=function(){T(this)},B.prototype.redo=function(){M(this)},B.prototype.togglePreview=function(){A(this)},B.prototype.toggleSideBySide=function(){N(this)},B.prototype.toggleFullScreen=function(){s(this)},B.prototype.isPreviewActive=function(){var e=this.codemirror,t=e.getWrapperElement(),n=t.lastChild;return/editor-preview-active/.test(n.className)},B.prototype.isSideBySideActive=function(){var e=this.codemirror,t=e.getWrapperElement(),n=t.nextSibling;return/editor-preview-active-side/.test(n.className)},B.prototype.isFullscreenActive=function(){var e=this.codemirror;return e.getOption("fullScreen")},B.prototype.getState=function(){var e=this.codemirror;return l(e)},B.prototype.toTextArea=function(){var e=this.codemirror,t=e.getWrapperElement();t.parentNode&&(this.gui.toolbar&&t.parentNode.removeChild(this.gui.toolbar),this.gui.statusbar&&t.parentNode.removeChild(this.gui.statusbar),this.gui.sideBySide&&t.parentNode.removeChild(this.gui.sideBySide)),e.toTextArea(),this.autosaveTimeoutId&&(clearTimeout(this.autosaveTimeoutId),this.autosaveTimeoutId=void 0,this.clearAutosavedValue())},t.exports=B},{"./codemirror/tablist":19,codemirror:10,"codemirror-spell-checker":4,"codemirror/addon/display/fullscreen.js":5,"codemirror/addon/display/placeholder.js":6,"codemirror/addon/edit/continuelist.js":7,"codemirror/addon/mode/overlay.js":8,"codemirror/addon/selection/mark-selection.js":9,"codemirror/mode/gfm/gfm.js":11,"codemirror/mode/markdown/markdown.js":12,"codemirror/mode/xml/xml.js":14,marked:17}]},{},[20])(20)}); \ No newline at end of file diff --git a/src/main/resources/templates/admin/admin_attachment.ftl b/src/main/resources/templates/admin/admin_attachment.ftl index a5ae8bbe3..b9b4be376 100755 --- a/src/main/resources/templates/admin/admin_attachment.ftl +++ b/src/main/resources/templates/admin/admin_attachment.ftl @@ -2,13 +2,14 @@ <#include "module/_macro.ftl"> <@head>${options.blog_title!} | <@spring.message code='admin.attachments.title' /></@head> <div class="content-wrapper"> + <link rel="stylesheet" href="/static/halo-backend/plugins/fileinput/fileinput.min.css"> <style type="text/css" rel="stylesheet"> .div-thumbnail{transition:all .5s ease-in-out;padding:10px} .thumbnail{margin-bottom:0} </style> - <section class="content-header"> + <section class="content-header" id="animated-header"> <h1 style="display: inline-block;"><@spring.message code='admin.attachments.title' /></h1> - <a class="btn-header" id="showForm" href="#"> + <a class="btn-header" id="showForm" href="javascript:void(0)"> <i class="fa fa-cloud-upload" aria-hidden="true"></i><@spring.message code='admin.attachments.btn.upload' /> </a> <ol class="breadcrumb"> @@ -16,7 +17,7 @@ <li class="active"><@spring.message code='admin.attachments.title' /></li> </ol> </section> - <section class="content container-fluid"> + <section class="content container-fluid" id="animated-content"> <div class="row" id="uploadForm" style="display: none;"> <div class="col-md-12"> <div class="form-group"> @@ -28,9 +29,9 @@ </div> <div class="row"> <#list attachments.content as attachment> - <div class="col-lg-2 col-md-3 col-sm-6 col-xs-6 div-thumbnail" onclick="halo.layerModal('/admin/attachments/attachment?attachId=${attachment.attachId?c}','<@spring.message code="admin.attachments.js.modal.detail-title" />')"> - <a href="#" class="thumbnail"> - <img src="${attachment.attachSmallPath?if_exists}" class="img-responsive"> + <div class="col-lg-2 col-md-3 col-sm-6 col-xs-6 div-thumbnail" onclick="halo.layerModal('/admin/attachments/attachment?attachId=${attachment.attachId?c}','<@spring.message code="admin.attachments.modal.detail-title" />')"> + <a href="javascript:void(0)" class="thumbnail"> + <img src="${attachment.attachSmallPath!}" class="img-responsive"> </a> </div> </#list> @@ -55,36 +56,24 @@ </div> </div> </section> - <script type="application/javascript"> - function loadFileInput() { - $('#uploadImg').fileinput({ - language: 'zh', - uploadUrl: '/admin/attachments/upload', - uploadAsync: true, - allowedFileExtensions: ['jpg','gif','png','jpeg','svg','psd'], - maxFileCount: 100, - enctype : 'multipart/form-data', - showClose: false - }).on("fileuploaded",function (event,data,previewId,index) { - var data = data.jqXHR.responseJSON; - if(data.success=="1"){ - $("#uploadForm").hide(400); - halo.showMsgAndReload(data.message,'success',1000); - } - }); - } - $(document).ready(function () { - loadFileInput(); - }); - <#if options.admin_pjax?default("true") == "true"> - $(document).on('pjax:complete',function () { - loadFileInput(); - }); - </#if> - $("#showForm").click(function(){ - $("#uploadForm").slideToggle(400); - }); - </script> </div> -<@footer></@footer> +<@footer> +<script type="application/javascript" id="footer_script"> + $('#uploadImg').fileinput({ + language: 'zh', + uploadUrl: '/admin/attachments/upload', + uploadAsync: true, + allowedFileExtensions: ['jpg','gif','png','jpeg','svg','psd'], + maxFileCount: 100, + enctype : 'multipart/form-data', + showClose: false + }).on("filebatchuploadcomplete",function (event, files, extra) { + $("#uploadForm").hide(400); + halo.showMsgAndRedirect('上传成功!','success',1000,'/admin/attachments',"${options.admin_pjax!'true'}"); + }); + $("#showForm").click(function(){ + $("#uploadForm").slideToggle(400); + }); +</script> +</@footer> </#compress> diff --git a/src/main/resources/templates/admin/admin_backup.ftl b/src/main/resources/templates/admin/admin_backup.ftl index aa6c6b4a4..d0697efe0 100644 --- a/src/main/resources/templates/admin/admin_backup.ftl +++ b/src/main/resources/templates/admin/admin_backup.ftl @@ -4,61 +4,19 @@ <div class="content-wrapper"> <style type="text/css" rel="stylesheet"> .resourceType,.databaseType,.postType{list-style:none;float:left;margin:0;padding-bottom:10px} - .form-horizontal .control-label{ - text-align: left; - } - .control-radio{ - padding-top: 7px; - } </style> - <section class="content-header"> + <section class="content-header" id="animated-header"> <h1 style="display: inline-block;"><@spring.message code='admin.backup.title' /></h1> - <a class="btn-header" id="btnBackupOption" href="#"> - <@spring.message code='admin.backup.text.setting' /> - </a> <ol class="breadcrumb"> <li> <a href="/admin"><i class="fa fa-dashboard"></i> <@spring.message code='admin.index.bread.index' /></a> </li> - <li><a href="#"><@spring.message code='admin.backup.bread.setting' /></a></li> + <li><a href="javascript:void(0)"><@spring.message code='admin.backup.bread.setting' /></a></li> <li class="active"><@spring.message code='admin.backup.title' /></li> </ol> </section> - <section class="content container-fluid"> + <section class="content container-fluid" id="animated-content"> <div class="row"> - <div class="col-lg-12 col-xs-12" id="backupOptionsPanel" style="display: none"> - <div class="box box-primary"> - <div class="box-header with-border"> - <h3 class="box-title"><@spring.message code='admin.backup.text.setting' /></h3> - </div> - <form class="form-horizontal" id="backupOption" method="post" action="/admin/backup/backupOption"> - <div class="box-body"> - <div class="col-sm-6 col-xs-6"> - <div class="form-group"> - <label for="autoBackup" class="col-sm-4 control-label"><@spring.message code='admin.backup.form.auto-backup' /></label> - <div class="col-sm-8 control-radio"> - <div class="pretty p-default p-round"> - <input type="radio" name="auto_backup" id="autoBackup" value="true" ${((options.auto_backup?if_exists)=='true')?string('checked','')}> - <div class="state p-primary"> - <label><@spring.message code='common.radio.enable' /></label> - </div> - </div> - <div class="pretty p-default p-round"> - <input type="radio" name="auto_backup" id="autoBackup" value="false" ${((options.auto_backup?default('false'))=='false')?string('checked','')}> - <div class="state p-primary"> - <label><@spring.message code='common.radio.disable' /></label> - </div> - </div> - </div> - </div> - </div> - </div> - <div class="box-footer"> - <button type="submit" class="btn btn-primary pull-right" ><@spring.message code='common.btn.save' /></button> - </div> - </form> - </div> - </div> <div class="col-xs-12"> <ul style="list-style: none;padding-left: 0"> <li class="resourceType"> @@ -75,17 +33,15 @@ <div class="col-xs-12"> <div class="box box-primary"> <div class="box-body table-responsive no-padding"> - <table class="table table-bordered table-hover"> - <thead> - <tr> - <th><@spring.message code='common.th.file-name' /></th> - <th><@spring.message code='common.th.date' /></th> - <th><@spring.message code='common.th.file-size' /></th> - <th><@spring.message code='common.th.file-type' /></th> - <th><@spring.message code='common.th.control' /></th> - </tr> - </thead> + <table class="table table-hover"> <tbody> + <tr> + <th><@spring.message code='common.th.file-name' /></th> + <th><@spring.message code='common.th.date' /></th> + <th><@spring.message code='common.th.file-size' /></th> + <th><@spring.message code='common.th.file-type' /></th> + <th><@spring.message code='common.th.control' /></th> + </tr> <#if backups?size gt 0> <#list backups?sort_by("createAt")?reverse as backup> <tr> @@ -115,79 +71,60 @@ </div> </div> </section> - <script> - /** - * 备份 - */ - function btn_backup(type) { - $.ajax({ - type: 'GET', - url: '/admin/backup/doBackup', - async: false, - data: { - 'type' : type - }, - success: function (data) { - if(data.code==1){ - halo.showMsgAndReload(data.msg,'success',1000); - }else{ - halo.showMsg(data.msg,'error',2000); - } - } - }); - } - - /** - * 发送备份到邮箱 - * - * @param fileName - * @param type - */ - function sendToEmail(fileName,type) { - $.ajax({ - type: 'GET', - url: '/admin/backup/sendToEmail', - async: false, - data: { - 'type' : type, - 'fileName' : fileName - }, - success: function (data) { - if(data.code==1){ - halo.showMsg(data.msg,'success',1000); - }else{ - halo.showMsg(data.msg,'error',2000); - } - } - }); - } - - /** - * 删除备份 - */ - function delBackup(fileName,type) { - $.ajax({ - type: 'GET', - url: '/admin/backup/delBackup', - async: false, - data: { - 'type' : type, - 'fileName' : fileName - }, - success: function (data) { - if(data.code==1){ - halo.showMsgAndReload(data.msg,'success',1000); - }else{ - halo.showMsg(data.msg,'error',2000); - } - } - }); - } - - $('#btnBackupOption').click(function () { - $('#backupOptionsPanel').slideToggle(400); - }); - </script> </div> -<@footer></@footer> +<@footer> +<script type="application/javascript" id="footer_script"> + /** + * 备份 + */ + function btn_backup(type) { + $.get('/admin/backup/doBackup',{'type' : type},function(data) { + if(data.code === 1){ + halo.showMsgAndRedirect(data.msg,'success',1000,'/admin/backup?type=${type}',"${options.admin_pjax!'true'}"); + }else{ + halo.showMsg(data.msg,'error',2000); + } + },'JSON'); + } + + /** + * 发送备份到邮箱 + * + * @param fileName + * @param type + */ + function sendToEmail(fileName,type) { + $.get('/admin/backup/sendToEmail',{ + 'type' : type, + 'fileName' : fileName + },function(data) { + if(data.code === 1){ + halo.showMsg(data.msg,'success',1000); + }else{ + halo.showMsg(data.msg,'error',2000); + } + },'JSON'); + } + + /** + * 删除备份 + */ + function delBackup(fileName,type) { + $.get('/admin/backup/delBackup',{ + 'type' : type, + 'fileName' : fileName + },function(data) { + if(data.code === 1){ + halo.showMsgAndRedirect(data.msg,'success',1000,'/admin/backup?type=${type}',"${options.admin_pjax!'true'}"); + }else{ + halo.showMsg(data.msg,'error',2000); + } + },'JSON'); + } + + $('#btnBackupOption').click(function () { + $('#backupOptionsPanel').slideToggle(400); + }); +</script> +</@footer> </#compress> diff --git a/src/main/resources/templates/admin/admin_category.ftl b/src/main/resources/templates/admin/admin_category.ftl index d071b1375..5b5355954 100755 --- a/src/main/resources/templates/admin/admin_category.ftl +++ b/src/main/resources/templates/admin/admin_category.ftl @@ -2,7 +2,7 @@ <#include "module/_macro.ftl"> <@head>${options.blog_title!} | <@spring.message code='admin.categories.title' /></@head> <div class="content-wrapper"> - <section class="content-header"> + <section class="content-header" id="animated-header"> <h1> <@spring.message code='admin.categories.title' /> <small></small> @@ -12,11 +12,11 @@ <a data-pjax="true" href="/admin"> <i class="fa fa-dashboard"></i> <@spring.message code='admin.index.bread.index' /></a> </li> - <li><a data-pjax="true" href="#"><@spring.message code='admin.categories.bread.posts' /></a></li> + <li><a data-pjax="true" href="javascript:void(0)"><@spring.message code='admin.categories.bread.posts' /></a></li> <li class="active"><@spring.message code='admin.categories.title' /></li> </ol> </section> - <section class="content container-fluid"> + <section class="content container-fluid" id="animated-content"> <div class="row"> <div class="col-md-5"> <div class="box box-primary"> @@ -24,27 +24,27 @@ <div class="box-header with-border"> <h3 class="box-title"><@spring.message code='admin.categories.text.edit-category' /> <#if updateCategory??>[${updateCategory.cateName}]</#if></h3> </div> - <form action="/admin/category/save" method="post" role="form" id="cateAddForm"> + <form role="form" id="cateSaveForm"> <input type="hidden" name="cateId" value="${updateCategory.cateId?c}"> <div class="box-body"> <div class="form-group"> <label for="cateName"><@spring.message code='admin.categories.form.cate-name' /></label> - <input type="text" class="form-control" id="cateName" name="cateName" value="${updateCategory.cateName}"> + <input type="text" class="form-control" id="cateName" name="cateName" value="${updateCategory.cateName!}"> <small><@spring.message code='admin.categories.form.cate-name-tips' /></small> </div> <div class="form-group"> <label for="cateUrl"><@spring.message code='admin.categories.form.cate-url' /></label> - <input type="text" class="form-control" id="cateUrl" name="cateUrl" value="${updateCategory.cateUrl}"> + <input type="text" class="form-control" id="cateUrl" name="cateUrl" value="${updateCategory.cateUrl!}"> <small><@spring.message code='admin.categories.form.cate-url-tips' /></small> </div> <div class="form-group"> <label for="cateDesc" class="control-label"><@spring.message code='admin.categories.form.cate-desc' /></label> - <textarea class="form-control" rows="3" id="cateDesc" name="cateDesc" style="resize: none">${updateCategory.cateDesc}</textarea> + <textarea class="form-control" rows="3" id="cateDesc" name="cateDesc" style="resize: none">${updateCategory.cateDesc!}</textarea> <small><@spring.message code='admin.categories.form.cate-desc-tips' /></small> </div> </div> <div class="box-footer"> - <button type="submit" class="btn btn-primary btn-sm "><@spring.message code='common.btn.define-edit' /></button> + <button type="button" class="btn btn-primary btn-sm" onclick="save()"><@spring.message code='common.btn.define-edit' /></button> <a data-pjax="true" href="/admin/category" class="btn btn-info btn-sm "><@spring.message code='common.btn.back-to-add' /></a> </div> </form> @@ -52,16 +52,16 @@ <div class="box-header with-border"> <h3 class="box-title"><@spring.message code='admin.categories.text.add-category' /></h3> </div> - <form action="/admin/category/save" method="post" role="form" id="cateAddForm" onsubmit="return checkCate()"> + <form role="form" id="cateSaveForm"> <div class="box-body"> <div class="form-group"> <label for="cateName"><@spring.message code='admin.categories.form.cate-name' /></label> - <input type="text" class="form-control" id="cateName" name="cateName" placeholder=""> + <input type="text" class="form-control" id="cateName" name="cateName"> <small><@spring.message code='admin.categories.form.cate-name-tips' /></small> </div> <div class="form-group"> <label for="cateUrl"><@spring.message code='admin.categories.form.cate-url' /></label> - <input type="text" class="form-control" id="cateUrl" name="cateUrl" placeholder=""> + <input type="text" class="form-control" id="cateUrl" name="cateUrl"> <small><@spring.message code='admin.categories.form.cate-url-tips' /></small> </div> <div class="form-group"> @@ -71,7 +71,7 @@ </div> </div> <div class="box-footer"> - <button type="submit" class="btn btn-primary btn-sm "><@spring.message code='common.btn.define-add' /></button> + <button type="button" class="btn btn-primary btn-sm" onclick="save()"><@spring.message code='common.btn.define-add' /></button> </div> </form> </#if> @@ -83,39 +83,37 @@ <h3 class="box-title"><@spring.message code='admin.categories.text.all-categories' /></h3> </div> <div class="box-body table-responsive no-padding"> - <table class="table table-bordered table-hover"> - <thead> - <tr> - <th><@spring.message code='common.th.name' /></th> - <th><@spring.message code='common.th.url' /></th> - <th><@spring.message code='common.th.desc' /></th> - <th><@spring.message code='common.th.posts-count' /></th> - <th><@spring.message code='common.th.control' /></th> - </tr> - </thead> + <table class="table table-hover"> <tbody> - <@commonTag method="categories"> - <#if categories?? && categories?size gt 0> - <#list categories as cate> - <tr> - <td>${cate.cateName}</td> - <td>${cate.cateUrl}</td> - <td>${(cate.cateDesc)!}</td> - <td> - <span class="label" style="background-color: #d6cdcd;">${cate.posts?size}</span> - </td> - <td> - <#if updateCategory?? && updateCategory.cateId?c==cate.cateId?c> - <a href="#" class="btn btn-primary btn-xs " disabled><@spring.message code='common.btn.editing' /></a> - <#else > - <a data-pjax="true" href="/admin/category/edit?cateId=${cate.cateId?c}" class="btn btn-primary btn-xs "><@spring.message code='common.btn.modify' /></a> - </#if> - <button class="btn btn-danger btn-xs " onclick="modelShow('/admin/category/remove?cateId=${cate.cateId?c}')"><@spring.message code='common.btn.delete' /></button> - </td> - </tr> - </#list> - </#if> - </@commonTag> + <tr> + <th><@spring.message code='common.th.name' /></th> + <th><@spring.message code='common.th.url' /></th> + <th><@spring.message code='common.th.desc' /></th> + <th><@spring.message code='common.th.posts-count' /></th> + <th><@spring.message code='common.th.control' /></th> + </tr> + <@commonTag method="categories"> + <#if categories?? && categories?size gt 0> + <#list categories as cate> + <tr> + <td>${cate.cateName!}</td> + <td>${cate.cateUrl!}</td> + <td>${cate.cateDesc!}</td> + <td> + <span class="label" style="background-color: #d6cdcd;">${cate.posts?size}</span> + </td> + <td> + <#if updateCategory?? && updateCategory.cateId?c==cate.cateId?c> + <a href="javascript:void(0)" class="btn btn-primary btn-xs " disabled><@spring.message code='common.btn.editing' /></a> + <#else > + <a data-pjax="true" href="/admin/category/edit?cateId=${cate.cateId?c}" class="btn btn-primary btn-xs "><@spring.message code='common.btn.modify' /></a> + </#if> + <button class="btn btn-danger btn-xs " onclick="modelShow('/admin/category/remove?cateId=${cate.cateId?c}')"><@spring.message code='common.btn.delete' /></button> + </td> + </tr> + </#list> + </#if> + </@commonTag> </tbody> </table> </div> @@ -142,41 +140,31 @@ </div> </div> </div> - <script> - function modelShow(url) { - $('#url').val(url); - $('#removeCateModal').modal(); - } - function removeIt(){ - var url=$.trim($("#url").val()); - window.location.href=url; - } - function checkCate() { - var name = $('#cateName').val(); - var url = $('#cateUrl').val(); - var desc = $('#cateDesc').val(); - var result = true; - if(name==""||url==""||desc==""){ - halo.showMsg("<@spring.message code='common.js.info-no-complete' />",'info',2000); - result = false; - } - $.ajax({ - type: 'GET', - url: '/admin/category/checkUrl', - async: false, - data: { - 'cateUrl' : url - }, - success: function (data) { - if(data.code==0){ - halo.showMsg(data.msg,'error',2000); - result = false; - } - } - }); - return result; - } - </script> </div> -<@footer></@footer> +<@footer> +<script type="application/javascript" id="footer_script"> + function modelShow(url) { + $('#url').val(url); + $('#removeCateModal').modal(); + } + function removeIt(){ + var url=$.trim($("#url").val()); + <#if (options.admin_pjax!'true') == 'true'> + pjax.loadUrl(url); + <#else> + window.location.href = url; + </#if> + } + function save() { + var param = $("#cateSaveForm").serialize(); + $.post('/admin/category/save',param,function (data) { + if (data.code === 1) { + halo.showMsgAndRedirect(data.msg,'success',1000,'/admin/category',"${options.admin_pjax!'true'}"); + } else { + halo.showMsg(data.msg,'error',2000); + } + },'JSON'); + } +</script> +</@footer> </#compress> diff --git a/src/main/resources/templates/admin/admin_comment.ftl b/src/main/resources/templates/admin/admin_comment.ftl index 829415a31..b7a20d7b5 100755 --- a/src/main/resources/templates/admin/admin_comment.ftl +++ b/src/main/resources/templates/admin/admin_comment.ftl @@ -2,10 +2,11 @@ <#include "module/_macro.ftl"> <@head>${options.blog_title!} | <@spring.message code='admin.comments.title' /></@head> <div class="content-wrapper"> + <link rel="stylesheet" href="/static/halo-common/OwO/OwO.min.css"> <style type="text/css" rel="stylesheet"> .draft,.publish,.trash{list-style:none;float:left;margin:0;padding-bottom:10px}s </style> - <section class="content-header"> + <section class="content-header" id="animated-header"> <h1><@spring.message code='admin.comments.title' /><small></small></h1> <ol class="breadcrumb"> <li> @@ -14,7 +15,7 @@ <li class="active"><@spring.message code='admin.comments.title' /></li> </ol> </section> - <section class="content container-fluid"> + <section class="content container-fluid" id="animated-content"> <ul style="list-style: none;padding-left: 0"> <li class="publish"> <a data-pjax="true" href="/admin/comments" <#if status==0>style="color: #000" </#if>><@spring.message code='common.status.published' /><span class="count">(${publicCount})</span></a> |  @@ -30,22 +31,20 @@ <div class="col-xs-12"> <div class="box box-primary"> <div class="box-body table-responsive no-padding"> - <table class="table table-bordered table-hover"> - <thead> - <tr> - <th><@spring.message code='common.th.comment-author' /></th> - <th width="50%"><@spring.message code='common.th.content' /></th> - <th><@spring.message code='common.th.comment-page' /></th> - <th><@spring.message code='common.th.date' /></th> - <th><@spring.message code='common.th.control' /></th> - </tr> - </thead> + <table class="table table-hover"> <tbody> + <tr> + <th><@spring.message code='common.th.comment-author' /></th> + <th width="50%"><@spring.message code='common.th.content' /></th> + <th><@spring.message code='common.th.comment-page' /></th> + <th><@spring.message code='common.th.date' /></th> + <th><@spring.message code='common.th.control' /></th> + </tr> <#if comments.content?size gt 0> <#list comments.content as comment> <tr> <td><a href="${comment.commentAuthorUrl}" target="_blank">${comment.commentAuthor}</a></td> - <td>${comment.commentContent}</td> + <td><p>${comment.commentContent}</p></td> <td> <#if comment.post.postType == "post"> <a target="_blank" href="/archives/${comment.post.postUrl}#comment-id-${comment.commentId?c}">${comment.post.postTitle}</a> @@ -131,7 +130,7 @@ <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title"><@spring.message code="common.btn.reply" /></h4> </div> - <form method="post" action="/admin/comments/reply"> + <form> <input type="hidden" id="commentId" name="commentId" value=""/> <input type="hidden" id="userAgent" name="userAgent" value=""/> <input type="hidden" id="postId" name="postId" value="" /> @@ -147,57 +146,56 @@ </div> </div> </div> - <script> - var s = new OwO({ - container: document.getElementsByClassName('OwO')[0], - target: document.getElementsByClassName('comment-input-content')[0], - position: 'down', - width: '100%', - maxHeight: '210px', - api:"/static/plugins/OwO/OwO.min.json" - }); - function modelShow(url,message) { - $('#url').val(url); - $('#message').html(message); - $('#removeCommentModal').modal(); - } - function removeIt(){ - var url=$.trim($("#url").val()); - window.location.href=url; - } - - /** - * 显示回复模态框 - * - * @param commentId commentId - * @param postId postId - */ - function replyShow(commentId,postId) { - $('#userAgent').val(navigator.userAgent); - $('#commentId').val(commentId); - $('#postId').val(postId); - $('#commentReplyModal').modal(); - } - - function reply() { - $.ajax({ - type: 'POST', - url: '/admin/comments/reply', - async: false, - data: { - 'commentId': $("#commentId").val(), - 'userAgent': $("#userAgent").val(), - 'postId': $("#postId").val(), - 'commentContent': halo.formatContent($("#commentContent").val()) - }, - success: function (data) { - if(data.code==1){ - window.location.reload(); - } - } - }); - } - </script> </div> -<@footer></@footer> +<@footer> +<script type="application/javascript" id="footer_script"> + var s = new OwO({ + container: document.getElementsByClassName('OwO')[0], + target: document.getElementsByClassName('comment-input-content')[0], + position: 'down', + width: '100%', + maxHeight: '210px', + api:"/static/halo-common/OwO/OwO.min.json" + }); + function modelShow(url,message) { + $('#url').val(url); + $('#message').html(message); + $('#removeCommentModal').modal(); + } + function removeIt(){ + var url=$.trim($("#url").val()); + <#if (options.admin_pjax!'true') == 'true'> + pjax.loadUrl(url); + <#else> + window.location.href = url; + </#if> + } + + /** + * 显示回复模态框 + * + * @param commentId commentId + * @param postId postId + */ + function replyShow(commentId,postId) { + $('#userAgent').val(navigator.userAgent); + $('#commentId').val(commentId); + $('#postId').val(postId); + $('#commentReplyModal').modal(); + } + + function reply() { + $.post('/admin/comments/reply',{ + 'commentId': $("#commentId").val(), + 'userAgent': $("#userAgent").val(), + 'postId': $("#postId").val(), + 'commentContent': halo.formatContent($("#commentContent").val()) + },function(data) { + if(data.code === 1){ + window.location.reload(); + } + },'JSON'); + } +</script> +</@footer> </#compress> diff --git a/src/main/resources/templates/admin/admin_halo.ftl b/src/main/resources/templates/admin/admin_halo.ftl index 53930385f..9bdd59bca 100644 --- a/src/main/resources/templates/admin/admin_halo.ftl +++ b/src/main/resources/templates/admin/admin_halo.ftl @@ -10,7 +10,7 @@ font-size: 16px; } </style> - <section class="content-header"> + <section class="content-header" id="animated-header"> <h1 style="display: inline-block;"><@spring.message code='admin.halo.title' /></h1> <ol class="breadcrumb"> <li> @@ -19,7 +19,7 @@ <li class="active"><@spring.message code='admin.halo.bread.active' /></li> </ol> </section> - <section class="content container-fluid"> + <section class="content container-fluid" id="animated-content"> <div id='write' class='is-mac'> <blockquote style="font-size: 14px;"> <p><@spring.message code='admin.halo.content.p1' />😉</p> @@ -30,10 +30,12 @@ <p>Blog : <a href="https://ryanc.cc" target="_blank">https://ryanc.cc</a> </p> <p>Email : <a href='mailto:i@ryanc.cc'>i@ryanc.cc</a></p> <p>Telegram : <a href="https://t.me/ruibaby" target="_blank">ruibaby</a></p> - <p>Telegram Channel: <a href="https://t.me/ryan0up" target="_blank">Ryan0up'S Channel</a></p> + <p>Telegram Channel: <a href="https://t.me/halo_dev" target="_blank">Halo's Channel</a></p> <p>QQ : 709831589</p> </div> </section> </div> -<@footer></@footer> +<@footer> +<script type="application/javascript" id="footer_script"></script> +</@footer> </#compress> diff --git a/src/main/resources/templates/admin/admin_index.ftl b/src/main/resources/templates/admin/admin_index.ftl index 2ca151435..48fd1e8f6 100755 --- a/src/main/resources/templates/admin/admin_index.ftl +++ b/src/main/resources/templates/admin/admin_index.ftl @@ -2,17 +2,9 @@ <#include "module/_macro.ftl"> <@head>${options.blog_title!} | <@spring.message code='admin.index.title' /></@head> <div class="content-wrapper"> - <style type="text/css" rel="stylesheet"> - .form-horizontal .control-label{ - text-align: left; - } - .control-radio{ - padding-top: 7px; - } - </style> - <section class="content-header"> + <section class="content-header" id="animated-header"> <h1 style="display: inline-block;"><@spring.message code='admin.index.title' /></h1> - <a class="btn-header" id="btnWidgetsOption" href="#"> + <a class="btn-header" id="btnWidgetsOption" href="javascript:void(0)"> <@spring.message code='admin.index.btn.widgets' /> </a> <ol class="breadcrumb"> @@ -22,7 +14,7 @@ <li class="active"><@spring.message code='admin.index.bread.active' /></li> </ol> </section> - <section class="content container-fluid"> + <section class="content container-fluid" id="animated-content"> <div class="row"> <div class="col-lg-12 col-xs-12" id="widgetOptionsPanel" style="display: none"> <div class="box box-primary"> @@ -36,13 +28,13 @@ <label for="widgetPostCount" class="col-sm-4 control-label"><@spring.message code='admin.index.widgets.post-count' />:</label> <div class="col-sm-8 control-radio"> <div class="pretty p-default p-round"> - <input type="radio" name="widget_postcount" id="widgetPostCount" value="true" ${((options.widget_postcount?default('true'))=='true')?string('checked','')}> + <input type="radio" name="widget_postcount" id="widgetPostCount" value="true" ${((options.widget_postcount!'true')=='true')?string('checked','')}> <div class="state p-primary"> <label><@spring.message code='common.radio.display' /></label> </div> </div> <div class="pretty p-default p-round"> - <input type="radio" name="widget_postcount" id="widgetPostCount" value="false" ${((options.widget_postcount?default('true'))=='false')?string('checked','')}> + <input type="radio" name="widget_postcount" id="widgetPostCount" value="false" ${((options.widget_postcount!'true')=='false')?string('checked','')}> <div class="state p-primary"> <label><@spring.message code='common.radio.hide' /></label> </div> @@ -53,13 +45,13 @@ <label for="widgetCommentCount" class="col-sm-4 control-label"><@spring.message code='admin.index.widgets.comment-count' />:</label> <div class="col-sm-8 control-radio"> <div class="pretty p-default p-round"> - <input type="radio" name="widget_commentcount" id="widgetCommentCount" value="true" ${((options.widget_commentcount?default('true'))=='true')?string('checked','')}> + <input type="radio" name="widget_commentcount" id="widgetCommentCount" value="true" ${((options.widget_commentcount!'true')=='true')?string('checked','')}> <div class="state p-primary"> <label><@spring.message code='common.radio.display' /></label> </div> </div> <div class="pretty p-default p-round"> - <input type="radio" name="widget_commentcount" id="widgetCommentCount" value="false" ${((options.widget_commentcount?default('true'))=='false')?string('checked','')}> + <input type="radio" name="widget_commentcount" id="widgetCommentCount" value="false" ${((options.widget_commentcount!'true')=='false')?string('checked','')}> <div class="state p-primary"> <label><@spring.message code='common.radio.hide' /></label> </div> @@ -70,13 +62,13 @@ <label for="widgetAttachmentCount" class="col-sm-4 control-label"><@spring.message code='admin.index.widgets.attachment-count' />:</label> <div class="col-sm-8 control-radio"> <div class="pretty p-default p-round"> - <input type="radio" name="widget_attachmentcount" id="widgetAttachmentCount" value="true" ${((options.widget_attachmentcount?default('true'))=='true')?string('checked','')}> + <input type="radio" name="widget_attachmentcount" id="widgetAttachmentCount" value="true" ${((options.widget_attachmentcount!'true')=='true')?string('checked','')}> <div class="state p-primary"> <label><@spring.message code='common.radio.display' /></label> </div> </div> <div class="pretty p-default p-round"> - <input type="radio" name="widget_attachmentcount" id="widgetAttachmentCount" value="false" ${((options.widget_attachmentcount?default('true'))=='false')?string('checked','')}> + <input type="radio" name="widget_attachmentcount" id="widgetAttachmentCount" value="false" ${((options.widget_attachmentcount!'true')=='false')?string('checked','')}> <div class="state p-primary"> <label><@spring.message code='common.radio.hide' /></label> </div> @@ -87,13 +79,13 @@ <label for="widgetDayCount" class="col-sm-4 control-label"><@spring.message code='admin.index.widgets.day-count' />:</label> <div class="col-sm-8 control-radio"> <div class="pretty p-default p-round"> - <input type="radio" name="widget_daycount" id="widgetDayCount" value="true" ${((options.widget_daycount?default('true'))=='true')?string('checked','')}> + <input type="radio" name="widget_daycount" id="widgetDayCount" value="true" ${((options.widget_daycount!'true')=='true')?string('checked','')}> <div class="state p-primary"> <label><@spring.message code='common.radio.display' /></label> </div> </div> <div class="pretty p-default p-round"> - <input type="radio" name="widget_daycount" id="widgetDayCount" value="false" ${((options.widget_daycount?default('true'))=='false')?string('checked','')}> + <input type="radio" name="widget_daycount" id="widgetDayCount" value="false" ${((options.widget_daycount!'true')=='false')?string('checked','')}> <div class="state p-primary"> <label><@spring.message code='common.radio.hide' /></label> </div> @@ -106,13 +98,13 @@ <label for="widgetPostLastest" class="col-sm-4 control-label"><@spring.message code='admin.index.widgets.post-lastest' />:</label> <div class="col-sm-8 control-radio"> <div class="pretty p-default p-round"> - <input type="radio" name="widget_postlastest" id="widgetPostLastest" value="true" ${((options.widget_postlastest?default('true'))=='true')?string('checked','')}> + <input type="radio" name="widget_postlastest" id="widgetPostLastest" value="true" ${((options.widget_postlastest!'true')=='true')?string('checked','')}> <div class="state p-primary"> <label><@spring.message code='common.radio.display' /></label> </div> </div> <div class="pretty p-default p-round"> - <input type="radio" name="widget_postlastest" id="widgetPostLastest" value="false" ${((options.widget_postlastest?default('true'))=='false')?string('checked','')}> + <input type="radio" name="widget_postlastest" id="widgetPostLastest" value="false" ${((options.widget_postlastest!'true')=='false')?string('checked','')}> <div class="state p-primary"> <label><@spring.message code='common.radio.hide' /></label> </div> @@ -123,13 +115,13 @@ <label for="widgetCommentLastest" class="col-sm-4 control-label"><@spring.message code='admin.index.widgets.comment-lastest' />:</label> <div class="col-sm-8 control-radio"> <div class="pretty p-default p-round"> - <input type="radio" name="widget_commentlastest" id="widgetCommentLastest" value="true" ${((options.widget_commentlastest?default('true'))=='true')?string('checked','')}> + <input type="radio" name="widget_commentlastest" id="widgetCommentLastest" value="true" ${((options.widget_commentlastest!'true')=='true')?string('checked','')}> <div class="state p-primary"> <label><@spring.message code='common.radio.display' /></label> </div> </div> <div class="pretty p-default p-round"> - <input type="radio" name="widget_commentlastest" id="widgetCommentLastest" value="false" ${((options.widget_commentlastest?default('true'))=='false')?string('checked','')}> + <input type="radio" name="widget_commentlastest" id="widgetCommentLastest" value="false" ${((options.widget_commentlastest!'true')=='false')?string('checked','')}> <div class="state p-primary"> <label><@spring.message code='common.radio.hide' /></label> </div> @@ -140,13 +132,13 @@ <label for="widgetLogsLastest" class="col-sm-4 control-label"><@spring.message code='admin.index.widgets.logs-lastest' />:</label> <div class="col-sm-8 control-radio"> <div class="pretty p-default p-round"> - <input type="radio" name="widget_logslastest" id="widgetLogsLastest" value="true" ${((options.widget_logslastest?default('true'))=='true')?string('checked','')}> + <input type="radio" name="widget_logslastest" id="widgetLogsLastest" value="true" ${((options.widget_logslastest!'true')=='true')?string('checked','')}> <div class="state p-primary"> <label><@spring.message code='common.radio.display' /></label> </div> </div> <div class="pretty p-default p-round"> - <input type="radio" name="widget_logslastest" id="widgetLogsLastest" value="false" ${((options.widget_logslastest?default('true'))=='false')?string('checked','')}> + <input type="radio" name="widget_logslastest" id="widgetLogsLastest" value="false" ${((options.widget_logslastest!'true')=='false')?string('checked','')}> <div class="state p-primary"> <label><@spring.message code='common.radio.hide' /></label> </div> @@ -161,46 +153,46 @@ </form> </div> </div> - <#if options.widget_postcount?default("true")=="true"> + <#if (options.widget_postcount!'true')=='true'> <div class="col-lg-3 col-xs-6" id="widgetPostCountBody"> <div class="small-box bg-aqua"> - <div class="inner"><h3><@articleTag method="postsCount">${postsCount?default(0)}</@articleTag></h3><p><@spring.message code='admin.index.widgets.posts' /></p></div> + <div class="inner"><h3><@articleTag method="postsCount">${postsCount!0}</@articleTag></h3><p><@spring.message code='admin.index.widgets.posts' /></p></div> <div class="icon"><i class="ion ion-bag"></i></div> <a data-pjax="true" href="/admin/posts" class="small-box-footer"><@spring.message code='common.btn.view-all' /> <i class="fa fa-arrow-circle-right"></i></a> </div> </div> </#if> - <#if options.widget_commentcount?default("true")=="true"> + <#if (options.widget_commentcount!'true')=='true'> <div class="col-lg-3 col-xs-6" id="widgetCommentCountBody"> <div class="small-box bg-green"> - <div class="inner"><h3>${commentCount?default(0)}</h3><p><@spring.message code='admin.index.widgets.comments' /></p></div> + <div class="inner"><h3>${commentCount!0}</h3><p><@spring.message code='admin.index.widgets.comments' /></p></div> <div class="icon"><i class="ion ion-stats-bars"></i></div> <a data-pjax="true" href="/admin/comments" class="small-box-footer"><@spring.message code='common.btn.view-all' /> <i class="fa fa-arrow-circle-right"></i></a> </div> </div> </#if> - <#if options.widget_attachmentcount?default("true")=="true"> + <#if (options.widget_attachmentcount!'true')=='true'> <div class="col-lg-3 col-xs-6" id="widgetAttachmentCountBody"> <div class="small-box bg-yellow"> - <div class="inner"><h3>${mediaCount?default(0)}</h3><p><@spring.message code='admin.index.widgets.attachments' /></p></div> + <div class="inner"><h3>${mediaCount!0}</h3><p><@spring.message code='admin.index.widgets.attachments' /></p></div> <div class="icon"><i class="ion ion-person-add"></i></div> <a data-pjax="true" href="/admin/attachments" class="small-box-footer"><@spring.message code='common.btn.upload-image' /> <i class="fa fa-arrow-circle-right"></i></a> </div> </div> </#if> - <#if options.widget_daycount?default("true")=="true"> + <#if (options.widget_daycount!'true')=='true'> <div class="col-lg-3 col-xs-6" id="widgetDayCountBody"> <div class="small-box bg-red"> - <div class="inner"><h3 id="blogStart"></h3><p><@spring.message code='admin.index.widgets.day-count' /></p></div> + <div class="inner"><h3 id="blogStart">${hadDays!}</h3><p><@spring.message code='admin.index.widgets.day-count' /></p></div> <div class="icon"><i class="ion ion-pie-graph"></i></div> - <a href="#" class="small-box-footer" data-toggle="modal" data-target="#blogInfo">${options.blog_start?default('0000-00-00')} <i class="fa fa-star"></i></a> + <a href="javascript:void(0)" class="small-box-footer" data-toggle="modal" data-target="#blogInfo">${options.blog_start!'0000-00-00'} <i class="fa fa-star"></i></a> </div> </div> </#if> </div> <div class="row"> - <#if options.widget_postlastest?default("true")=="true"> + <#if (options.widget_postlastest!'true')=='true'> <div class="col-lg-6 col-xs-12" id="widgetPostLastestBody"> <div class="box box-primary"> <div class="box-header with-border"> @@ -212,15 +204,13 @@ </div> </div> <div class="box-body table-responsive no-padding"> - <table class="table table-bordered table-hover text-center"> - <thead> + <table class="table table-hover text-center"> + <tbody> <tr> <th width="50%"><@spring.message code='common.th.title' /></th> <th><@spring.message code='common.th.status' /></th> <th><@spring.message code='common.th.date' /></th> </tr> - </thead> - <tbody> <#if postTopFive??> <#list postTopFive as post> <tr> @@ -238,7 +228,7 @@ <span class="label bg-red"><@spring.message code='common.status.recycle-bin' /></span> </#if> </td> - <td><@common.timeline datetime="${post.postDate?if_exists}"?datetime /></td> + <td><@common.timeline datetime="${post.postDate!}"?datetime /></td> </tr> </#list> <#else> @@ -250,7 +240,7 @@ </div> </div> </#if> - <#if options.widget_commentlastest?default("true")=="true"> + <#if (options.widget_commentlastest!'true')=='true'> <div class="col-lg-6 col-xs-12" id="widgetCommentLastestBody"> <div class="box box-primary"> <div class="box-header with-border"> @@ -262,17 +252,15 @@ </div> </div> <div class="box-body table-responsive no-padding"> - <table class="table table-bordered table-hover text-center"> - <thead> - <tr> - <th><@spring.message code='common.th.comment-author' /></th> - <th><@spring.message code='common.th.comment-page' /></th> - <th width="30%"><@spring.message code='common.th.content' /></th> - <th><@spring.message code='common.th.status' /></th> - <th><@spring.message code='common.th.date' /></th> - </tr> - </thead> + <table class="table table-hover text-center"> <tbody> + <tr> + <th><@spring.message code='common.th.comment-author' /></th> + <th width="20%"><@spring.message code='common.th.comment-page' /></th> + <th width="30%"><@spring.message code='common.th.content' /></th> + <th><@spring.message code='common.th.status' /></th> + <th><@spring.message code='common.th.date' /></th> + </tr> <#if comments??> <#list comments as comment> <tr> @@ -322,7 +310,7 @@ </div> </div> </#if> - <#if options.widget_logslastest?default("true")=="true"> + <#if (options.widget_logslastest!'true')=='true'> <div class="col-lg-6 col-xs-12" id="widgetLogsLastestBody"> <div class="box box-primary"> <div class="box-header with-border"> @@ -332,7 +320,7 @@ <button type="button" class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown" aria-expanded="false"> <i class="fa fa-bars"></i></button> <ul class="dropdown-menu pull-right" role="menu"> - <li><a href="#" onclick="halo.layerModal('/admin/logs','<@spring.message code="admin.index.widgets.text.all-logs" />')"><@spring.message code='common.btn.view-all' /></a></li> + <li><a href="javascript:void(0)" onclick="halo.layerModal('/admin/logs','<@spring.message code="admin.index.widgets.text.all-logs" />')"><@spring.message code='common.btn.view-all' /></a></li> <li><a href="/admin/logs/clear"><@spring.message code='admin.index.widgets.btn.clear-logs' /></a></li> </ul> <button type="button" class="btn btn-box-tool" data-widget="collapse" data-toggle="tooltip" title="Collapse"> @@ -342,16 +330,14 @@ </div> </div> <div class="box-body table-responsive no-padding"> - <table class="table table-bordered table-hover text-center"> - <thead> + <table class="table table-hover text-center"> + <tbody> <tr> <th><@spring.message code='common.th.action' /></th> <th><@spring.message code='common.th.result' /></th> <th>IP</th> <th><@spring.message code='common.th.date' /></th> </tr> - </thead> - <tbody> <#if logs??> <#list logs as log> <tr> @@ -380,13 +366,13 @@ <h4 class="modal-title" id="blog-data"><@spring.message code='admin.index.blog-data.title' /></h4> </div> <div class="modal-body"> - <p>「${options.blog_title?if_exists}」<@spring.message code='admin.index.blog-data.days-count-before' /><span id="blogStartDay"></span><@spring.message code='admin.index.blog-data.days-count-after' /></p> + <p>「${options.blog_title!}」<@spring.message code='admin.index.blog-data.days-count-before' /><span id="blogStartDay">${hadDays!}</span><@spring.message code='admin.index.blog-data.days-count-after' /></p> <p><@spring.message code='admin.index.blog-data.during' /></p> - <p><@spring.message code='admin.index.blog-data.posts-count-before' /> <@articleTag method="postsCount">${postsCount?default(0)}</@articleTag> <@spring.message code='admin.index.blog-data.posts-count-after' /></p> + <p><@spring.message code='admin.index.blog-data.posts-count-before' /> <@articleTag method="postsCount">${postsCount!0}</@articleTag> <@spring.message code='admin.index.blog-data.posts-count-after' /></p> <p><@spring.message code='admin.index.blog-data.tags-count-before' /> <@commonTag method="tags">${tags?size}</@commonTag> <@spring.message code='admin.index.blog-data.tags-count-after' /></p> <p><@spring.message code='admin.index.blog-data.comments-count-before' /> ${commentCount} <@spring.message code='admin.index.blog-data.comments-count-after' /></p> <p><@spring.message code='admin.index.blog-data.links-count-before' /> <@commonTag method="links">${links?size}</@commonTag> <@spring.message code='admin.index.blog-data.links-count-after' /></p> - <p><@spring.message code='admin.index.blog-data.views-count-before' /> ${postViewsSum?default(0L)} <@spring.message code='admin.index.blog-data.views-count-after' /></p> + <p><@spring.message code='admin.index.blog-data.views-count-before' /> ${postViewsSum!0} <@spring.message code='admin.index.blog-data.views-count-after' /></p> <p><@spring.message code='admin.index.blog-data.motto' /></p> </div> <div class="modal-footer"> @@ -395,19 +381,12 @@ </div> </div> </div> - <script type="application/javascript"> - $(document).ready(function () { - var dateBegin = new Date("${options.blog_start?default('0000-00-00')}"); - var dateEnd = new Date(); - var parseDate = dateEnd.getTime() - dateBegin.getTime(); - var days = Math.floor(parseDate/(24*3600*1000)); - $('#blogStart').html(days+1); - $('#blogStartDay').html(days+1); - }); - $('#btnWidgetsOption').click(function () { - $('#widgetOptionsPanel').slideToggle(400); - }); - </script> </div> -<@footer></@footer> +<@footer> +<script type="application/javascript" id="footer_script"> + $('#btnWidgetsOption').click(function () { + $('#widgetOptionsPanel').slideToggle(400); + }); +</script> +</@footer> </#compress> diff --git a/src/main/resources/templates/admin/admin_login.ftl b/src/main/resources/templates/admin/admin_login.ftl index f6f0aaafa..bd83d0832 100755 --- a/src/main/resources/templates/admin/admin_login.ftl +++ b/src/main/resources/templates/admin/admin_login.ftl @@ -6,27 +6,27 @@ <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"> <title>${options.blog_title!} | <@spring.message code='login.page.title' /> - - - - + + + + -